151 lines
5.5 KiB
Dart
151 lines
5.5 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:mocktail/mocktail.dart';
|
|
import 'package:dio/dio.dart';
|
|
import 'package:quiz_app/core/endpoint/api_endpoint.dart';
|
|
import 'package:quiz_app/data/models/login/login_request_model.dart';
|
|
import 'package:quiz_app/data/models/register/register_request.dart';
|
|
import 'package:quiz_app/data/services/auth_service.dart';
|
|
|
|
class MockDio extends Mock implements Dio {}
|
|
|
|
void main() {
|
|
late MockDio mockDio;
|
|
late AuthService authService;
|
|
|
|
setUp(() {
|
|
mockDio = MockDio();
|
|
authService = AuthService();
|
|
authService.dio = mockDio;
|
|
});
|
|
|
|
group('AuthService with Mocktail (Using Real Data)', () {
|
|
test('Register Success', () async {
|
|
final request = RegisterRequestModel(
|
|
email: 'danakhdan@gmail.com',
|
|
password: '123456',
|
|
name: 'Akhdan Robbani',
|
|
birthDate: '12-07-2002',
|
|
);
|
|
|
|
when(() => mockDio.post(APIEndpoint.register, data: request.toJson())).thenAnswer((_) async => Response(
|
|
statusCode: 200,
|
|
data: {},
|
|
requestOptions: RequestOptions(path: APIEndpoint.register),
|
|
));
|
|
|
|
final result = await authService.register(request);
|
|
|
|
expect(result, true);
|
|
verify(() => mockDio.post(APIEndpoint.register, data: request.toJson())).called(1);
|
|
});
|
|
|
|
test('Register Failure', () async {
|
|
final request = RegisterRequestModel(
|
|
email: 'danakhdan@gmail.com',
|
|
password: '123456',
|
|
name: 'Akhdan Robbani',
|
|
birthDate: '12-07-2002',
|
|
);
|
|
|
|
when(() => mockDio.post(APIEndpoint.register, data: request.toJson())).thenAnswer((_) async => Response(
|
|
statusCode: 400,
|
|
data: {'message': 'Registration failed'},
|
|
requestOptions: RequestOptions(path: APIEndpoint.register),
|
|
));
|
|
|
|
expect(() => authService.register(request), throwsException);
|
|
verify(() => mockDio.post(APIEndpoint.register, data: request.toJson())).called(1);
|
|
});
|
|
|
|
test('Login With Email Success', () async {
|
|
final request = LoginRequestModel(email: 'danakhdan@gmail.com', password: '123456');
|
|
final responseData = {
|
|
'message': 'Login success',
|
|
'data': {
|
|
'id': 'lkasjd93093j4oi234n1234',
|
|
'email': 'danakhdan@gmail.com',
|
|
'name': 'Akhdan Robbani',
|
|
'birth_date': '2002-08-13 07:00:00',
|
|
'pic_url': 'https://example.com/akhdan.png',
|
|
'phone': '081234567890',
|
|
'locale': 'id-ID',
|
|
},
|
|
'meta': null,
|
|
};
|
|
|
|
when(() => mockDio.post(APIEndpoint.login, data: request.toJson())).thenAnswer((_) async => Response(
|
|
statusCode: 200,
|
|
data: responseData,
|
|
requestOptions: RequestOptions(path: APIEndpoint.login),
|
|
));
|
|
|
|
final result = await authService.loginWithEmail(request);
|
|
|
|
expect(result.name, 'Akhdan Robbani');
|
|
expect(result.email, 'danakhdan@gmail.com');
|
|
expect(result.birthDate, DateTime.parse('2002-08-13 07:00:00'));
|
|
expect(result.phone, '081234567890');
|
|
expect(result.locale, 'id-ID');
|
|
verify(() => mockDio.post(APIEndpoint.login, data: request.toJson())).called(1);
|
|
});
|
|
|
|
test('Login With Email Failure - Invalid Credentials', () async {
|
|
final request = LoginRequestModel(email: 'danakhdan@gmail.com', password: 'wrongpassword');
|
|
|
|
when(() => mockDio.post(APIEndpoint.login, data: request.toJson())).thenAnswer((_) async => Response(
|
|
statusCode: 401,
|
|
data: {'message': 'Invalid credentials'},
|
|
requestOptions: RequestOptions(path: APIEndpoint.login),
|
|
));
|
|
|
|
expect(() => authService.loginWithEmail(request), throwsException);
|
|
verify(() => mockDio.post(APIEndpoint.login, data: request.toJson())).called(1);
|
|
});
|
|
|
|
test('Login With Google Success', () async {
|
|
final idToken = 'valid_google_token';
|
|
final responseData = {
|
|
'message': 'Login success',
|
|
'data': {
|
|
'id': '680e5a6d2f480bd75db17a09',
|
|
'email': 'danakhdan@gmail.com',
|
|
'name': 'Akhdan Robbani',
|
|
'birth_date': '2002-08-13 07:00:00',
|
|
'pic_url': null,
|
|
'phone': '081234567890',
|
|
'locale': 'id-ID'
|
|
},
|
|
'meta': null
|
|
};
|
|
|
|
when(() => mockDio.post(APIEndpoint.loginGoogle, data: {"token_id": idToken})).thenAnswer((_) async => Response(
|
|
statusCode: 200,
|
|
data: responseData,
|
|
requestOptions: RequestOptions(path: APIEndpoint.loginGoogle),
|
|
));
|
|
|
|
final result = await authService.loginWithGoogle(idToken);
|
|
|
|
expect(result.name, 'Akhdan Robbani');
|
|
expect(result.email, 'danakhdan@gmail.com');
|
|
expect(result.birthDate, DateTime.parse('2002-08-13 07:00:00'));
|
|
expect(result.phone, '081234567890');
|
|
expect(result.locale, 'id-ID');
|
|
verify(() => mockDio.post(APIEndpoint.loginGoogle, data: {"token_id": idToken})).called(1);
|
|
});
|
|
|
|
test('Login With Google Failure - Invalid Token', () async {
|
|
final idToken = 'invalid_google_token';
|
|
|
|
when(() => mockDio.post(APIEndpoint.loginGoogle, data: {"token_id": idToken})).thenAnswer((_) async => Response(
|
|
statusCode: 401,
|
|
data: {'message': 'Invalid Google token'},
|
|
requestOptions: RequestOptions(path: APIEndpoint.loginGoogle),
|
|
));
|
|
|
|
expect(() => authService.loginWithGoogle(idToken), throwsException);
|
|
verify(() => mockDio.post(APIEndpoint.loginGoogle, data: {"token_id": idToken})).called(1);
|
|
});
|
|
});
|
|
}
|