alt/apps/client/test/app/bootstrap_test.dart
toki 1f1527d7c6 feat: Flutter Operator Console milestone completion and migration to archive
- Move flutter-operator-console milestone to archive (completed)
- Add AltWorkbenchShell for workbench pattern migration
- Update router and dashboard screen for workbench integration
- Update agent-roadmap and phase documentation
- Headless workflow validation complete (02+01_headless_validation)
- Update client domain rules and README
2026-05-31 21:11:10 +09:00

113 lines
3.2 KiB
Dart

import 'package:alt_client/src/app/bootstrap.dart';
import 'package:alt_client/src/integrations/mattermost/mattermost_auth_service.dart';
import 'package:alt_client/src/integrations/mattermost/mattermost_push_host_integration.dart';
import 'package:alt_client/src/integrations/mattermost/mattermost_push_client.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
class _FakePushClient implements MattermostPushClient {
int initializeCalls = 0;
@override
Stream<Map<String, dynamic>> get onNotification => const Stream.empty();
@override
Future<void> initialize() async {
initializeCalls += 1;
}
@override
Future<String?> getDeviceToken() async => null;
@override
Future<void> setAuthToken(
String serverUrl,
String token, {
String? identifier,
}) async {}
@override
Future<void> setSigningKey(String serverUrl, String signingKey) async {}
@override
set onDeviceTokenReady(Future<void> Function(String token)? callback) {}
@override
set onNavigateToChannel(
void Function(String serverUrl, String channelId)? callback,
) {}
@override
set onNavigateToThread(
void Function(String serverUrl, String rootId)? callback,
) {}
}
class _NoopAuthService implements MattermostAuthService {
@override
Future<void> autoLoginAndRegister() async {}
@override
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
void main() {
group('AltClientBootstrap Tests', () {
test(
'default bootstrapAltClient does not call Firebase or Mattermost and returns null',
() async {
final host = await bootstrapAltClient(
options: const AltClientBootstrapOptions(applyFullscreen: false),
);
expect(host, isNull);
},
);
test(
'opt-in bootstrapAltClient initializes Firebase and Mattermost push host',
() async {
int firebaseInitCalls = 0;
final fakePushClient = _FakePushClient();
final host = await bootstrapAltClient(
options: AltClientBootstrapOptions(
enablePush: true,
applyFullscreen: false,
firebaseInitializer: () async {
firebaseInitCalls += 1;
},
mattermostHostFactory: () {
return MattermostPushHostIntegration(
pushClient: fakePushClient,
authServiceFactory: (_) => _NoopAuthService(),
);
},
),
);
expect(firebaseInitCalls, equals(1));
expect(host, isNotNull);
expect(fakePushClient.initializeCalls, equals(1));
},
);
testWidgets(
'default runAltClient renders AltClientApp shell without Firebase/push',
(tester) async {
Widget? capturedApp;
await runAltClient(
options: const AltClientBootstrapOptions(applyFullscreen: false),
runAppOverride: (app) {
capturedApp = app;
},
);
expect(capturedApp, isNotNull);
await tester.pumpWidget(capturedApp!);
expect(find.text('ALT Console'), findsOneWidget);
expect(find.text('Backtests'), findsWidgets);
expect(find.text('Disconnected'), findsOneWidget);
},
);
});
}