Skip to content

Commit bacdceb

Browse files
committed
add few sdk tests
1 parent d426277 commit bacdceb

File tree

3 files changed

+196
-0
lines changed

3 files changed

+196
-0
lines changed

tests/test_aimodels.py

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,112 @@ def test_graphql_error_handling(self, mock_post: MagicMock) -> None:
117117
with self.assertRaises(DataSpaceAPIError):
118118
self.client.get_by_id_graphql("123")
119119

120+
@patch.object(AIModelClient, "post")
121+
def test_call_model(self, mock_post: MagicMock) -> None:
122+
"""Test calling an AI model."""
123+
mock_post.return_value = {
124+
"success": True,
125+
"output": "Paris is the capital of France.",
126+
"latency_ms": 150,
127+
"provider": "OpenAI",
128+
}
129+
130+
result = self.client.call_model(
131+
model_id="123",
132+
input_text="What is the capital of France?",
133+
parameters={"temperature": 0.7, "max_tokens": 100},
134+
)
135+
136+
self.assertTrue(result["success"])
137+
self.assertEqual(result["output"], "Paris is the capital of France.")
138+
self.assertEqual(result["latency_ms"], 150)
139+
mock_post.assert_called_once()
140+
141+
@patch.object(AIModelClient, "post")
142+
def test_call_model_async(self, mock_post: MagicMock) -> None:
143+
"""Test calling an AI model asynchronously."""
144+
mock_post.return_value = {
145+
"task_id": "task-456",
146+
"status": "PENDING",
147+
"created_at": "2024-01-01T00:00:00Z",
148+
}
149+
150+
result = self.client.call_model_async(
151+
model_id="123",
152+
input_text="Generate a long document",
153+
parameters={"max_tokens": 2000},
154+
)
155+
156+
self.assertEqual(result["task_id"], "task-456")
157+
self.assertEqual(result["status"], "PENDING")
158+
mock_post.assert_called_once()
159+
160+
@patch.object(AIModelClient, "post")
161+
def test_call_model_error(self, mock_post: MagicMock) -> None:
162+
"""Test AI model call with error."""
163+
mock_post.return_value = {
164+
"success": False,
165+
"error": "Model not available",
166+
}
167+
168+
result = self.client.call_model(
169+
model_id="123",
170+
input_text="Test input",
171+
)
172+
173+
self.assertFalse(result["success"])
174+
self.assertEqual(result["error"], "Model not available")
175+
176+
@patch.object(AIModelClient, "post")
177+
def test_create_model(self, mock_post: MagicMock) -> None:
178+
"""Test creating an AI model."""
179+
mock_post.return_value = {
180+
"id": "new-model-123",
181+
"displayName": "New Model",
182+
"modelType": "LLM",
183+
}
184+
185+
result = self.client.create(
186+
{
187+
"displayName": "New Model",
188+
"modelType": "LLM",
189+
"provider": "OpenAI",
190+
}
191+
)
192+
193+
self.assertEqual(result["id"], "new-model-123")
194+
self.assertEqual(result["displayName"], "New Model")
195+
mock_post.assert_called_once()
196+
197+
@patch.object(AIModelClient, "put")
198+
def test_update_model(self, mock_put: MagicMock) -> None:
199+
"""Test updating an AI model."""
200+
mock_put.return_value = {
201+
"id": "123",
202+
"displayName": "Updated Model",
203+
"modelType": "LLM",
204+
}
205+
206+
result = self.client.update(
207+
"123",
208+
{
209+
"displayName": "Updated Model",
210+
},
211+
)
212+
213+
self.assertEqual(result["displayName"], "Updated Model")
214+
mock_put.assert_called_once()
215+
216+
@patch.object(AIModelClient, "delete")
217+
def test_delete_model(self, mock_delete: MagicMock) -> None:
218+
"""Test deleting an AI model."""
219+
mock_delete.return_value = {"message": "Model deleted successfully"}
220+
221+
result = self.client.delete_model("123")
222+
223+
self.assertEqual(result["message"], "Model deleted successfully")
224+
mock_delete.assert_called_once()
225+
120226

121227
if __name__ == "__main__":
122228
unittest.main()

tests/test_auth.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,51 @@ def test_is_authenticated(self) -> None:
141141
self.auth_client.access_token = "test_token"
142142
self.assertTrue(self.auth_client.is_authenticated())
143143

144+
@patch("dataspace_sdk.auth.requests.post")
145+
def test_login_as_service_account(self, mock_post: MagicMock) -> None:
146+
"""Test successful service account login."""
147+
# Create auth client with client secret
148+
auth_client = AuthClient(
149+
self.base_url,
150+
keycloak_url=self.keycloak_url,
151+
keycloak_realm=self.keycloak_realm,
152+
keycloak_client_id=self.keycloak_client_id,
153+
keycloak_client_secret="test_secret",
154+
)
155+
156+
# Mock Keycloak token response
157+
keycloak_response = MagicMock()
158+
keycloak_response.status_code = 200
159+
keycloak_response.json.return_value = {
160+
"access_token": "service_access_token",
161+
"refresh_token": "service_refresh_token",
162+
"expires_in": 300,
163+
}
164+
165+
# Mock DataSpace backend login response
166+
backend_response = MagicMock()
167+
backend_response.status_code = 200
168+
backend_response.json.return_value = {
169+
"access": "test_access_token",
170+
"refresh": "test_refresh_token",
171+
"user": {"id": "service-123", "username": "service-account"},
172+
}
173+
174+
mock_post.side_effect = [keycloak_response, backend_response]
175+
176+
result = auth_client.login_as_service_account()
177+
178+
self.assertEqual(auth_client.access_token, "test_access_token")
179+
self.assertEqual(auth_client.refresh_token, "test_refresh_token")
180+
self.assertIsNotNone(auth_client.user_info)
181+
self.assertEqual(result["user"]["username"], "service-account")
182+
self.assertEqual(mock_post.call_count, 2)
183+
184+
def test_login_as_service_account_no_secret(self) -> None:
185+
"""Test service account login without client secret."""
186+
with self.assertRaises(DataSpaceAuthError):
187+
self.auth_client.login_as_service_account()
188+
144189

145190
if __name__ == "__main__":
146191
unittest.main()

tests/test_datasets.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,51 @@ def test_search_with_filters(self, mock_get: MagicMock) -> None:
8989
self.assertEqual(result["total"], 5)
9090
mock_get.assert_called_once()
9191

92+
@patch.object(DatasetClient, "get")
93+
def test_get_resources(self, mock_get: MagicMock) -> None:
94+
"""Test get dataset resources."""
95+
mock_get.return_value = [
96+
{
97+
"id": "res-1",
98+
"title": "Resource 1",
99+
"format": "CSV",
100+
"url": "https://example.com/data.csv",
101+
}
102+
]
103+
104+
result = self.client.get_resources("dataset-123")
105+
106+
self.assertEqual(len(result), 1)
107+
self.assertEqual(result[0]["title"], "Resource 1")
108+
mock_get.assert_called_once()
109+
110+
@patch.object(DatasetClient, "post")
111+
def test_list_by_organization(self, mock_post: MagicMock) -> None:
112+
"""Test list datasets by organization."""
113+
mock_post.return_value = {
114+
"data": {
115+
"datasets": [
116+
{"id": "1", "title": "Org Dataset 1"},
117+
{"id": "2", "title": "Org Dataset 2"},
118+
]
119+
}
120+
}
121+
122+
result = self.client.list_by_organization("org-123", limit=10)
123+
124+
self.assertIsInstance(result, (list, dict))
125+
mock_post.assert_called_once()
126+
127+
@patch.object(DatasetClient, "get")
128+
def test_search_with_sorting(self, mock_get: MagicMock) -> None:
129+
"""Test dataset search with sorting."""
130+
mock_get.return_value = {"total": 3, "results": []}
131+
132+
result = self.client.search(query="test", sort="recent", page=1, page_size=10)
133+
134+
self.assertEqual(result["total"], 3)
135+
mock_get.assert_called_once()
136+
92137

93138
if __name__ == "__main__":
94139
unittest.main()

0 commit comments

Comments
 (0)