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

1import pytest 

2from unittest.mock import patch, MagicMock 

3from app.services import class_service 

4 

5 

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 ) 

13 

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 } 

22 

23 result = class_service.insert_new_class(class_data) 

24 

25 assert result["id"] == "class123" 

26 mock_client.table.assert_called_once_with("classes") 

27 

28 

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 ) 

36 

37 class_data = { 

38 "classTitle": "Math 101", 

39 "classCode": "MATH101", 

40 "instructorId": "instructor1", 

41 "classHexColor": "#ffffff", 

42 } 

43 

44 with pytest.raises( 

45 Exception, match="Failed to insert new class into the database." 

46 ): 

47 class_service.insert_new_class(class_data) 

48 

49 

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 ) 

57 

58 result = class_service.fetch_classes_by_instructor("instructor1") 

59 

60 assert len(result) == 2 

61 assert result[0]["id"] == "class123" 

62 mock_client.table.assert_called_once_with("classes") 

63 

64 

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 ) 

72 

73 with pytest.raises( 

74 Exception, match="Failed to retrieve classes for the given instructor." 

75 ): 

76 class_service.fetch_classes_by_instructor("instructor1") 

77 

78 

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 ) 

86 

87 result = class_service.insert_class_user("student1", "class1") 

88 

89 assert result["id"] == "join123" 

90 mock_client.table.assert_called_once_with("class_users") 

91 

92 

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 ) 

100 

101 with pytest.raises(Exception, match="Failed to register user to class."): 

102 class_service.insert_class_user("student1", "class1")