def test_get_by_unique_name_multiple_results(collection, session): # This really shouldn't happen # Given session.set_response([DatasetDataFactory(), DatasetDataFactory()]) # When with pytest.raises(RuntimeError): collection.get_by_unique_name("blah")
def test_list_datasets(paginated_collection, paginated_session): # Given datasets_data = DatasetDataFactory.create_batch(50) paginated_session.set_response(datasets_data) # When datasets = list(paginated_collection.list(per_page=20)) # Then assert 3 == paginated_session.num_calls expected_first_call = FakeCall(method='GET', path='projects/{}/datasets'.format( paginated_collection.project_id), params={'per_page': 20}) expected_last_call = FakeCall(method='GET', path='projects/{}/datasets'.format( paginated_collection.project_id), params={ 'page': 3, 'per_page': 20 }) assert expected_first_call == paginated_session.calls[0] assert expected_last_call == paginated_session.last_call assert 50 == len(datasets) expected_uids = [d['id'] for d in datasets_data] dataset_ids = [str(d.uid) for d in datasets] assert dataset_ids == expected_uids
def test_list_datasets_infinite_loop_detect(paginated_collection, paginated_session): # Given batch_size = 100 datasets_data = DatasetDataFactory.create_batch(batch_size) # duplicate the data, this simulates an API that keeps returning the first page datasets_data.extend(datasets_data) paginated_session.set_response(datasets_data) # When datasets = list(paginated_collection.list()) # Then assert 2 == paginated_session.num_calls # duplicate UID detected on the second call expected_first_call = FakeCall(method='GET', path='projects/{}/datasets'.format( paginated_collection.project_id), params={'per_page': batch_size}) expected_last_call = FakeCall(method='GET', path='projects/{}/datasets'.format( paginated_collection.project_id), params={ 'page': 2, 'per_page': batch_size }) assert expected_first_call == paginated_session.calls[0] assert expected_last_call == paginated_session.last_call assert len(datasets) == batch_size expected_uids = [d['id'] for d in datasets_data[0:batch_size]] dataset_ids = [str(d.uid) for d in datasets] assert dataset_ids == expected_uids
def test_register_dataset_with_idempotent_put(collection, session): # Given name = 'Test Dataset' summary = 'testing summary' description = 'testing description' unique_name = 'foo' session.set_response( DatasetDataFactory(name=name, summary=summary, description=description, unique_name=unique_name)) # When session.use_idempotent_dataset_put = True dataset = collection.register( DatasetFactory(name=name, summary=summary, description=description, unique_name=unique_name)) expected_call = FakeCall(method='PUT', path='projects/{}/datasets'.format( collection.project_id), json={ 'name': name, 'summary': summary, 'description': description, 'unique_name': unique_name }) assert session.num_calls == 1 assert expected_call == session.last_call assert name == dataset.name
def test_register_dataset_with_existing_id(collection, session): # Given name = 'Test Dataset' summary = 'testing summary' description = 'testing description' session.set_response( DatasetDataFactory(name=name, summary=summary, description=description)) # When dataset = DatasetFactory(name=name, summary=summary, description=description) ds_uid = UUID('cafebeef-e341-422c-8076-35adc8828545') dataset.uid = ds_uid dataset = collection.register(dataset) expected_call = FakeCall(method='PUT', path='projects/{}/datasets/{}'.format( collection.project_id, ds_uid), json={ 'name': name, 'summary': summary, 'description': description, 'id': str(ds_uid) }) assert session.num_calls == 1 assert expected_call == session.last_call assert name == dataset.name
def test_list_datasets(collection, session): # Given datasets_data = DatasetDataFactory.create_batch(5) session.set_response(datasets_data) # When datasets = list(collection.list()) # Then assert 1 == session.num_calls expected_call = FakeCall(method='GET', path='projects/{}/datasets'.format( collection.project_id)) assert expected_call == session.last_call assert 5 == len(datasets)
def test_get_by_unique_name_with_single_result(collection, session): # Given name = 'Test Dataset' unique_name = "foo" session.set_response( [DatasetDataFactory(name=name, unique_name=unique_name)]) # When result_ds = collection.get_by_unique_name(unique_name) # Then expected_call = FakeCall(method='GET', path='projects/{}/datasets?unique_name={}'.format( collection.project_id, unique_name)) assert session.num_calls == 1 assert expected_call == session.last_call assert result_ds.name == name assert result_ds.unique_name == unique_name
def test_register_dataset(collection, session): # Given name = 'Test Dataset' summary = 'testing summary' description = 'testing description' session.set_response( DatasetDataFactory(name=name, summary=summary, description=description)) # When dataset = collection.register( DatasetFactory(name=name, summary=summary, description=description)) expected_call = FakeCall(method='POST', path='projects/{}/datasets'.format( collection.project_id), json={ 'name': name, 'summary': summary, 'description': description }) assert session.num_calls == 1 assert expected_call == session.last_call assert name == dataset.name