def test_failed_build(self, post_fn): URL = "https://analytics.example.com/report?source=changes" self._set_config_url(URL) project = self.create_project(name='test', slug='project-slug') self.assertEquals(post_fn.call_count, 0) duration = 1234 created = 1424998888 started = created + 10 finished = started + duration build = self.create_build(project, result=Result.failed, target='D1', label='Some sweet diff', duration=duration, date_created=ts_to_datetime(created), date_started=ts_to_datetime(started), date_finished=ts_to_datetime(finished)) job = self.create_job(build=build, result=Result.failed) jobphase = self.create_jobphase(job) jobstep = self.create_jobstep(jobphase, status=Status.finished, result=Result.failed) db.session.add( FailureReason(step_id=jobstep.id, job_id=job.id, build_id=build.id, project_id=project.id, reason='missing_tests')) db.session.commit() with mock.patch( 'changes.listeners.analytics_notifier._get_phabricator_revision_url' ) as mock_get_phab: mock_get_phab.return_value = 'https://example.com/D1' with mock.patch( 'changes.listeners.analytics_notifier._get_build_failure_reasons' ) as mock_get_failures: mock_get_failures.return_value = ['aborted', 'missing_tests'] build_finished_handler(build_id=build.id.hex) expected_data = { 'build_id': build.id.hex, 'number': 1, 'target': 'D1', 'project_slug': 'project-slug', 'result': 'Failed', 'label': 'Some sweet diff', 'is_commit': True, 'duration': 1234, 'date_created': created, 'date_started': started, 'date_finished': finished, 'phab_revision_url': 'https://example.com/D1', 'failure_reasons': ['aborted', 'missing_tests'], } post_fn.assert_called_once_with(URL, [expected_data])
def test_failed_build(self, post_fn): URL = "https://analytics.example.com/report?source=changes" self._set_config_url(URL) project = self.create_project(name='test', slug='project-slug') self.assertEquals(post_fn.call_count, 0) duration = 1234 created = 1424998888 started = created + 10 finished = started + duration decided = finished + 10 build = self.create_build(project, result=Result.failed, target='D1', label='Some sweet diff', duration=duration, tags=['commit', 'angry'], date_created=ts_to_datetime(created), date_started=ts_to_datetime(started), date_finished=ts_to_datetime(finished), date_decided=ts_to_datetime(decided)) build.source.revision.patch_hash = 'a' * 40 job = self.create_job(build=build, result=Result.failed) jobphase = self.create_jobphase(job) jobstep = self.create_jobstep(jobphase, status=Status.finished, result=Result.failed) self.create_jobstep(jobphase, status=Status.finished, result=Result.infra_failed, replacement_id=jobstep.id) db.session.add(FailureReason(step_id=jobstep.id, job_id=job.id, build_id=build.id, project_id=project.id, reason='missing_tests')) db.session.commit() self.create_itemstat(item_id=build.id, name='names', value=99) self.create_itemstat(item_id=build.id, name='faces', value=0) with mock.patch('changes.listeners.analytics_notifier._get_phabricator_revision_url') as mock_get_phab: mock_get_phab.return_value = 'https://example.com/D1' with mock.patch('changes.listeners.analytics_notifier._get_build_failure_reasons') as mock_get_failures: mock_get_failures.return_value = ['aborted', 'missing_tests'] build_finished_handler(build_id=build.id.hex) expected_data = { 'build_id': build.id.hex, 'number': 1, 'target': 'D1', 'project_slug': 'project-slug', 'result': 'Failed', 'label': 'Some sweet diff', 'is_commit': True, 'duration': 1234, 'jobsteps_replaced': 1, 'date_created': created, 'date_started': started, 'date_finished': finished, 'date_decided': decided, 'phab_revision_url': 'https://example.com/D1', 'failure_reasons': ['aborted', 'missing_tests'], 'tags': {'tags': ['angry', 'commit']}, 'tags_string': 'angry,commit', 'item_stats': {'names': 99, 'faces': 0}, 'patch_hash': 'a' * 40, } post_fn.assert_called_once_with(URL, [expected_data])
def test_no_url(self, post_fn): self._set_config_url(None) project = self.create_project(name='test', slug='test') build = self.create_build(project, result=Result.failed) build_finished_handler(build_id=build.id.hex) self.assertEquals(post_fn.call_count, 0)
def test_failed_build(self, post_fn): URL = "https://analytics.example.com/report?source=changes" self._set_config_url(URL) project = self.create_project(name="test", slug="project-slug") self.assertEquals(post_fn.call_count, 0) duration = 1234 created = 1424998888 started = created + 10 finished = started + duration decided = finished + 10 build = self.create_build( project, result=Result.failed, target="D1", label="Some sweet diff", duration=duration, tags=["commit", "angry"], date_created=ts_to_datetime(created), date_started=ts_to_datetime(started), date_finished=ts_to_datetime(finished), date_decided=ts_to_datetime(decided), ) job = self.create_job(build=build, result=Result.failed) jobphase = self.create_jobphase(job) jobstep = self.create_jobstep(jobphase, status=Status.finished, result=Result.failed) self.create_jobstep(jobphase, status=Status.finished, result=Result.infra_failed, replacement_id=jobstep.id) db.session.add( FailureReason( step_id=jobstep.id, job_id=job.id, build_id=build.id, project_id=project.id, reason="missing_tests" ) ) db.session.commit() self.create_itemstat(item_id=build.id, name="names", value=99) self.create_itemstat(item_id=build.id, name="faces", value=0) with mock.patch("changes.listeners.analytics_notifier._get_phabricator_revision_url") as mock_get_phab: mock_get_phab.return_value = "https://example.com/D1" with mock.patch("changes.listeners.analytics_notifier._get_build_failure_reasons") as mock_get_failures: mock_get_failures.return_value = ["aborted", "missing_tests"] build_finished_handler(build_id=build.id.hex) expected_data = { "build_id": build.id.hex, "number": 1, "target": "D1", "project_slug": "project-slug", "result": "Failed", "label": "Some sweet diff", "is_commit": True, "duration": 1234, "jobsteps_replaced": 1, "date_created": created, "date_started": started, "date_finished": finished, "date_decided": decided, "phab_revision_url": "https://example.com/D1", "failure_reasons": ["aborted", "missing_tests"], "tags": {"tags": ["angry", "commit"]}, "item_stats": {"names": 99, "faces": 0}, } post_fn.assert_called_once_with(URL, [expected_data])
def test_no_url(self, post_fn): self._set_config_url(None) project = self.create_project(name='test', slug='test') build = self.create_build(project, result=Result.failed) build_finished_handler(build_id=build.id.hex) self.assertEquals(post_fn.call_count, 0)