import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:relationship_saver/core/auth/in_memory_token_store.dart'; import 'package:relationship_saver/features/local/storage/local_data_store_in_memory.dart'; import 'package:relationship_saver/features/local/storage/local_data_store_provider.dart'; import 'package:relationship_saver/features/sync/storage/sync_state_store_in_memory.dart'; import 'package:relationship_saver/features/sync/storage/sync_state_store_provider.dart'; import 'package:relationship_saver/integrations/backend/backend_gateway_fake.dart'; import 'package:relationship_saver/integrations/backend/backend_gateway_provider.dart'; import 'package:relationship_saver/main.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { setUp(() { SharedPreferences.setMockInitialValues({}); }); testWidgets('sign-in and sign-out session flow works end-to-end', ( WidgetTester tester, ) async { await tester.binding.setSurfaceSize(const Size(1280, 800)); addTearDown(() => tester.binding.setSurfaceSize(null)); await tester.pumpWidget( ProviderScope( overrides: [ tokenStoreProvider.overrideWithValue(InMemoryTokenStore()), backendGatewayProvider.overrideWithValue(BackendGatewayFake()), localDataStoreProvider.overrideWithValue(InMemoryLocalDataStore()), syncStateStoreProvider.overrideWithValue(InMemorySyncStateStore()), ], child: const RelationshipSaverApp(), ), ); await tester.pumpAndSettle(); expect(find.text('Sign in to continue'), findsOneWidget); await tester.tap(find.widgetWithText(FilledButton, 'Sign In')); await tester.pumpAndSettle(const Duration(milliseconds: 450)); expect(find.text('Capture'), findsWidgets); await tester.tap(find.text('Settings').first); await tester.pumpAndSettle(const Duration(milliseconds: 450)); expect( find.text('Environment and integration configuration for this build.'), findsOneWidget, ); await tester.tap(find.widgetWithText(OutlinedButton, 'Sign Out')); await tester.pumpAndSettle(const Duration(milliseconds: 450)); expect(find.text('Sign in to continue'), findsOneWidget); }); }