import 'package:eatvio_app/features/auth/models/credentials_model.dart'; import 'package:eatvio_app/features/auth/models/oauth_login_request.dart'; import 'package:eatvio_app/features/auth/models/oauth_model.dart'; import 'package:eatvio_app/features/auth/models/oauth_verification_confirm_request.dart'; import 'package:eatvio_app/features/auth/models/oauth_verification_confirm_response.dart'; import 'package:eatvio_app/features/auth/models/oauth_verification_request_response.dart'; import 'package:eatvio_app/features/auth/models/token_model.dart'; import 'package:eatvio_app/features/auth/repositories/auth_repository.dart'; import 'package:eatvio_app/features/auth/services/auth_service.dart'; /// Fixture-based replacement for [AuthRepository]. /// /// - Records every credential payload that would be sent to the backend. /// - Returns data loaded from fixture files so QA/backenders can see /// exactly what is exchanged. class FixtureAuthRepository extends AuthRepository { FixtureAuthRepository({required this.tokenFixture}) : super(authService: _NoopAuthService()); final TokenModel tokenFixture; final List credentialCalls = []; List> get credentialPayloads => credentialCalls.map((call) => call.toJson()).toList(growable: false); Duration responseDelay = Duration.zero; Object? error; @override Future getTokenByCredentials(String email, String password) async { credentialCalls.add(CredentialsCall(email: email, password: password)); if (responseDelay > Duration.zero) { await Future.delayed(responseDelay); } if (error != null) { throw error!; } return tokenFixture; } } class CredentialsCall { const CredentialsCall({required this.email, required this.password}); final String email; final String password; Map toJson() => {'email': email, 'password': password}; } class _NoopAuthService implements AuthService { @override Future getTokenByCredentials({required CredentialsModel credentials}) { throw UnimplementedError('Use FixtureAuthRepository override instead.'); } @override Future signInViaSocialMedia({required OAuthLoginRequest body}) { throw UnimplementedError('Not implemented in fixture.'); } @override Future> signUpViaSocialMedia({required OAuthModel body}) { throw UnimplementedError('Not implemented in fixture.'); } @override Future requestOAuthVerification({required Map body}) { throw UnimplementedError('Not implemented in fixture.'); } @override Future confirmOAuthVerification({required OAuthVerificationConfirmRequest body}) { throw UnimplementedError('Not implemented in fixture.'); } }