Skip to content

Commit 44ac8a5

Browse files
committed
Update unit test mocks to match new API response structure
- Change Dataset mocks to use full_name instead of slug/namespace - Update owner structure to use handle+type instead of id+handle - Add nullable field to all column mocks - Change metadata from description field to dict - Update TableElement mocks to use full_name format - Change InsertDataResponse mock to use 'name' instead of 'table_name' - Fix all route expectations to remove /v1 prefix (already in api_version)
1 parent af2e3bf commit 44ac8a5

File tree

2 files changed

+47
-55
lines changed

2 files changed

+47
-55
lines changed

tests/unit/test_datasets_api.py

Lines changed: 31 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ def test_list_datasets_minimal(self):
1717
mock_response = {
1818
"datasets": [
1919
{
20-
"slug": "dex.trades",
21-
"name": "DEX Trades",
20+
"full_name": "dune.dex.trades",
2221
"type": "transformation_view",
23-
"owner": {"id": 1, "handle": "dune"},
24-
"namespace": "dex",
22+
"owner": {"handle": "dune", "type": "team"},
23+
"columns": [
24+
{"name": "block_time", "type": "timestamp", "nullable": False}
25+
],
26+
"metadata": {},
2527
"created_at": "2024-01-01T00:00:00Z",
2628
"updated_at": "2024-01-02T00:00:00Z",
2729
"is_private": False,
@@ -34,23 +36,23 @@ def test_list_datasets_minimal(self):
3436
result = self.api.list_datasets(limit=50, offset=0)
3537

3638
self.api._get.assert_called_once_with(
37-
route="/v1/datasets",
39+
route="/datasets",
3840
params={"limit": 50, "offset": 0},
3941
)
4042
self.assertIsInstance(result, DatasetListResponse)
4143
self.assertEqual(len(result.datasets), 1)
42-
self.assertEqual(result.datasets[0].slug, "dex.trades")
44+
self.assertEqual(result.datasets[0].full_name, "dune.dex.trades")
4345
self.assertEqual(result.total, 1)
4446

4547
def test_list_datasets_with_filters(self):
4648
mock_response = {
4749
"datasets": [
4850
{
49-
"slug": "user.my_table",
50-
"name": "My Table",
51+
"full_name": "dune.user.my_table",
5152
"type": "uploaded_table",
52-
"owner": {"id": 123, "handle": "test_user"},
53-
"namespace": "user",
53+
"owner": {"handle": "test_user", "type": "user"},
54+
"columns": [{"name": "id", "type": "integer", "nullable": False}],
55+
"metadata": {},
5456
"created_at": "2024-01-01T00:00:00Z",
5557
"updated_at": "2024-01-02T00:00:00Z",
5658
"is_private": True,
@@ -68,7 +70,7 @@ def test_list_datasets_with_filters(self):
6870
)
6971

7072
self.api._get.assert_called_once_with(
71-
route="/v1/datasets",
73+
route="/datasets",
7274
params={
7375
"limit": 100,
7476
"offset": 10,
@@ -82,57 +84,52 @@ def test_list_datasets_with_filters(self):
8284

8385
def test_get_dataset(self):
8486
mock_response = {
85-
"slug": "dex.trades",
86-
"name": "DEX Trades",
87+
"full_name": "dune.dex.trades",
8788
"type": "transformation_view",
88-
"owner": {"id": 1, "handle": "dune"},
89-
"namespace": "dex",
89+
"owner": {"handle": "dune", "type": "team"},
9090
"columns": [
91-
{"name": "block_time", "type": "timestamp"},
92-
{"name": "token_bought_address", "type": "varchar"},
93-
{"name": "token_sold_address", "type": "varchar"},
94-
{"name": "amount_usd", "type": "double"},
91+
{"name": "block_time", "type": "timestamp", "nullable": False},
92+
{"name": "token_bought_address", "type": "varchar", "nullable": False},
93+
{"name": "token_sold_address", "type": "varchar", "nullable": False},
94+
{"name": "amount_usd", "type": "double", "nullable": True},
9595
],
96-
"description": "All DEX trades across multiple chains",
96+
"metadata": {"description": "All DEX trades across multiple chains"},
9797
"created_at": "2024-01-01T00:00:00Z",
9898
"updated_at": "2024-01-02T00:00:00Z",
9999
"is_private": False,
100100
}
101101
self.api._get.return_value = mock_response
102102

103-
result = self.api.get_dataset("dex.trades")
103+
result = self.api.get_dataset("dune.dex.trades")
104104

105-
self.api._get.assert_called_once_with(route="/v1/datasets/dex.trades")
105+
self.api._get.assert_called_once_with(route="/datasets/dune.dex.trades")
106106
self.assertIsInstance(result, DatasetResponse)
107-
self.assertEqual(result.slug, "dex.trades")
108-
self.assertEqual(result.name, "DEX Trades")
107+
self.assertEqual(result.full_name, "dune.dex.trades")
109108
self.assertEqual(len(result.columns), 4)
110109
self.assertEqual(result.columns[0].name, "block_time")
111110
self.assertEqual(result.columns[0].type, "timestamp")
112-
self.assertEqual(result.description, "All DEX trades across multiple chains")
111+
self.assertEqual(result.metadata.get("description"), "All DEX trades across multiple chains")
113112

114113
def test_get_dataset_no_description(self):
115114
mock_response = {
116-
"slug": "test.dataset",
117-
"name": "Test Dataset",
115+
"full_name": "dune.test.dataset",
118116
"type": "uploaded_table",
119-
"owner": {"id": 123, "handle": "test_user"},
120-
"namespace": "test",
117+
"owner": {"handle": "test_user", "type": "user"},
121118
"columns": [
122-
{"name": "id", "type": "int"},
123-
{"name": "value", "type": "varchar"},
119+
{"name": "id", "type": "integer", "nullable": False},
120+
{"name": "value", "type": "varchar", "nullable": True},
124121
],
125-
"description": None,
122+
"metadata": {},
126123
"created_at": "2024-01-01T00:00:00Z",
127124
"updated_at": "2024-01-02T00:00:00Z",
128125
"is_private": True,
129126
}
130127
self.api._get.return_value = mock_response
131128

132-
result = self.api.get_dataset("test.dataset")
129+
result = self.api.get_dataset("dune.test.dataset")
133130

134131
self.assertIsInstance(result, DatasetResponse)
135-
self.assertIsNone(result.description)
132+
self.assertEqual(result.metadata, {})
136133
self.assertTrue(result.is_private)
137134

138135

tests/unit/test_uploads_api.py

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,16 @@ def test_list_uploads(self):
2424
mock_response = {
2525
"tables": [
2626
{
27-
"namespace": "test_namespace",
28-
"table_name": "test_table",
29-
"full_name": "test_namespace.test_table",
30-
"example_query": "SELECT * FROM test_namespace.test_table",
31-
"description": "Test table",
27+
"full_name": "dune.test_namespace.test_table",
3228
"is_private": False,
33-
"columns": [
34-
{"name": "col1", "type": "varchar"},
35-
{"name": "col2", "type": "int"},
36-
],
37-
"size_bytes": 1024,
38-
"row_count": 100,
39-
"owner": {"id": 1, "handle": "test_user"},
29+
"table_size_bytes": "1024",
4030
"created_at": "2024-01-01T00:00:00Z",
4131
"updated_at": "2024-01-02T00:00:00Z",
32+
"owner": {"handle": "test_user", "type": "user"},
33+
"columns": [
34+
{"name": "col1", "type": "varchar", "nullable": False},
35+
{"name": "col2", "type": "integer", "nullable": False},
36+
],
4237
}
4338
],
4439
"next_offset": 50,
@@ -48,12 +43,12 @@ def test_list_uploads(self):
4843
result = self.api.list_uploads(limit=50, offset=0)
4944

5045
self.api._get.assert_called_once_with(
51-
route="/v1/uploads",
46+
route="/uploads",
5247
params={"limit": 50, "offset": 0},
5348
)
5449
self.assertIsInstance(result, UploadListResponse)
5550
self.assertEqual(len(result.tables), 1)
56-
self.assertEqual(result.tables[0].table_name, "test_table")
51+
self.assertEqual(result.tables[0].full_name, "dune.test_namespace.test_table")
5752
self.assertEqual(result.next_offset, 50)
5853

5954
def test_create_table(self):
@@ -75,7 +70,7 @@ def test_create_table(self):
7570
)
7671

7772
self.api._post.assert_called_once_with(
78-
route="/v1/uploads",
73+
route="/uploads",
7974
params={
8075
"namespace": "test_namespace",
8176
"table_name": "test_table",
@@ -103,7 +98,7 @@ def test_upload_csv(self):
10398
)
10499

105100
self.api._post.assert_called_once_with(
106-
route="/v1/uploads/csv",
101+
route="/uploads/csv",
107102
params={
108103
"table_name": "test_table",
109104
"data": csv_data,
@@ -118,7 +113,7 @@ def test_insert_data(self):
118113
mock_response = {
119114
"rows_written": 100,
120115
"bytes_written": 2048,
121-
"table_name": "test_table",
116+
"name": "dune.test_namespace.test_table",
122117
}
123118
self.api._post.return_value = mock_response
124119

@@ -131,14 +126,14 @@ def test_insert_data(self):
131126
)
132127

133128
self.api._post.assert_called_once_with(
134-
route="/v1/uploads/test_namespace/test_table/insert",
129+
route="/uploads/test_namespace/test_table/insert",
135130
headers={"Content-Type": "text/csv"},
136131
data=data,
137132
)
138133
self.assertIsInstance(result, InsertDataResponse)
139134
self.assertEqual(result.rows_written, 100)
140135
self.assertEqual(result.bytes_written, 2048)
141-
self.assertEqual(result.table_name, "test_table")
136+
self.assertEqual(result.name, "dune.test_namespace.test_table")
142137

143138
def test_clear_table(self):
144139
mock_response = {
@@ -151,7 +146,7 @@ def test_clear_table(self):
151146
table_name="test_table",
152147
)
153148

154-
self.api._post.assert_called_once_with(route="/v1/uploads/test_namespace/test_table/clear")
149+
self.api._post.assert_called_once_with(route="/uploads/test_namespace/test_table/clear")
155150
self.assertIsInstance(result, ClearTableResponse)
156151
self.assertEqual(result.message, "Table cleared successfully")
157152

@@ -166,7 +161,7 @@ def test_delete_table(self):
166161
table_name="test_table",
167162
)
168163

169-
self.api._delete.assert_called_once_with(route="/v1/uploads/test_namespace/test_table")
164+
self.api._delete.assert_called_once_with(route="/uploads/test_namespace/test_table")
170165
self.assertIsInstance(result, DeleteTableResponse)
171166
self.assertEqual(result.message, "Table deleted successfully")
172167

0 commit comments

Comments
 (0)