Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 17 additions & 7 deletions src/ansible_builder/ee_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,24 @@

TYPE_DictOrStringOrListOfStrings = {
"anyOf": [
{"type": "object"},
{"type": "string"},
{
"type": "array",
"items": {
"type": "string"
}
}
"type": "object",
"additionalProperties": False,
"properties": {
"roles": {
"type": "array",
"items": {"type": "string"},
},
"collections": {
"type": "array",
"items": {"type": "string"},
},
},
},
{
"type": "string",
"additionalProperties": False,
},
]
}

Expand Down
42 changes: 42 additions & 0 deletions test/unit/test_user_definition.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import os
import pytest

from jsonschema import validate
from jsonschema.exceptions import ValidationError

from ansible_builder.ee_schema import TYPE_DictOrStringOrListOfStrings
from ansible_builder.exceptions import DefinitionError
from ansible_builder.main import AnsibleBuilder
from ansible_builder.user_definition import UserDefinition, ImageDescription
Expand Down Expand Up @@ -299,3 +303,41 @@ def test_missing_orig_name_tag(self, key, image):
with pytest.raises(DefinitionError) as error:
ImageDescription(ee_section, key)
assert f"Container image requires a tag: {image}" in str(error.value.args[0])


class TestGalaxyDefinition:

instances = [
("", True),
("requirements.yml", True),
("| requirements.yml", True),
([], False),
({"invalid_key": []}, False),
({"roles": [], "collections2": []}, False),
({"roles2": [], "collections": []}, False),
({"roles": "", "collections": []}, False),
({"roles": [], "collections": ""}, False),
({"roles": [1], "collections": []}, False),
({"roles": [], "collections": [1]}, False),
({}, True),
({"roles": []}, True),
({"collections": []}, True),
({"roles": [], "collections": []}, True),
({"roles": ["openshift"], "collections": []}, True),
({"roles": ["openshift"], "collections": ["community.okd"]}, True),
({"roles": [], "collections": ["community.okd"]}, True),
({"collections": ["community.okd"]}, True),
({"roles": ["openshift"]}, True),
]

@pytest.mark.parametrize("test_input,expected", instances)
def test_galaxy_requirements(self, test_input, expected):
"""
Test Galaxy definition
"""
try:
validate(instance=test_input, schema=TYPE_DictOrStringOrListOfStrings)
test_passed = True
except ValidationError:
test_passed = False
assert test_passed == expected