def test_manager_bad_update(tests_hierarchy_manager, namespace_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(namespace_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, namespace_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, namespace_location, "bad_update.json")
Beispiel #2
0
def test_manager_hierarchy_create(tests_hierarchy_manager, namespace_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(namespace_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(namespace_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(namespace_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(namespace_location))
Beispiel #3
0
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)
Beispiel #4
0
def test_manager_add_empty_display_name(tests_manager, metadata_tests_dir):
    # Found that empty display_name values were passing validation, so minLength=1 was added
    metadata = Metadata(**valid_metadata_json)
    metadata.display_name = ''
    with pytest.raises(ValidationError):
        tests_manager.add('empty_display_name', metadata)

    # Ensure file was not created
    metadata_file = os.path.join(metadata_tests_dir,
                                 '{}.json'.format('empty_display_name'))
    assert not os.path.exists(metadata_file)
Beispiel #5
0
def test_manager_hierarchy_remove(tests_hierarchy_manager, factory_location,
                                  shared_location, namespace_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(namespace_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(namespace_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,
                            namespace_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))
Beispiel #6
0
def test_manager_update(tests_hierarchy_manager, metadata_tests_dir):

    # 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.add('update', metadata)
    assert instance is not None
    assert instance.resource.startswith(str(metadata_tests_dir))

    # Now update the user instance - add a field - and ensure that the original renamed file is not present.

    instance2 = tests_hierarchy_manager.get('update')
    instance2.display_name = 'user2'
    instance2.metadata['number_range_test'] = 7
    tests_hierarchy_manager.add('update', instance2, replace=True)

    _ensure_single_file(metadata_tests_dir, "update.json")

    instance2 = tests_hierarchy_manager.get('update')
    assert instance2.display_name == 'user2'
    assert instance2.metadata['number_range_test'] == 7