diff --git a/hub/kojihub.py b/hub/kojihub.py index 56f60ea6..8b9103d9 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -3759,8 +3759,12 @@ def get_external_repo(info, strict=False, event=None): :returns: a map containing the id, name, and url of the repository. """ repos = get_external_repos(info, event=event) - if repos: + if len(repos) == 1: return repos[0] + elif len(repos) > 1: + # a very defective situation which should never occur + # (name/id should be exact identification) + raise koji.GenericError('More than one repo in the result.') else: if strict: raise koji.GenericError('No such repo: %s' % info) diff --git a/tests/test_hub/test_get_external_repo.py b/tests/test_hub/test_get_external_repo.py index 024f38f3..1880edfc 100644 --- a/tests/test_hub/test_get_external_repo.py +++ b/tests/test_hub/test_get_external_repo.py @@ -12,9 +12,41 @@ class TestGetExternalRepo(unittest.TestCase): self.get_external_repos = mock.patch('kojihub.get_external_repos').start() self.exports = kojihub.RootExports() - def test_non_exist_repo(self): + def test_non_exist_repo_with_strict(self): repo = 'test-repo' self.get_external_repos.return_value = [] with self.assertRaises(koji.GenericError) as cm: self.exports.getExternalRepo(repo, strict=True) self.assertEqual("No such repo: %s" % repo, str(cm.exception)) + + def test_non_exist_repo_without_strict(self): + repo = 'test-repo' + self.get_external_repos.return_value = [] + rv = self.exports.getExternalRepo(repo, strict=False) + self.assertEqual(None, rv) + + def test_valid(self): + repo = 'test-repo' + repo_info = [ + {'id': 1, + 'name': 'build-external-repo-1', + 'url': 'https://path/to/ext/repo1'}, + ] + self.get_external_repos.return_value = repo_info + rv = self.exports.getExternalRepo(repo, strict=True) + self.assertEqual(repo_info[0], rv) + + def test_more_repos(self): + repo = 'test-repo' + repo_info = [ + {'id': 1, + 'name': 'build-external-repo-1', + 'url': 'https://path/to/ext/repo1'}, + {'id': 2, + 'name': 'build-external-repo-1', + 'url': 'https://path/to/ext/repo2'} + ] + self.get_external_repos.return_value = repo_info + with self.assertRaises(koji.GenericError) as cm: + self.exports.getExternalRepo(repo, strict=False) + self.assertEqual("More than one repo in the result.", str(cm.exception))