def test_manager_hierarchy_create(tests_hierarchy_manager, schemaspace_location): # Note, this is really more of an update test (replace = True), since you cannot "create" an # instance if it already exists - which, in this case, it exists in the factory area metadata = Metadata(**byo_metadata_json) metadata.display_name = "user" with pytest.raises(MetadataExistsError): tests_hierarchy_manager.create("byo_2", metadata) instance = tests_hierarchy_manager.update("byo_2", metadata) assert instance is not None assert instance.resource.startswith(str(schemaspace_location)) metadata_list = tests_hierarchy_manager.get_all() assert len(metadata_list) == 3 # Ensure the proper instances exist for metadata in metadata_list: if metadata.name == "byo_1": assert metadata.display_name == "factory" if metadata.name == "byo_2": assert metadata.display_name == "user" if metadata.name == "byo_3": assert metadata.display_name == "factory" byo_2 = tests_hierarchy_manager.get("byo_2") assert byo_2.resource.startswith(str(schemaspace_location)) metadata = Metadata(**byo_metadata_json) metadata.display_name = "user" instance = tests_hierarchy_manager.update("byo_3", metadata) assert instance is not None assert instance.resource.startswith(str(schemaspace_location)) metadata_list = tests_hierarchy_manager.get_all() assert len(metadata_list) == 3 # Ensure the proper instances exist for metadata in metadata_list: if metadata.name == "byo_1": assert metadata.display_name == "factory" if metadata.name == "byo_2": assert metadata.display_name == "user" if metadata.name == "byo_3": assert metadata.display_name == "user" byo_2 = tests_hierarchy_manager.get("byo_2") assert byo_2.resource.startswith(str(schemaspace_location))
def test_manager_bad_update(tests_hierarchy_manager, schemaspace_location): # Create some metadata, then attempt to update it with a known schema violation # and ensure the previous copy still exists... # Create a user instance... metadata = Metadata(**byo_metadata_json) metadata.display_name = "user1" instance = tests_hierarchy_manager.create("bad_update", metadata) assert instance is not None assert instance.resource.startswith(str(schemaspace_location)) # Now, attempt to update the user instance, but include a schema violation. # Verify the update failed, but also ensure the previous instance is still there. instance2 = tests_hierarchy_manager.get("bad_update") instance2.display_name = "user2" instance2.metadata["number_range_test"] = 42 # number is out of range with pytest.raises(ValidationError): tests_hierarchy_manager.update("bad_update", instance2) _ensure_single_instance(tests_hierarchy_manager, schemaspace_location, "bad_update.json") instance2 = tests_hierarchy_manager.get("bad_update") assert instance2.display_name == instance.display_name assert "number_range_test" not in instance2.metadata # Now try update without providing a name, ValueError expected instance2 = tests_hierarchy_manager.get("bad_update") instance2.display_name = "user update with no name" with pytest.raises(ValueError): tests_hierarchy_manager.update(None, instance2) _ensure_single_instance(tests_hierarchy_manager, schemaspace_location, "bad_update.json")
def test_manager_add_empty_display_name(tests_manager): # Found that empty display_name values were passing validation, so minLength=1 was added metadata_name = "empty_display_name" metadata = Metadata(**valid_metadata_json) metadata.display_name = "" with pytest.raises(ValidationError): tests_manager.create(metadata_name, metadata) # Ensure file was not created using storage manager with pytest.raises(MetadataNotFoundError): tests_manager.metadata_store.fetch_instances(metadata_name)
def test_manager_hierarchy_remove(tests_hierarchy_manager, factory_location, shared_location, schemaspace_location): # Create additional instances in shared and user areas byo_2 = byo_metadata_json byo_2["display_name"] = "shared" create_json_file(shared_location, "byo_2.json", byo_2) metadata = Metadata(**byo_metadata_json) metadata.display_name = "user" instance = tests_hierarchy_manager.update("byo_2", metadata) assert instance is not None assert instance.resource.startswith(str(schemaspace_location)) # Confirm on in user is found... metadata_list = tests_hierarchy_manager.get_all() assert len(metadata_list) == 3 # Ensure the proper instances exist for metadata in metadata_list: if metadata.name == "byo_1": assert metadata.display_name == "factory" if metadata.name == "byo_2": assert metadata.display_name == "user" if metadata.name == "byo_3": assert metadata.display_name == "factory" byo_2 = tests_hierarchy_manager.get("byo_2") assert byo_2.resource.startswith(str(schemaspace_location)) # Now remove instance. Should be allowed since it resides in user area tests_hierarchy_manager.remove("byo_2") _ensure_single_instance(tests_hierarchy_manager, schemaspace_location, "byo_2.json", expected_count=0) # Attempt to remove instance from shared area and its protected with pytest.raises(PermissionError) as pe: tests_hierarchy_manager.remove("byo_2") assert "Removal of instance 'byo_2'" in str(pe.value) # Ensure the one that exists is the one in the shared area byo_2 = tests_hierarchy_manager.get("byo_2") assert byo_2.resource.startswith(str(shared_location)) # Attempt to remove instance from factory area and its protected as well with pytest.raises(PermissionError) as pe: tests_hierarchy_manager.remove("byo_1") assert "Removal of instance 'byo_1'" in str(pe.value) byo_1 = tests_hierarchy_manager.get("byo_1") assert byo_1.resource.startswith(str(factory_location))