def test_update_with_partial_changes_with_required_fields_should_delete_the_missing_ones( cosmos_db_repository: CosmosDBRepository, event_context: EventContext, sample_item: dict, ): changes = { 'id': fake.uuid4(), 'email': fake.safe_email(), 'tenant_id': event_context.tenant_id, } updated_item = cosmos_db_repository.update( sample_item['id'], changes, event_context ) assert updated_item is not None assert updated_item['id'] == changes["id"] != sample_item["id"] assert updated_item['email'] == changes["email"] != sample_item["email"] assert updated_item['tenant_id'] == changes["tenant_id"] assert updated_item.get('name') is None assert updated_item.get('age') is None try: cosmos_db_repository.find(sample_item['id'], event_context) fail('The previous version should not exist') except Exception as e: assert type(e) is CosmosResourceNotFoundError assert e.status_code == 404
def test_find_by_invalid_partition_key_value_should_fail( cosmos_db_repository: CosmosDBRepository, event_context: EventContext ): try: cosmos_db_repository.find(fake.uuid4(), event_context) fail('It should have failed') except Exception as e: assert type(e) is CosmosResourceNotFoundError assert e.status_code == 404
def test_find_by_valid_id_should_succeed( cosmos_db_repository: CosmosDBRepository, sample_item: dict, event_context: EventContext, ): found_item = cosmos_db_repository.find(sample_item["id"], event_context) assert all(item in found_item.items() for item in sample_item.items())
def test_delete_permanently_with_valid_id_should_succeed( cosmos_db_repository: CosmosDBRepository, event_context: EventContext, sample_item: dict, ): found_item = cosmos_db_repository.find(sample_item['id'], event_context) assert found_item is not None assert found_item['id'] == sample_item['id'] cosmos_db_repository.delete_permanently(sample_item['id'], event_context) try: cosmos_db_repository.find(sample_item['id'], event_context) fail('It should have not found the deleted item') except Exception as e: assert type(e) is CosmosResourceNotFoundError assert e.status_code == 404
def test_find_can_find_deleted_item_only_if_visibile_only_is_true( cosmos_db_repository: CosmosDBRepository, event_context: EventContext, sample_item: dict, ): deleted_item = cosmos_db_repository.delete( sample_item['id'], event_context ) assert deleted_item is not None assert deleted_item['deleted'] is not None try: cosmos_db_repository.find(sample_item['id'], event_context) except Exception as e: assert type(e) is CosmosResourceNotFoundError assert e.status_code == 404 found_deleted_item = cosmos_db_repository.find( sample_item['id'], event_context, visible_only=False ) assert found_deleted_item is not None
def test_delete_with_mapper( cosmos_db_repository: CosmosDBRepository, sample_item: dict, event_context: EventContext, mapper: Callable, expected_type: Callable, ): deleted_item = cosmos_db_repository.delete( sample_item['id'], event_context, mapper=mapper ) assert deleted_item is not None assert type(deleted_item) is expected_type try: cosmos_db_repository.find( sample_item['id'], event_context, mapper=mapper ) fail('It should have not found the deleted item') except Exception as e: assert type(e) is CosmosResourceNotFoundError assert e.status_code == 404
def test_find_by_valid_id_and_mapper_should_succeed( cosmos_db_repository: CosmosDBRepository, sample_item: dict, event_context: EventContext, ): found_item: Person = cosmos_db_repository.find( sample_item["id"], event_context, mapper=Person ) found_item_dict = found_item.__dict__ assert all( attrib in sample_item.items() for attrib in found_item_dict.items() ) assert ( type(found_item) is Person ), "The result should be wrapped with a class" assert found_item.is_adult() is (sample_item["age"] >= 18)