- apps/web 디렉터리 전체를 삭제하여 web 클라이언트 제거 - Flutter 모바일 앱 구조를 정리하고 모델/스크린/서비스 추가 - agent-ops 규칙 및 로드맵 업데이트 - monorepo 문서 갱신
39 lines
1.2 KiB
Dart
39 lines
1.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:nomadcode_app/main.dart';
|
|
import 'package:nomadcode_app/screens/workspace_home_page.dart';
|
|
import 'package:nomadcode_app/models/project_workspace.dart';
|
|
|
|
void main() {
|
|
testWidgets('App renders console dashboard title', (WidgetTester tester) async {
|
|
await tester.pumpWidget(const MyApp());
|
|
|
|
expect(find.text('NomadCode Console'), findsOneWidget);
|
|
expect(find.text('NomadCode Core'), findsNWidgets(2));
|
|
expect(find.text('IOP Bridge'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('WorkspaceHomePage triggers launcher callback on button tap', (WidgetTester tester) async {
|
|
ProjectWorkspace? launchedProject;
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: WorkspaceHomePage(
|
|
onLaunchCodeServer: (project) async {
|
|
launchedProject = project;
|
|
return true;
|
|
},
|
|
),
|
|
),
|
|
);
|
|
|
|
final buttonFinder = find.widgetWithText(ElevatedButton, 'Open Workspace');
|
|
expect(buttonFinder, findsOneWidget);
|
|
|
|
await tester.tap(buttonFinder);
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(launchedProject, isNotNull);
|
|
expect(launchedProject!.id, equals('nomadcode'));
|
|
});
|
|
}
|