Coverage for tests/admin/tests_models.py: 100%
98 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-28 22:05 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-28 22:05 +0000
1from unittest.mock import patch
3from canonicalwebteam.candid import CandidClient
4from canonicalwebteam.exceptions import (
5 StoreApiResponseErrorList,
6 StoreApiResourceNotFound,
7)
8from webapp.helpers import api_publisher_session
9from tests.admin.admin_endpoint_testing import TestAdminEndpoints
12candid = CandidClient(api_publisher_session)
15class TestModelServiceEndpoints(TestAdminEndpoints):
16 def setUp(self):
17 self.api_key = "qwertyuioplkjhgfdsazxcvbnmkiopuytrewqasdfghjklmnbv"
18 super().setUp()
21class TestGetModels(TestModelServiceEndpoints):
22 @patch(
23 "canonicalwebteam.store_api.publishergw.PublisherGW.get_store_models"
24 )
25 def test_get_models(self, mock_get_store_models):
26 mock_get_store_models.return_value = {
27 "models": [{"name": "test_model"}]
28 }
30 response = self.client.get("/api/store/1/models")
31 data = response.json
33 self.assertEqual(response.status_code, 200)
34 self.assertIsNotNone(data["data"])
36 @patch(
37 "canonicalwebteam.store_api.publishergw.PublisherGW.get_store_models"
38 )
39 def test_store_has_no_models(self, mock_get_store_models):
40 mock_get_store_models.return_value = {"models": []}
42 response = self.client.get("/api/store/2/models")
43 data = response.json["data"]
45 success = response.json["success"]
46 self.assertEqual(response.status_code, 200)
47 self.assertTrue(success)
48 self.assertEqual(data["models"], [])
50 @patch(
51 "canonicalwebteam.store_api.publishergw.PublisherGW.get_store_models"
52 )
53 def test_invalid_store_id(self, mock_get_store_models):
54 mock_get_store_models.side_effect = StoreApiResponseErrorList(
55 "Store not found",
56 404,
57 [{"message": "Store not found"}],
58 )
60 response = self.client.get("/api/store/3/models")
61 data = response.json
63 self.assertEqual(response.status_code, 500)
64 self.assertFalse(data["success"])
65 self.assertIn("Store not found", data["message"])
67 @patch(
68 "canonicalwebteam.store_api.publishergw.PublisherGW.get_store_models"
69 )
70 def test_unauthorized_user(self, mock_get_store_models):
71 mock_get_store_models.side_effect = StoreApiResponseErrorList(
72 "unauthorized", 401, [{"message": "unauthorized"}]
73 )
75 response = self.client.get("/api/store/1/models")
76 data = response.json
78 self.assertEqual(response.status_code, 500)
79 self.assertFalse(data["success"])
80 self.assertIn("Store not found", data["message"])
83class TestCreateModel(TestModelServiceEndpoints):
84 @patch(
85 "canonicalwebteam.store_api.publishergw.PublisherGW.create_store_model"
86 )
87 def test_create_model(self, mock_create_store_model):
88 mock_create_store_model.return_value = None
90 payload = {"name": "Test Model", "api_key": self.api_key}
91 response = self.client.post("/api/store/1/models", data=payload)
92 data = response.json
94 self.assertEqual(response.status_code, 201)
95 self.assertTrue(data["success"])
97 def test_create_model_with_invalid_api_key(self):
98 payload = {"name": "Test Model", "api_key": "invalid_api_key"}
99 response = self.client.post("/api/store/1/models", data=payload)
100 data = response.json
102 self.assertEqual(response.status_code, 500)
103 self.assertFalse(data["success"])
104 self.assertIn("Invalid API key", data["message"])
106 def test_name_too_long(self):
107 payload = {"name": "some_random_long_name" * 7}
108 response = self.client.post("/api/store/1/models", data=payload)
109 data = response.json
111 self.assertEqual(response.status_code, 500)
112 self.assertFalse(data["success"])
113 self.assertEqual(
114 data["message"], "Name is too long. Limit 128 characters"
115 )
117 def test_missing_name(self):
118 payload = {"api_key": self.api_key}
119 response = self.client.post("/api/store/1/models", data=payload)
120 data = response.json
122 self.assertEqual(response.status_code, 500)
123 self.assertFalse(data["success"])
124 self.assertEqual(data["message"], "An error occurred")
127class TestUpdateModel(TestModelServiceEndpoints):
128 @patch(
129 "canonicalwebteam.store_api.publishergw.PublisherGW.update_store_model"
130 )
131 def test_update_model(self, mock_update_store_model):
132 mock_update_store_model.return_value = None
134 payload = {"api_key": self.api_key}
135 response = self.client.patch(
136 "/api/store/1/models/Model1", data=payload
137 )
138 data = response.json
140 self.assertEqual(response.status_code, 200)
141 self.assertTrue(data["success"])
143 def test_update_model_with_invalid_api_key(self):
144 payload = {"api_key": "invalid_api_key"}
145 response = self.client.patch(
146 "/api/store/1/models/Model1", data=payload
147 )
148 data = response.json
150 self.assertEqual(response.status_code, 500)
151 self.assertFalse(data["success"])
152 self.assertEqual(data["message"], "Invalid API key")
154 @patch(
155 "canonicalwebteam.store_api.publishergw.PublisherGW.update_store_model"
156 )
157 def test_model_not_found(self, mock_update_store_model):
158 mock_update_store_model.side_effect = StoreApiResourceNotFound(
159 "Model not found", 404, [{"message": "Model not found"}]
160 )
162 payload = {"api_key": self.api_key}
163 response = self.client.patch(
164 "/api/store/1/models/Model1", data=payload
165 )
166 data = response.json
168 self.assertEqual(response.status_code, 500)
169 self.assertFalse(data["success"])
170 self.assertEqual(data["message"], "Model not found")