def test_read_resource_valid(self): resource_id = "79843e49-7974-411c-8eb5-fb2d1111d707" base_url = "https://demo.ckan.org" _mock_json_call( f"{base_url}/api/3/action/datastore_search?limit=0&resource_id={resource_id}", "data/ckan_mock_responses/datastore_search_describe.json", ) # First response gets the data rows _mock_json_call( f"{base_url}/api/3/action/datastore_search?resource_id={resource_id}", "data/ckan_mock_responses/datastore_search_rows.json", ) # Second response is empty, indicating the results are exhausted _mock_json_call( f"{base_url}/api/3/action/datastore_search?resource_id={resource_id}&offset=100", "data/ckan_mock_responses/datastore_search_rows_empty.json", ) resource = Resource.from_ckan( base_url=base_url, resource_id=resource_id, api_key="env:CKAN_API_KEY", ) resource.onerror = "raise" # be strict about errors under test self._assert_resource_valid(resource)
def test_read_resource_bad_resource_id(): resource_id = "bad-resource-id" base_url = "https://demo.ckan.org" _mock_json_call( f"{base_url}/api/3/action/datastore_search?limit=0&resource_id={resource_id}", "data/ckan_mock_responses/ckan_error.json", status=404, ) with pytest.raises(exceptions.FrictionlessException) as excinfo: Resource.from_ckan( base_url=base_url, resource_id=resource_id, api_key="env:CKAN_API_KEY", ) error = excinfo.value.error assert error.code == "storage-error" assert error.note.count("Not found")