Coverage for tests/services/test_class_service.py: 100%
51 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-02 02:49 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-02 02:49 +0000
1import pytest
2from unittest.mock import patch, MagicMock
3from app.services import class_service
6@patch("app.services.class_service.client", new_callable=MagicMock)
7def test_insert_new_class_success(mock_client, app):
8 mock_execute = MagicMock()
9 mock_execute.data = [{"id": "class123"}]
10 mock_client.table.return_value.insert.return_value.execute.return_value = (
11 mock_execute
12 )
14 class_data = {
15 "classTitle": "Math 101",
16 "classCode": "MATH101",
17 "instructorId": "instructor1",
18 "classHexColor": "#ffffff",
19 "classImageCover": "image.png",
20 "classDescription": "Intro to Math",
21 }
23 result = class_service.insert_new_class(class_data)
25 assert result["id"] == "class123"
26 mock_client.table.assert_called_once_with("classes")
29@patch("app.services.class_service.client", new_callable=MagicMock)
30def test_insert_new_class_failure(mock_client, app):
31 mock_execute = MagicMock()
32 mock_execute.data = None
33 mock_client.table.return_value.insert.return_value.execute.return_value = (
34 mock_execute
35 )
37 class_data = {
38 "classTitle": "Math 101",
39 "classCode": "MATH101",
40 "instructorId": "instructor1",
41 "classHexColor": "#ffffff",
42 }
44 with pytest.raises(
45 Exception, match="Failed to insert new class into the database."
46 ):
47 class_service.insert_new_class(class_data)
50@patch("app.services.class_service.client", new_callable=MagicMock)
51def test_fetch_classes_by_instructor_success(mock_client, app):
52 mock_execute = MagicMock()
53 mock_execute.data = [{"id": "class123"}, {"id": "class456"}]
54 mock_client.table.return_value.select.return_value.eq.return_value.execute.return_value = (
55 mock_execute
56 )
58 result = class_service.fetch_classes_by_instructor("instructor1")
60 assert len(result) == 2
61 assert result[0]["id"] == "class123"
62 mock_client.table.assert_called_once_with("classes")
65@patch("app.services.class_service.client", new_callable=MagicMock)
66def test_fetch_classes_by_instructor_failure(mock_client, app):
67 mock_execute = MagicMock()
68 mock_execute.data = None
69 mock_client.table.return_value.select.return_value.eq.return_value.execute.return_value = (
70 mock_execute
71 )
73 with pytest.raises(
74 Exception, match="Failed to retrieve classes for the given instructor."
75 ):
76 class_service.fetch_classes_by_instructor("instructor1")
79@patch("app.services.class_service.client", new_callable=MagicMock)
80def test_insert_class_user_success(mock_client, app):
81 mock_execute = MagicMock()
82 mock_execute.data = [{"id": "join123"}]
83 mock_client.table.return_value.insert.return_value.execute.return_value = (
84 mock_execute
85 )
87 result = class_service.insert_class_user("student1", "class1")
89 assert result["id"] == "join123"
90 mock_client.table.assert_called_once_with("class_users")
93@patch("app.services.class_service.client", new_callable=MagicMock)
94def test_insert_class_user_failure(mock_client, app):
95 mock_execute = MagicMock()
96 mock_execute.data = None
97 mock_client.table.return_value.insert.return_value.execute.return_value = (
98 mock_execute
99 )
101 with pytest.raises(Exception, match="Failed to register user to class."):
102 class_service.insert_class_user("student1", "class1")