|
105 | 105 | Capability.V1_LIST_VIEWS, |
106 | 106 | Capability.V1_LOAD_VIEW, |
107 | 107 | Capability.V1_VIEW_EXISTS, |
| 108 | + Capability.V1_REGISTER_VIEW, |
108 | 109 | Capability.V1_DELETE_VIEW, |
109 | 110 | Capability.V1_SUBMIT_TABLE_SCAN_PLAN, |
110 | 111 | Capability.V1_TABLE_SCAN_PLAN_TASKS, |
@@ -2182,6 +2183,72 @@ def test_table_identifier_in_commit_table_request( |
2182 | 2183 | ) |
2183 | 2184 |
|
2184 | 2185 |
|
| 2186 | +def test_register_view_200(rest_mock: Mocker, example_view_metadata_rest_json: dict[str, Any]) -> None: |
| 2187 | + rest_mock.head( |
| 2188 | + f"{TEST_URI}v1/namespaces/default/tables/registered_view", |
| 2189 | + status_code=404, |
| 2190 | + request_headers=TEST_HEADERS, |
| 2191 | + ) |
| 2192 | + rest_mock.post( |
| 2193 | + f"{TEST_URI}v1/namespaces/default/register-view", |
| 2194 | + json=example_view_metadata_rest_json, |
| 2195 | + status_code=200, |
| 2196 | + request_headers=TEST_HEADERS, |
| 2197 | + ) |
| 2198 | + |
| 2199 | + catalog = RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN) |
| 2200 | + actual = catalog.register_view( |
| 2201 | + identifier=("default", "registered_view"), metadata_location="s3://warehouse/database/view/metadata.json" |
| 2202 | + ) |
| 2203 | + expected = View( |
| 2204 | + identifier=("default", "registered_view"), |
| 2205 | + metadata=ViewMetadata(**example_view_metadata_rest_json["metadata"]), |
| 2206 | + ) |
| 2207 | + assert actual == expected |
| 2208 | + |
| 2209 | + |
| 2210 | +def test_register_view_409_view(rest_mock: Mocker) -> None: |
| 2211 | + rest_mock.head( |
| 2212 | + f"{TEST_URI}v1/namespaces/default/tables/registered_view", |
| 2213 | + status_code=404, |
| 2214 | + request_headers=TEST_HEADERS, |
| 2215 | + ) |
| 2216 | + rest_mock.post( |
| 2217 | + f"{TEST_URI}v1/namespaces/default/register-view", |
| 2218 | + json={ |
| 2219 | + "error": { |
| 2220 | + "message": "View already exists: default.view in warehouse 8bcb0838-50fc-472d-9ddb-8feb89ef5f1e", |
| 2221 | + "type": "AlreadyExistsException", |
| 2222 | + "code": 409, |
| 2223 | + } |
| 2224 | + }, |
| 2225 | + status_code=409, |
| 2226 | + request_headers=TEST_HEADERS, |
| 2227 | + ) |
| 2228 | + |
| 2229 | + catalog = RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN) |
| 2230 | + with pytest.raises(ViewAlreadyExistsError) as e: |
| 2231 | + catalog.register_view( |
| 2232 | + identifier=("default", "registered_view"), metadata_location="s3://warehouse/database/view/metadata.json" |
| 2233 | + ) |
| 2234 | + assert "View already exists" in str(e.value) |
| 2235 | + |
| 2236 | + |
| 2237 | +def test_register_view_409_table(rest_mock: Mocker) -> None: |
| 2238 | + rest_mock.head( |
| 2239 | + f"{TEST_URI}v1/namespaces/default/tables/registered_view", |
| 2240 | + status_code=200, |
| 2241 | + request_headers=TEST_HEADERS, |
| 2242 | + ) |
| 2243 | + |
| 2244 | + catalog = RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN) |
| 2245 | + with pytest.raises(TableAlreadyExistsError) as e: |
| 2246 | + catalog.register_view( |
| 2247 | + identifier=("default", "registered_view"), metadata_location="s3://warehouse/database/view/metadata.json" |
| 2248 | + ) |
| 2249 | + assert "Table default.registered_view already exists" in str(e.value) |
| 2250 | + |
| 2251 | + |
2185 | 2252 | def test_drop_view_invalid_namespace(rest_mock: Mocker) -> None: |
2186 | 2253 | view = "view" |
2187 | 2254 | with pytest.raises(NoSuchIdentifierError) as e: |
|
0 commit comments