Files
eatvio_app/test/fixtures/doubles/auth_doubles.dart

75 lines
2.8 KiB
Dart

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<CredentialsCall> credentialCalls = <CredentialsCall>[];
List<Map<String, String>> get credentialPayloads => credentialCalls.map((call) => call.toJson()).toList(growable: false);
Duration responseDelay = Duration.zero;
Object? error;
@override
Future<TokenModel> 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<String, String> toJson() => <String, String>{'email': email, 'password': password};
}
class _NoopAuthService implements AuthService {
@override
Future<TokenModel> getTokenByCredentials({required CredentialsModel credentials}) {
throw UnimplementedError('Use FixtureAuthRepository override instead.');
}
@override
Future<TokenModel> signInViaSocialMedia({required OAuthLoginRequest body}) {
throw UnimplementedError('Not implemented in fixture.');
}
@override
Future<Map<String, Object?>> signUpViaSocialMedia({required OAuthModel body}) {
throw UnimplementedError('Not implemented in fixture.');
}
@override
Future<OAuthVerificationRequestResponse> requestOAuthVerification({required Map<String, dynamic> body}) {
throw UnimplementedError('Not implemented in fixture.');
}
@override
Future<OAuthVerificationConfirmResponse> confirmOAuthVerification({required OAuthVerificationConfirmRequest body}) {
throw UnimplementedError('Not implemented in fixture.');
}
}