Initial scaffold for the F∆I Platform Tier-2 generic GUI client. Flutter Desktop (macOS, Linux, Windows). Three MVP pages with mock data, sharing one navigation shell: - Modules — installed modules with capabilities, declared permissions and required services. - Audit — event-stream view with type filter and tone-coded rows (started / completed / failed). - Approvals — pending system.approval@^0 reviews with prompt, payload preview, and approve/reject buttons. Live gRPC connection arrives in the next iteration via fai_dart_sdk (sibling repo, currently a typed stub). Future Forgejo path: fai/studio. Local layout matches existing fai_platform/ convention. Background: see docs/architecture/client.md in the platform repo. The tier-2 client was previously called "Stage" — renamed to "Studio" on 2026-05-05 to avoid confusion with "staging environment". flutter analyze: clean. flutter test: 2/2. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
28 lines
912 B
Dart
28 lines
912 B
Dart
// Smoke test: app boots, navigation rail shows the three MVP
|
|
// pages, and the Modules page renders the mocked module list.
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:fai_studio/main.dart';
|
|
|
|
void main() {
|
|
testWidgets('Studio shell shows the three MVP destinations',
|
|
(tester) async {
|
|
await tester.pumpWidget(const StudioApp());
|
|
await tester.pump();
|
|
|
|
expect(find.text('F∆I Studio'), findsOneWidget);
|
|
expect(find.text('Modules'), findsWidgets);
|
|
expect(find.text('Audit'), findsOneWidget);
|
|
expect(find.text('Approvals'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('Modules page lists the mocked modules',
|
|
(tester) async {
|
|
await tester.pumpWidget(const StudioApp());
|
|
await tester.pump();
|
|
|
|
expect(find.text('echo'), findsOneWidget);
|
|
expect(find.text('text-extract'), findsOneWidget);
|
|
expect(find.text('llm-chat'), findsOneWidget);
|
|
});
|
|
}
|