mirror of
https://github.com/quay/quay.git
synced 2025-04-18 10:44:06 +03:00
136 lines
3.4 KiB
Python
136 lines
3.4 KiB
Python
import json
|
|
import pytest
|
|
|
|
from buildtrigger.test.githubmock import get_github_trigger
|
|
from buildtrigger.triggerutil import (
|
|
SkipRequestException,
|
|
ValidationRequestException,
|
|
InvalidPayloadException,
|
|
)
|
|
from endpoints.building import PreparedBuild
|
|
from util.morecollections import AttrDict
|
|
|
|
|
|
@pytest.fixture
|
|
def github_trigger():
|
|
return get_github_trigger()
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"payload, expected_error, expected_message",
|
|
[
|
|
('{"zen": true}', SkipRequestException, ""),
|
|
("{}", InvalidPayloadException, "Missing 'repository' on request"),
|
|
('{"repository": "foo"}', InvalidPayloadException, "Missing 'owner' on repository"),
|
|
# Valid payload:
|
|
(
|
|
"""{
|
|
"repository": {
|
|
"owner": {
|
|
"name": "someguy"
|
|
},
|
|
"name": "somerepo",
|
|
"ssh_url": "someurl"
|
|
},
|
|
"ref": "refs/tags/foo",
|
|
"head_commit": {
|
|
"id": "11d6fbc",
|
|
"url": "http://some/url",
|
|
"message": "some message",
|
|
"timestamp": "NOW"
|
|
}
|
|
}""",
|
|
None,
|
|
None,
|
|
),
|
|
# Skip message:
|
|
(
|
|
"""{
|
|
"repository": {
|
|
"owner": {
|
|
"name": "someguy"
|
|
},
|
|
"name": "somerepo",
|
|
"ssh_url": "someurl"
|
|
},
|
|
"ref": "refs/tags/foo",
|
|
"head_commit": {
|
|
"id": "11d6fbc",
|
|
"url": "http://some/url",
|
|
"message": "[skip build]",
|
|
"timestamp": "NOW"
|
|
}
|
|
}""",
|
|
SkipRequestException,
|
|
"",
|
|
),
|
|
],
|
|
)
|
|
def test_handle_trigger_request(github_trigger, payload, expected_error, expected_message):
|
|
def get_payload():
|
|
return json.loads(payload)
|
|
|
|
request = AttrDict(dict(get_json=get_payload))
|
|
|
|
if expected_error is not None:
|
|
with pytest.raises(expected_error) as ipe:
|
|
github_trigger.handle_trigger_request(request)
|
|
assert str(ipe.value) == expected_message
|
|
else:
|
|
assert isinstance(github_trigger.handle_trigger_request(request), PreparedBuild)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"dockerfile_path, contents",
|
|
[
|
|
("/Dockerfile", "hello world"),
|
|
("somesubdir/Dockerfile", "hi universe"),
|
|
("unknownpath", None),
|
|
],
|
|
)
|
|
def test_load_dockerfile_contents(dockerfile_path, contents):
|
|
trigger = get_github_trigger(dockerfile_path)
|
|
assert trigger.load_dockerfile_contents() == contents
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"username, expected_response",
|
|
[
|
|
("unknownuser", None),
|
|
("knownuser", {"html_url": "https://bitbucket.org/knownuser", "avatar_url": "avatarurl"}),
|
|
],
|
|
)
|
|
def test_lookup_user(username, expected_response, github_trigger):
|
|
assert github_trigger.lookup_user(username) == expected_response
|
|
|
|
|
|
def test_list_build_subdirs(github_trigger):
|
|
assert github_trigger.list_build_subdirs() == ["Dockerfile", "somesubdir/Dockerfile"]
|
|
|
|
|
|
def test_list_build_source_namespaces(github_trigger):
|
|
namespaces_expected = [
|
|
{
|
|
"personal": True,
|
|
"score": 1,
|
|
"avatar_url": "avatarurl",
|
|
"id": "knownuser",
|
|
"title": "knownuser",
|
|
"url": "https://bitbucket.org/knownuser",
|
|
},
|
|
{
|
|
"score": 0,
|
|
"title": "someorg",
|
|
"personal": False,
|
|
"url": "",
|
|
"avatar_url": "avatarurl",
|
|
"id": "someorg",
|
|
},
|
|
]
|
|
|
|
found = github_trigger.list_build_source_namespaces()
|
|
found.sort()
|
|
|
|
namespaces_expected.sort()
|
|
assert found == namespaces_expected
|