Add auth session flow and sign-in UX
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user