def test___set_jobs___Four_jobs___List_with_correct_names_and_statuses_passed_to_view( self): jobs = [ JobModel(Job('eric', pyjenkins.job.JobStatus.DISABLED), False), JobModel(Job('john', pyjenkins.job.JobStatus.FAILING), False), JobModel(Job('terry', pyjenkins.job.JobStatus.OK), False), JobModel(Job('graham', pyjenkins.job.JobStatus.UNKNOWN), False) ] self.qtgui.QListWidgetItem('disabled icon', 'eric').AndReturn('item for eric') self.qtgui.QListWidgetItem('failing icon', 'john').AndReturn('item for john') self.qtgui.QListWidgetItem('ok icon', 'terry').AndReturn('item for terry') self.qtgui.QListWidgetItem('unknown icon', 'graham').AndReturn('item for graham') self.view.right_click_event().InAnyOrder().AndReturn(Event()) self.view.set_list([ 'item for eric', 'item for john', 'item for terry', 'item for graham' ]) self.mocks.ReplayAll() adapter = gui.jobs.ListViewAdapter(self.view, self.media, self.menu_factory, self.qtgui) adapter.set_jobs(jobs) mox.Verify(self.view)
def test_constructor___View_fires_right_click_event___Show_menu_at_correct_coordinates( self): right_click_event = Event() menu = self.mocks.CreateMock(MockQMenu) menu.popup('screen coordinates') job_models = [ JobModel(Job('eric', pyjenkins.job.JobStatus.DISABLED), False), JobModel(Job('john', pyjenkins.job.JobStatus.FAILING), False), JobModel(Job('terry', pyjenkins.job.JobStatus.OK), False) ] self._stub_out_set_jobs() self.menu_factory.create(job_models[1], mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(menu) self.view.right_click_event().InAnyOrder().AndReturn(right_click_event) self.mocks.ReplayAll() adapter = gui.jobs.ListViewAdapter(self.view, self.media, self.menu_factory, self.qtgui) # @UnusedVariable adapter.set_jobs(job_models) right_click_event.fire('john', 'screen coordinates') mox.Verify(menu)
def __init__(self): self._jobs_rota = [ [Job('spam', JobStatus.OK), Job('eggs', JobStatus.OK)], [Job('spam', JobStatus.FAILING), Job('eggs', JobStatus.DISABLED)], ] self._next_jobs = 0
def test_message_OneFailingJob_ReturnCorrectMessage(self): jobs = [Job('eric', JobStatus.OK), Job('terry', JobStatus.FAILING)] composer = DefaultMessageComposer() result = composer.message(jobs) self.assertEqual('FAILING:\nterry', result)
def test_equalityop_JobsDiffer_ReturnFalse(self): jobOne = Job('something', JobStatus.FAILING) jobTwo = Job('blah', JobStatus.DISABLED) modelOne = JobModel(jobOne, False) modelTwo = JobModel(jobTwo, False) self.assertFalse(modelOne == modelTwo)
def test_message_AllJobsOk_ReturnCorrectMessage(self): jobs = [Job('eric', JobStatus.OK), Job('terry', JobStatus.OK)] composer = DefaultMessageComposer() result = composer.message(jobs) self.assertEqual('All active jobs pass', result)
def test___filter_jobs___Nothing_ignored___Return_unmodified_list(self): job_models = [JobModel(Job('eric', JobStatus.FAILING), False), JobModel(Job('terry', JobStatus.FAILING), False)] jobs_filter = IgnoreJobsFilter() result = jobs_filter.filter_jobs(job_models) self.assertEqual(job_models, result)
def test___filter_jobs___One_ignored___Return_non_ignored_jobs(self): non_ignored = JobModel(Job('eric', JobStatus.FAILING), False) ignored = JobModel(Job('terry', JobStatus.FAILING), True) jobs_filter = IgnoreJobsFilter() result = jobs_filter.filter_jobs([non_ignored, ignored]) self.assertEqual([non_ignored], result)
def test_status_NoFailingJobs_ReturnOk(self): jobs = [ Job('eric', JobStatus.UNKNOWN), Job('terry', JobStatus.OK), Job('graham', JobStatus.DISABLED) ] reader = StatusReader() result = reader.status(jobs) self.assertEqual(JobStatus.OK, result)
def test__update_jobs__First_call__Fire_jobs_updated_event_with_no_ignores(self): jobOne = Job('job1', JobStatus.OK) jobTwo = Job('job2', JobStatus.FAILING) self.jenkins.list_jobs().AndReturn([jobOne, jobTwo]) self.event.fire([JobModel(jobOne, False), JobModel(jobTwo, False)]) self.mocks.ReplayAll() model = Model(self.jenkins, self.logger, self.event) model.update_jobs() mox.Verify(self.event)
def test_update_jobs___Ignore_job2_before_update___JobModel_ignored_on_event_fired(self): jobOne = Job('job1', JobStatus.OK) jobTwo = Job('job2', JobStatus.FAILING) self.jenkins.list_jobs().AndReturn([jobOne, jobTwo]) self.event.fire([JobModel(jobOne, False), JobModel(jobTwo, True)]) self.mocks.ReplayAll() model = Model(self.jenkins, self.logger, self.event) model.ignore_job('job2') model.update_jobs() mox.Verify(self.event)
def test_status_OneFailingJob_ReturnFailing(self): jobs = [ Job('eric', JobStatus.UNKNOWN), Job('john', JobStatus.FAILING), Job('terry', JobStatus.OK), Job('graham', JobStatus.DISABLED) ] reader = StatusReader() result = reader.status(jobs) self.assertEqual(JobStatus.FAILING, result)
def test_equalityop_TwoEquivalentObjects_ReturnTrue(self): job = Job('something', JobStatus.FAILING) modelOne = JobModel(job, False) modelTwo = JobModel(job, False) self.assertTrue(modelOne == modelTwo)
def test_equalityop_IgnoredDiffers_ReturnFalse(self): job = Job('something', JobStatus.FAILING) modelOne = JobModel(job, False) modelTwo = JobModel(job, True) self.assertFalse(modelOne == modelTwo)
def test__list_jobs__JsonResultContainsSomeJobs_ReturnListOfJobs(self): json_parsed = {'jobs': [{'name':'graham', 'color':'red'}, {'name':'john', 'color':'blue'}, {'name':'eric', 'color':'grey'}, {'name':'terry', 'color':'disabled'}, ]} self.http.request('api/json', {'tree': 'jobs[name,color]'}).AndReturn(('json response', HttpStatus.OK)) self.json.parse('json response').AndReturn(json_parsed) self.mocks.ReplayAll() jenkins = Jenkins(self.http, self.json) result = jenkins.list_jobs() expectedResult = [Job('graham', JobStatus.FAILING), Job('john', JobStatus.OK), Job('eric', JobStatus.UNKNOWN), Job('terry', JobStatus.DISABLED)] self.assertEqual(expectedResult, result)
def test___set_jobs___Ignored_job___Ignored_job_gets_ignored_icon(self): jobs = [ JobModel(Job('john', pyjenkins.job.JobStatus.FAILING), False), JobModel(Job('terry', pyjenkins.job.JobStatus.OK), True) ] self.qtgui.QListWidgetItem('failing icon', 'john').AndReturn('item for john') self.qtgui.QListWidgetItem('ignored icon', 'terry').AndReturn('item for terry') self.view.right_click_event().InAnyOrder().AndReturn(Event()) self.view.set_list(['item for john', 'item for terry']) self.mocks.ReplayAll() adapter = gui.jobs.ListViewAdapter(self.view, self.media, self.menu_factory, self.qtgui) adapter.set_jobs(jobs) mox.Verify(self.view)
def setUp(self): self.mocks = mox.Mox() self.jobs_filter = self.mocks.CreateMock(IFilter) self.messageComposer = self.mocks.CreateMock(IMessageComposer) self.statusReader = self.mocks.CreateMock(IStatusReader) self.statusEvent = self.mocks.CreateMock(IEvent) self.jobsModel = self.mocks.CreateMock(JobsModel) self.jobsEvent = Event() self.jobsModel.jobs_updated_event().AndReturn(self.jobsEvent) self.jobs = [Job('who', 'cares?')] self.job_models = [JobModel(self.jobs[0], False)]
def list_jobs(self): """ @return: list of Jobs @rtype: [pyjenkins.job.Job] """ result = None jobs = self._get_json_jobs({'tree': 'jobs[name,color]'}) if jobs is not None: result = [ Job(job['name'], self.statusMap[job['color']]) for job in jobs ] return result
def test_create_JobIsDisabled_AddEnableAction(self): job_model = JobModel(Job('name', JobStatus.DISABLED), True) self.qtgui.QAction(mox.IgnoreArg(), mox.IgnoreArg(), triggered=mox.IgnoreArg()).InAnyOrder().AndReturn( 'ignore/unignore action') self.qtgui.QAction('Enable', self.parent, triggered='enable callback').InAnyOrder().AndReturn( 'enable action') self.menu.addAction(mox.IgnoreArg()).InAnyOrder() self.menu.addAction('enable action').InAnyOrder() self.mocks.ReplayAll() factory = gui.jobs.ContextMenuFactory(self.parent, self.qtgui) factory.create(job_model, 'ignore callback', 'unignore callback', 'enable callback', 'disable callback') mox.Verify(self.menu)
def test_create___Job_status_is_unknown___No_enable_or_disable_added(self): job_model = JobModel(Job('name', JobStatus.UNKNOWN), False) self.qtgui.QAction(mox.IgnoreArg(), mox.IgnoreArg(), triggered='ignore callback').InAnyOrder().AndReturn( 'ignore/unignore action') self.qtgui.QAction( mox.IgnoreArg(), mox.IgnoreArg(), triggered='unignore callback').InAnyOrder().AndReturn( 'ignore/unignore action') self.menu.addAction('ignore/unignore action') self.mocks.ReplayAll() factory = gui.jobs.ContextMenuFactory(self.parent, self.qtgui) factory.create(job_model, 'ignore callback', 'unignore callback', 'enable callback', 'disable callback') mox.Verify(self.menu)
def test_create_AnyJob_ReturnMenu(self): job_model = JobModel(Job('name', 'status'), False) self.qtgui.QAction(mox.IgnoreArg(), mox.IgnoreArg(), triggered=mox.IgnoreArg()).InAnyOrder().AndReturn( 'ignore/unignore action') self.qtgui.QAction(mox.IgnoreArg(), mox.IgnoreArg(), triggered=mox.IgnoreArg()).InAnyOrder().AndReturn( 'enable/disable action') self.menu.addAction(mox.IgnoreArg()).InAnyOrder() self.menu.addAction(mox.IgnoreArg()).InAnyOrder() self.mocks.ReplayAll() factory = gui.jobs.ContextMenuFactory(self.parent, self.qtgui) result = factory.create(job_model, 'ignore callback', 'unignore callback', 'enable callback', 'disable callback') self.assertTrue(self.menu is result)
def test_updateStatus_JobsFilterReturnsModifiedList_ModifiedListPassedTo( self): filtered_jobs = [Job('completely', 'different')] filtered_models = [JobModel(filtered_jobs[0], True)] self.jobs_filter.filter_jobs( self.job_models).AndReturn(filtered_models) self.messageComposer.message(filtered_jobs).AndReturn('message') self.statusReader.status(filtered_jobs).AndReturn(JobStatus.OK) self.statusEvent.fire(JobStatus.OK, 'message') self.mocks.ReplayAll() model = Model( self.jobsModel, # @UnusedVariable self.jobs_filter, self.messageComposer, self.statusReader, self.statusEvent) self.jobsEvent.fire(self.job_models) mox.Verify(self.statusEvent)
def test_constructor___User_clicks_disable_menu_item___Fire_job_disabled_event( self): job_models = [ JobModel(Job('eric', pyjenkins.job.JobStatus.FAILING), False) ] right_click_event = Event() menu = self.mocks.CreateMock(MockQMenu) menu_factory = MockMenuFactory(menu) mock_event_handler = MockEventHandler() self.view.right_click_event().InAnyOrder().AndReturn(right_click_event) self._stub_out_set_jobs() menu.popup(mox.IgnoreArg()) self.mocks.ReplayAll() adapter = gui.jobs.ListViewAdapter(self.view, self.media, menu_factory, self.qtgui) # @UnusedVariable adapter.job_disabled_event().register(mock_event_handler) adapter.set_jobs(job_models) right_click_event.fire('eric', 'screen coordinates') menu_factory.disable_callback() self.assertEqual('eric', mock_event_handler.argument)
def test_constructor_NameAttributeMatchesThatPassedIn(self): job = Job('a name', 'whatever') self.assertEqual('a name', job.name)
def test_repr_ReturnsSensibleResult(self): job = Job('spam', JobStatus.OK) self.assertEquals("Job(name='spam',status='OK')", job.__repr__())
def test_equalityop_StatusDiffer_ReturnFalse(self): jobOne = Job('eggs', JobStatus.FAILING) jobTwo = Job('eggs', JobStatus.UNKNOWN) self.assertFalse(jobOne == jobTwo)
def test_equalityop_NamesDiffer_ReturnFalse(self): jobOne = Job('spam', JobStatus.FAILING) jobTwo = Job('eggs', JobStatus.FAILING) self.assertFalse(jobOne == jobTwo)
def test_equalityop_TwoEquivalentObjects_ReturnTrue(self): jobOne = Job('spam', JobStatus.FAILING) jobTwo = Job('spam', JobStatus.FAILING) self.assertTrue(jobOne == jobTwo)
def test_constructor_StatusAttributeMatchesThatPassedIn(self): job = Job('spam', JobStatus.FAILING) self.assertEqual(JobStatus.FAILING, job.status)
def test_repr_ReturnsSensibleResult(self): job = Job('spam', JobStatus.OK) self.assertEquals("Job(name='spam',status='OK')", job.__repr__())