88 lines
3.2 KiB
Python
88 lines
3.2 KiB
Python
|
import pytest
|
||
|
|
||
|
from playhouse.test_utils import assert_query_count
|
||
|
|
||
|
from data.database import Manifest, ManifestLabel
|
||
|
from data.model.oci.label import (create_manifest_label, list_manifest_labels, get_manifest_label,
|
||
|
delete_manifest_label, DataModelException)
|
||
|
|
||
|
from test.fixtures import *
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize('key, value, source_type, expected_error', [
|
||
|
('foo', 'bar', 'manifest', None),
|
||
|
|
||
|
pytest.param('..foo', 'bar', 'manifest', None, id='invalid key on manifest'),
|
||
|
pytest.param('..foo', 'bar', 'api', 'is invalid', id='invalid key on api'),
|
||
|
])
|
||
|
def test_create_manifest_label(key, value, source_type, expected_error, initialized_db):
|
||
|
manifest = Manifest.get()
|
||
|
|
||
|
if expected_error:
|
||
|
with pytest.raises(DataModelException) as ex:
|
||
|
create_manifest_label(manifest, key, value, source_type)
|
||
|
|
||
|
assert ex.match(expected_error)
|
||
|
return
|
||
|
|
||
|
label = create_manifest_label(manifest, key, value, source_type)
|
||
|
labels = [ml.label_id for ml in ManifestLabel.select().where(ManifestLabel.manifest == manifest)]
|
||
|
assert label.id in labels
|
||
|
|
||
|
with assert_query_count(1):
|
||
|
assert label in list_manifest_labels(manifest)
|
||
|
|
||
|
assert label not in list_manifest_labels(manifest, 'someprefix')
|
||
|
assert label in list_manifest_labels(manifest, key[0:2])
|
||
|
|
||
|
with assert_query_count(1):
|
||
|
assert get_manifest_label(label.uuid, manifest) == label
|
||
|
|
||
|
|
||
|
def test_list_manifest_labels(initialized_db):
|
||
|
manifest = Manifest.get()
|
||
|
|
||
|
label1 = create_manifest_label(manifest, 'foo', '1', 'manifest')
|
||
|
label2 = create_manifest_label(manifest, 'bar', '2', 'api')
|
||
|
label3 = create_manifest_label(manifest, 'baz', '3', 'internal')
|
||
|
|
||
|
assert label1 in list_manifest_labels(manifest)
|
||
|
assert label2 in list_manifest_labels(manifest)
|
||
|
assert label3 in list_manifest_labels(manifest)
|
||
|
|
||
|
other_manifest = Manifest.select().where(Manifest.id != manifest.id).get()
|
||
|
assert label1 not in list_manifest_labels(other_manifest)
|
||
|
assert label2 not in list_manifest_labels(other_manifest)
|
||
|
assert label3 not in list_manifest_labels(other_manifest)
|
||
|
|
||
|
|
||
|
def test_get_manifest_label(initialized_db):
|
||
|
found = False
|
||
|
for manifest_label in ManifestLabel.select():
|
||
|
assert (get_manifest_label(manifest_label.label.uuid, manifest_label.manifest) ==
|
||
|
manifest_label.label)
|
||
|
assert manifest_label.label in list_manifest_labels(manifest_label.manifest)
|
||
|
found = True
|
||
|
|
||
|
assert found
|
||
|
|
||
|
|
||
|
def test_delete_manifest_label(initialized_db):
|
||
|
found = False
|
||
|
for manifest_label in list(ManifestLabel.select()):
|
||
|
assert (get_manifest_label(manifest_label.label.uuid, manifest_label.manifest) ==
|
||
|
manifest_label.label)
|
||
|
assert manifest_label.label in list_manifest_labels(manifest_label.manifest)
|
||
|
|
||
|
if manifest_label.label.source_type.mutable:
|
||
|
assert delete_manifest_label(manifest_label.label.uuid, manifest_label.manifest)
|
||
|
assert manifest_label.label not in list_manifest_labels(manifest_label.manifest)
|
||
|
assert get_manifest_label(manifest_label.label.uuid, manifest_label.manifest) is None
|
||
|
else:
|
||
|
with pytest.raises(DataModelException):
|
||
|
delete_manifest_label(manifest_label.label.uuid, manifest_label.manifest)
|
||
|
|
||
|
found = True
|
||
|
|
||
|
assert found
|