TIF_E41211115_Genso_quiz_app/test/service/answer_service_test.dart

129 lines
4.2 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/base/base_model.dart';
import 'package:quiz_app/data/services/answer_service.dart';
class MockDio extends Mock implements Dio {}
void main() {
late MockDio mockDio;
late AnswerService answerService;
setUp(() {
mockDio = MockDio();
answerService = AnswerService();
answerService.dio = mockDio;
});
group('AnswerService Tests', () {
test('submitQuizAnswers - Success', () async {
final payload = {'question_id': 'q1', 'answer': 'A'};
when(() => mockDio.post(APIEndpoint.quizAnswer, data: payload)).thenAnswer((_) async => Response(
statusCode: 200,
data: {},
requestOptions: RequestOptions(path: APIEndpoint.quizAnswer),
));
final result = await answerService.submitQuizAnswers(payload);
expect(result, isA<BaseResponseModel>());
expect(result?.message, 'success');
verify(() => mockDio.post(APIEndpoint.quizAnswer, data: payload)).called(1);
});
test('submitQuizAnswers - Failure', () async {
final payload = {'question_id': 'q1', 'answer': 'A'};
when(() => mockDio.post(APIEndpoint.quizAnswer, data: payload)).thenThrow(DioException(
requestOptions: RequestOptions(path: APIEndpoint.quizAnswer),
error: 'Network Error',
type: DioExceptionType.connectionError,
));
final result = await answerService.submitQuizAnswers(payload);
expect(result, isNull);
verify(() => mockDio.post(APIEndpoint.quizAnswer, data: payload)).called(1);
});
test('getAnswerSession - Success', () async {
final sessionId = '682a26b3bedac6c20a215452';
final userId = '680f0e63180b5c19b3751d42';
final responseData = {
"message": "Successfully retrieved the answer",
"data": {
"id": "682a26e6bedac6c20a215453",
"session_id": "682a26b3bedac6c20a215452",
"quiz_id": "682a120f18339f4cc31318e4",
"user_id": "680f0e63180b5c19b3751d42",
"answered_at": "2025-05-19 01:28:22",
"answers": [
{
"index": 1,
"question": "Siapakah ketua Wali Songo yang juga dikenal sebagai Sunan Gresik?",
"target_answer": "Maulana Malik Ibrahim",
"duration": 30,
"type": "fill_the_blank",
"options": null,
"answer": "maulana Malik ibrahim",
"is_correct": true,
"time_spent": 8.0
}
],
"total_score": 100,
"total_correct": 1
},
"meta": null
};
when(() => mockDio.post(APIEndpoint.quizAnswerSession, data: {
"session_id": sessionId,
"user_id": userId,
})).thenAnswer((_) async => Response(
statusCode: 200,
data: responseData,
requestOptions: RequestOptions(path: APIEndpoint.quizAnswerSession),
));
final result = await answerService.getAnswerSession(sessionId, userId);
expect(result, isNotNull);
expect(result?.data?.sessionId, sessionId);
expect(result?.data?.userId, userId);
expect(result?.data?.totalScore, 100);
verify(() => mockDio.post(APIEndpoint.quizAnswerSession, data: {
"session_id": sessionId,
"user_id": userId,
})).called(1);
});
test('getAnswerSession - Failure', () async {
final sessionId = '';
final userId = '';
when(() => mockDio.post(APIEndpoint.quizAnswerSession, data: {
"session_id": sessionId,
"user_id": userId,
})).thenThrow(DioException(
requestOptions: RequestOptions(path: APIEndpoint.quizAnswerSession),
error: 'Network Error',
type: DioExceptionType.connectionError,
));
final result = await answerService.getAnswerSession(sessionId, userId);
expect(result, isNull);
verify(() => mockDio.post(APIEndpoint.quizAnswerSession, data: {
"session_id": sessionId,
"user_id": userId,
})).called(1);
});
});
}