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/auth/session_controller.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/integrations/backend/models/backend_models.dart'; void main() { test('initial state is signed out when token store is empty', () async { final ProviderContainer container = ProviderContainer( overrides: [ tokenStoreProvider.overrideWithValue(InMemoryTokenStore()), backendGatewayProvider.overrideWithValue(BackendGatewayFake()), ], ); addTearDown(container.dispose); final AuthSession? session = await container.read( sessionControllerProvider.future, ); expect(session, isNull); }); test('sign-in creates session and sign-out clears it', () async { final InMemoryTokenStore tokenStore = InMemoryTokenStore(); final ProviderContainer container = ProviderContainer( overrides: [ tokenStoreProvider.overrideWithValue(tokenStore), backendGatewayProvider.overrideWithValue(BackendGatewayFake()), ], ); addTearDown(container.dispose); await container .read(sessionControllerProvider.notifier) .signIn( method: SignInMethod.password, email: 'demo@example.com', password: 'password123', ); final AuthSession? signedIn = container .read(sessionControllerProvider) .asData ?.value; expect(signedIn, isNotNull); expect(signedIn?.user.email, 'demo@example.com'); await container.read(sessionControllerProvider.notifier).signOut(); final AuthSession? signedOut = container .read(sessionControllerProvider) .asData ?.value; expect(signedOut, isNull); expect(await tokenStore.read(), isNull); }); }