python-jenkins/tests/jobs/test_get.py
Andreas Jaeger 748aa2068b Update jobs
The repo uses docs-on-read-the-docs, remove extra
build-openstack-sphinx gate job.

Without this change, two docs jobs would be building in gate, tox-docs
and build-sphinx. One is enough.

Also, use templates instead of individual jobs.

Import other templates from project-config, use the failing docs
template since readthedocs is not setup yet.

Remove publish-to-pypi, this should stay in project-config.

Fix sphinx requirements for python 3.

Fix decoding in failing test.

Change-Id: Ic4f715b45c1284ea49339e96c2aa87b2e81fcbea
2019-05-21 21:35:07 +02:00

136 lines
5.0 KiB
Python

import json
from mock import patch
import jenkins
from tests.helper import build_response_mock
from tests.jobs.base import JenkinsGetJobsTestBase
class JenkinsGetJobsTest(JenkinsGetJobsTestBase):
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_simple(self, jenkins_mock):
jobs = {
u'url': u'http://your_url_here/job/my_job/',
u'color': u'blue',
u'name': u'my_job',
}
job_info_to_return = {u'jobs': jobs}
jenkins_mock.return_value = json.dumps(job_info_to_return)
job_info = self.j.get_jobs(folder_depth_per_request=1)
jobs[u'fullname'] = jobs[u'name']
self.assertEqual(job_info, [jobs])
self.assertEqual(
jenkins_mock.call_args[0][0].url,
self.make_url('api/json?tree=jobs[url,color,name,jobs]'))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_folders_simple(self, jenkins_mock):
jenkins_mock.side_effect = map(json.dumps, self.jobs_in_folder)
jobs_info = self.j.get_jobs()
expected_fullnames = [
u"my_job1", u"my_folder1", u"my_job2", u"job"
]
self.assertEqual(len(expected_fullnames), len(jobs_info))
got_fullnames = [job[u"fullname"] for job in jobs_info]
self.assertEqual(expected_fullnames, got_fullnames)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_folders_additional_level(self, jenkins_mock):
jenkins_mock.side_effect = map(json.dumps, self.jobs_in_folder)
jobs_info = self.j.get_jobs(folder_depth=1)
expected_fullnames = [
u"my_job1", u"my_folder1", u"my_job2", u"job",
u"my_folder1/my_job3", u"my_folder1/my_job4", u"job/my_job"
]
self.assertEqual(len(expected_fullnames), len(jobs_info))
got_fullnames = [job[u"fullname"] for job in jobs_info]
self.assertEqual(expected_fullnames, got_fullnames)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_get_view_jobs(self, jenkins_mock):
view_jobs_to_return = {
u'jobs': [{
u'name': u'community.all',
u'url': u'http://your_url_here',
u'color': u'grey'
}, {
u'name': u'community.first',
u'url': u'http://your_url_here',
u'color': u'red'
}]
}
jenkins_mock.return_value = json.dumps(view_jobs_to_return)
view_jobs = self.j.get_jobs(view_name=u'Test View')
self.assertEqual(view_jobs[0][u'color'], u'grey')
self.assertEqual(view_jobs[1][u'name'], u'community.first')
self.assertEqual(view_jobs[1][u'name'], view_jobs[1][u'fullname'])
self.assertEqual(
jenkins_mock.call_args[0][0].url,
self.make_url(
'view/Test%20View/api/json?tree=jobs[url,color,name]'
))
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_get_view_jobs_return_none(self, jenkins_mock):
jenkins_mock.return_value = None
with self.assertRaises(jenkins.JenkinsException) as context_manager:
self.j.get_jobs(view_name=u'Test View')
self.assertEqual(
jenkins_mock.call_args[0][0].url,
self.make_url(
'view/Test%20View/api/json?tree=jobs[url,color,name]'
))
self.assertEqual(
str(context_manager.exception),
'view[Test View] does not exist')
self._check_requests(jenkins_mock.call_args_list)
@patch.object(jenkins.Jenkins, 'jenkins_open')
def test_get_view_jobs_return_invalid_json(self, jenkins_mock):
jenkins_mock.return_value = 'Invalid JSON'
with self.assertRaises(jenkins.JenkinsException) as context_manager:
self.j.get_jobs(view_name=u'Test View')
self.assertEqual(
jenkins_mock.call_args[0][0].url,
self.make_url(
'view/Test%20View/api/json?tree=jobs[url,color,name]'
))
self.assertEqual(
str(context_manager.exception),
'Could not parse JSON info for view[Test View]')
self._check_requests(jenkins_mock.call_args_list)
@patch('jenkins.requests.Session.send', autospec=True)
def test_get_view_jobs_raise_HTTPError(self, session_send_mock):
session_send_mock.side_effect = iter([
build_response_mock(404, reason="Not Found"), # crumb
build_response_mock(404, reason="Not Found"), # request
])
with self.assertRaises(jenkins.JenkinsException) as context_manager:
self.j.get_jobs(view_name=u'Test View')
self.assertEqual(
session_send_mock.call_args_list[1][0][1].url,
self.make_url(
'view/Test%20View/api/json?tree=jobs%5Burl,color,name%5D'
))
self.assertEqual(
str(context_manager.exception),
'view[Test View] does not exist')