158 lines
5.2 KiB
Python
158 lines
5.2 KiB
Python
# import pytest
|
|
# from datetime import datetime
|
|
# from app.services.quiz_service import QuizService
|
|
# from app.exception import DataNotFoundException, ValidationException
|
|
# from app.models.entities import QuizEntity, SubjectEntity, QuestionItemEntity
|
|
# from bson import ObjectId
|
|
# from unittest.mock import MagicMock
|
|
|
|
|
|
# @pytest.fixture
|
|
# def mock_repositories():
|
|
# return {
|
|
# "quiz_repository": MagicMock(),
|
|
# "user_repository": MagicMock(),
|
|
# "subject_repository": MagicMock(),
|
|
# }
|
|
|
|
|
|
# @pytest.fixture
|
|
# def quiz_service(mock_repositories):
|
|
# return QuizService(
|
|
# quiz_repository=mock_repositories["quiz_repository"],
|
|
# user_repository=mock_repositories["user_repository"],
|
|
# subject_repository=mock_repositories["subject_repository"],
|
|
# )
|
|
|
|
|
|
# def test_get_quiz_found(quiz_service, mock_repositories):
|
|
# mock_quiz = QuizEntity(
|
|
# id=ObjectId(),
|
|
# author_id="user1",
|
|
# subject_id="subj1",
|
|
# title="Ulangan Harian",
|
|
# description="Tes harian",
|
|
# is_public=True,
|
|
# date=datetime.now(),
|
|
# total_quiz=2,
|
|
# limit_duration=60,
|
|
# total_user_playing=10,
|
|
# question_listings=[],
|
|
# )
|
|
# mock_subject = SubjectEntity(
|
|
# id=ObjectId(),
|
|
# name="Matematika",
|
|
# short_name="MTK",
|
|
# description="Deskripsi MTK",
|
|
# icon="math.png",
|
|
# )
|
|
|
|
# mock_repositories["quiz_repository"].get_by_id.return_value = mock_quiz
|
|
# mock_repositories["subject_repository"].get_by_id.return_value = mock_subject
|
|
|
|
# result = quiz_service.get_quiz("quiz123")
|
|
# assert result.title == "Ulangan Harian"
|
|
# mock_repositories["quiz_repository"].get_by_id.assert_called_once_with("quiz123")
|
|
|
|
|
|
# def test_get_quiz_not_found(quiz_service, mock_repositories):
|
|
# mock_repositories["quiz_repository"].get_by_id.return_value = None
|
|
# with pytest.raises(DataNotFoundException):
|
|
# quiz_service.get_quiz("invalid_id")
|
|
|
|
|
|
# def test_create_quiz_valid(quiz_service, mock_repositories):
|
|
# quiz_data = MagicMock()
|
|
# quiz_data.question_listings = [
|
|
# MagicMock(type="option", options=["a", "b", "c", "d"], duration=30),
|
|
# MagicMock(type="true_false", duration=10),
|
|
# ]
|
|
# quiz_service.create_quiz(quiz_data)
|
|
# assert mock_repositories["quiz_repository"].create.called
|
|
|
|
|
|
# def test_create_quiz_invalid_options(quiz_service):
|
|
# quiz_data = MagicMock()
|
|
# quiz_data.question_listings = [
|
|
# MagicMock(type="option", options=["a", "b"], duration=30)
|
|
# ]
|
|
# with pytest.raises(ValidationException):
|
|
# quiz_service.create_quiz(quiz_data)
|
|
|
|
|
|
# def test_search_quiz(quiz_service, mock_repositories):
|
|
# quiz = QuizEntity(
|
|
# id=ObjectId(),
|
|
# author_id="user1",
|
|
# subject_id="subj1",
|
|
# title="Kuis Sejarah",
|
|
# description=None,
|
|
# is_public=True,
|
|
# date=datetime.now(),
|
|
# total_quiz=1,
|
|
# limit_duration=30,
|
|
# total_user_playing=0,
|
|
# question_listings=[],
|
|
# )
|
|
# author = MagicMock()
|
|
|
|
# mock_repositories["quiz_repository"].search_by_title_or_category.return_value = [
|
|
# quiz
|
|
# ]
|
|
# mock_repositories["quiz_repository"].count_by_search.return_value = 1
|
|
# mock_repositories["user_repository"].get_user_by_id.return_value = author
|
|
|
|
# quizzes, total = quiz_service.search_quiz("sejarah", "subj1")
|
|
# assert total == 1
|
|
# assert len(quizzes) == 1
|
|
|
|
|
|
# def test_get_user_quiz_empty(quiz_service, mock_repositories):
|
|
# mock_repositories["quiz_repository"].get_by_user_id.return_value = []
|
|
# result = quiz_service.get_user_quiz("user1")
|
|
# assert result.total == 0
|
|
# assert result.quizzes == []
|
|
|
|
|
|
# def test_get_quiz_populer_found(quiz_service, mock_repositories):
|
|
# quiz = QuizEntity(
|
|
# id=ObjectId(),
|
|
# author_id="user1",
|
|
# subject_id="subj1",
|
|
# title="Top Quiz",
|
|
# description=None,
|
|
# is_public=True,
|
|
# date=datetime.now(),
|
|
# total_quiz=1,
|
|
# limit_duration=30,
|
|
# total_user_playing=100,
|
|
# question_listings=[],
|
|
# )
|
|
# mock_repositories["quiz_repository"].get_top_played_quizzes.return_value = [quiz]
|
|
# mock_repositories["user_repository"].get_user_by_id.return_value = MagicMock()
|
|
|
|
# result = quiz_service.get_quiz_populer(1, 5)
|
|
# assert len(result) == 1
|
|
|
|
|
|
# def test_get_quiz_populer_not_found(quiz_service, mock_repositories):
|
|
# mock_repositories["quiz_repository"].get_top_played_quizzes.return_value = []
|
|
# with pytest.raises(DataNotFoundException):
|
|
# quiz_service.get_quiz_populer(1, 5)
|
|
|
|
|
|
# def test_update_quiz(quiz_service, mock_repositories):
|
|
# mock_repositories["quiz_repository"].update.return_value = True
|
|
# result = quiz_service.update_quiz("quiz123", {"title": "Updated Title"})
|
|
# assert result is True
|
|
# mock_repositories["quiz_repository"].update.assert_called_once_with(
|
|
# "quiz123", {"title": "Updated Title"}
|
|
# )
|
|
|
|
|
|
# def test_delete_quiz(quiz_service, mock_repositories):
|
|
# mock_repositories["quiz_repository"].delete.return_value = True
|
|
# result = quiz_service.delete_quiz("quiz123")
|
|
# assert result is True
|
|
# mock_repositories["quiz_repository"].delete.assert_called_once_with("quiz123")
|