diff --git a/jenkins_epo/jenkins.py b/jenkins_epo/jenkins.py index b43e3c17..4647bb9d 100644 --- a/jenkins_epo/jenkins.py +++ b/jenkins_epo/jenkins.py @@ -180,6 +180,9 @@ def from_url(cls, url): if not url.startswith(SETTINGS.JENKINS_URL): raise NotOnJenkins("%s is not on this Jenkins." % url) + if url.endswith("/display/redirect"): + url = url.replace("/display/redirect", "") + payload = yield from rest.Client(url).api.python.aget( tree=cls.jenkins_tree, ) diff --git a/tests/test_jenkins.py b/tests/test_jenkins.py index e6ac14d8..cce3d7ac 100644 --- a/tests/test_jenkins.py +++ b/tests/test_jenkins.py @@ -481,3 +481,23 @@ def test_job_updated_at(JobSpec): job = Job(Mock(_data=dict(description="""no yaml"""))) assert not job.updated_at + + +@pytest.mark.asyncio +@asyncio.coroutine +def test_from_url_removes_suffix(mocker, SETTINGS): + from jenkins_epo.jenkins import Build + Client = mocker.patch('jenkins_epo.jenkins.rest.Client') + Client().api.python.aget = aget = CoroutineMock( + return_value={} + ) + SETTINGS.JENKINS_URL = "http://jenkins.local" + url = SETTINGS.JENKINS_URL + "/job/rh2-build-doc/4910/display/redirect" + correct_url = SETTINGS.JENKINS_URL + "/job/rh2-build-doc/4910" + + build = yield from Build.from_url(url) + + assert isinstance(build, Build) + assert build.job is None + assert build.payload == {} + assert Client.mock_calls[1] == mocker.call(correct_url)