|
38 | 38 | OAuthError, |
39 | 39 | ServerError, |
40 | 40 | TableAlreadyExistsError, |
| 41 | + ViewAlreadyExistsError, |
41 | 42 | ) |
42 | 43 | from pyiceberg.io import load_file_io |
43 | 44 | from pyiceberg.partitioning import PartitionField, PartitionSpec |
@@ -1918,3 +1919,65 @@ def test_rest_catalog_context_manager_with_exception_sigv4(self, rest_mock: Mock |
1918 | 1919 |
|
1919 | 1920 | assert catalog is not None and hasattr(catalog, "_session") |
1920 | 1921 | assert len(catalog._session.adapters) == self.EXPECTED_ADAPTERS_SIGV4 |
| 1922 | + |
| 1923 | + |
| 1924 | +def test_rename_view_204(rest_mock: Mocker) -> None: |
| 1925 | + from_identifier = ("some_namespace", "old_view") |
| 1926 | + to_identifier = ("some_namespace", "new_view") |
| 1927 | + rest_mock.post( |
| 1928 | + f"{TEST_URI}v1/views/rename", |
| 1929 | + json={ |
| 1930 | + "source": {"namespace": ["some_namespace"], "name": "old_view"}, |
| 1931 | + "destination": {"namespace": ["some_namespace"], "name": "new_view"}, |
| 1932 | + }, |
| 1933 | + status_code=204, |
| 1934 | + request_headers=TEST_HEADERS, |
| 1935 | + ) |
| 1936 | + catalog = RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN) |
| 1937 | + catalog.rename_view(from_identifier, to_identifier) |
| 1938 | + assert ( |
| 1939 | + rest_mock.last_request.text |
| 1940 | + == """{"source": {"namespace": ["some_namespace"], "name": "old_view"}, "destination": {"namespace": ["some_namespace"], "name": "new_view"}}""" |
| 1941 | + ) |
| 1942 | + |
| 1943 | + |
| 1944 | +def test_rename_view_404(rest_mock: Mocker) -> None: |
| 1945 | + from_identifier = ("some_namespace", "non_existent_view") |
| 1946 | + to_identifier = ("some_namespace", "new_view") |
| 1947 | + rest_mock.post( |
| 1948 | + f"{TEST_URI}v1/views/rename", |
| 1949 | + json={ |
| 1950 | + "error": { |
| 1951 | + "message": "View does not exist: some_namespace.non_existent_view", |
| 1952 | + "type": "NoSuchViewException", |
| 1953 | + "code": 404, |
| 1954 | + } |
| 1955 | + }, |
| 1956 | + status_code=404, |
| 1957 | + request_headers=TEST_HEADERS, |
| 1958 | + ) |
| 1959 | + catalog = RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN) |
| 1960 | + with pytest.raises(NoSuchViewError) as exc_info: |
| 1961 | + catalog.rename_view(from_identifier, to_identifier) |
| 1962 | + assert "View does not exist: some_namespace.non_existent_view" in str(exc_info.value) |
| 1963 | + |
| 1964 | + |
| 1965 | +def test_rename_view_409(rest_mock: Mocker) -> None: |
| 1966 | + from_identifier = ("some_namespace", "old_view") |
| 1967 | + to_identifier = ("some_namespace", "existing_view") |
| 1968 | + rest_mock.post( |
| 1969 | + f"{TEST_URI}v1/views/rename", |
| 1970 | + json={ |
| 1971 | + "error": { |
| 1972 | + "message": "View already exists: some_namespace.existing_view", |
| 1973 | + "type": "ViewAlreadyExistsException", |
| 1974 | + "code": 409, |
| 1975 | + } |
| 1976 | + }, |
| 1977 | + status_code=409, |
| 1978 | + request_headers=TEST_HEADERS, |
| 1979 | + ) |
| 1980 | + catalog = RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN) |
| 1981 | + with pytest.raises(ViewAlreadyExistsError) as exc_info: |
| 1982 | + catalog.rename_view(from_identifier, to_identifier) |
| 1983 | + assert "View already exists: some_namespace.existing_view" in str(exc_info.value) |
0 commit comments