Make get_job_info fetch_all_builds work with jobs in folders
Make sure to use fullName from the API results to correctly compute the URL for the additional API request. Change-Id: I7ca1f2e15a6c40883ba376b182c2c991ca76e8b2 Closes-Bug:#1828051
This commit is contained in:
parent
a5615d04f8
commit
190fbbb5ad
@ -432,7 +432,7 @@ class Jenkins(object):
|
|||||||
all_builds_loaded = (oldest_loaded_build_number == first_build_number)
|
all_builds_loaded = (oldest_loaded_build_number == first_build_number)
|
||||||
if all_builds_loaded:
|
if all_builds_loaded:
|
||||||
return data
|
return data
|
||||||
folder_url, short_name = self._get_job_folder(data["name"])
|
folder_url, short_name = self._get_job_folder(data["fullName"])
|
||||||
response = self.jenkins_open(requests.Request(
|
response = self.jenkins_open(requests.Request(
|
||||||
'GET', self._build_url(ALL_BUILDS, locals())
|
'GET', self._build_url(ALL_BUILDS, locals())
|
||||||
))
|
))
|
||||||
@ -440,7 +440,7 @@ class Jenkins(object):
|
|||||||
data["builds"] = json.loads(response)["allBuilds"]
|
data["builds"] = json.loads(response)["allBuilds"]
|
||||||
else:
|
else:
|
||||||
raise JenkinsException('Could not fetch all builds from job[%s]' %
|
raise JenkinsException('Could not fetch all builds from job[%s]' %
|
||||||
data["name"])
|
data["fullName"])
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def get_job_info(self, name, depth=0, fetch_all_builds=False):
|
def get_job_info(self, name, depth=0, fetch_all_builds=False):
|
||||||
|
@ -35,7 +35,8 @@ class JenkinsGetJobInfoTest(JenkinsJobsTestBase):
|
|||||||
u'user': u'unknown',
|
u'user': u'unknown',
|
||||||
u'firstBuild': {u'number': 4},
|
u'firstBuild': {u'number': 4},
|
||||||
u'builds': [{u'number': 5}],
|
u'builds': [{u'number': 5}],
|
||||||
u'name': u'Test Job'
|
u'name': u'Test Job',
|
||||||
|
u'fullName': u'Test Job'
|
||||||
}
|
}
|
||||||
all_builds_to_return = {u'allBuilds': [{u'number': 4},
|
all_builds_to_return = {u'allBuilds': [{u'number': 4},
|
||||||
{u'number': 5}]}
|
{u'number': 5}]}
|
||||||
@ -75,6 +76,38 @@ class JenkinsGetJobInfoTest(JenkinsJobsTestBase):
|
|||||||
self.make_url('job/a%20Folder/job/Test%20Job/api/json?depth=0'))
|
self.make_url('job/a%20Folder/job/Test%20Job/api/json?depth=0'))
|
||||||
self._check_requests(jenkins_mock.call_args_list)
|
self._check_requests(jenkins_mock.call_args_list)
|
||||||
|
|
||||||
|
@patch.object(jenkins.Jenkins, 'jenkins_open')
|
||||||
|
def test_all_builds_in_folder(self, jenkins_mock):
|
||||||
|
job_info_to_return = {
|
||||||
|
u'building': False,
|
||||||
|
u'msg': u'test',
|
||||||
|
u'revision': 66,
|
||||||
|
u'user': u'unknown',
|
||||||
|
u'firstBuild': {u'number': 4},
|
||||||
|
u'builds': [{u'number': 5}],
|
||||||
|
u'name': u'Test Job',
|
||||||
|
u'fullName': u'a Folder/Test Job'
|
||||||
|
}
|
||||||
|
all_builds_to_return = {u'allBuilds': [{u'number': 4},
|
||||||
|
{u'number': 5}]}
|
||||||
|
jenkins_mock.side_effect = [json.dumps(job_info_to_return),
|
||||||
|
json.dumps(all_builds_to_return)]
|
||||||
|
|
||||||
|
job_info = self.j.get_job_info(u'a Folder/Test Job', fetch_all_builds=True)
|
||||||
|
|
||||||
|
expected = dict(job_info_to_return)
|
||||||
|
expected["builds"] = [{u'number': 4}, {u'number': 5}]
|
||||||
|
|
||||||
|
self.assertEqual(job_info, expected)
|
||||||
|
self.assertEqual(
|
||||||
|
jenkins_mock.call_args_list[0][0][0].url,
|
||||||
|
self.make_url('job/a%20Folder/job/Test%20Job/api/json?depth=0'))
|
||||||
|
self.assertEqual(
|
||||||
|
jenkins_mock.call_args_list[1][0][0].url,
|
||||||
|
self.make_url(
|
||||||
|
'job/a%20Folder/job/Test%20Job/api/json?tree=allBuilds[number,url]'))
|
||||||
|
self._check_requests(jenkins_mock.call_args_list)
|
||||||
|
|
||||||
@patch.object(jenkins.Jenkins, 'jenkins_open')
|
@patch.object(jenkins.Jenkins, 'jenkins_open')
|
||||||
def test_regex(self, jenkins_mock):
|
def test_regex(self, jenkins_mock):
|
||||||
jobs = [
|
jobs = [
|
||||||
|
Loading…
Reference in New Issue
Block a user