TIF_E41211115_Genso_quiz_ba.../test/service/test_quiz_service.py

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")