| Index: appengine/findit/waterfall/test/send_notification_for_culprit_pipeline_test.py
|
| diff --git a/appengine/findit/waterfall/test/send_notification_for_culprit_pipeline_test.py b/appengine/findit/waterfall/test/send_notification_for_culprit_pipeline_test.py
|
| index ef647ad33cf509dd8c5b3928862187a8cd3d93e4..c625caa0a929162025d0a86d7903170bcbdbbc56 100644
|
| --- a/appengine/findit/waterfall/test/send_notification_for_culprit_pipeline_test.py
|
| +++ b/appengine/findit/waterfall/test/send_notification_for_culprit_pipeline_test.py
|
| @@ -2,6 +2,8 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| +import datetime
|
| +
|
| from common.git_repository import GitRepository
|
| from common.rietveld import Rietveld
|
| from model import analysis_status as status
|
| @@ -12,25 +14,41 @@ from waterfall.send_notification_for_culprit_pipeline import (
|
| from waterfall.test import wf_testcase
|
|
|
|
|
| +_MOCKED_DATETIME_UTCNOW = datetime.datetime(2016, 06, 28, 12, 44, 00)
|
| +_MOCKED_COMMIT_TIME = datetime.datetime(2016, 06, 28, 12, 40, 00)
|
| +
|
| class SendNotificationForCulpritPipelineTest(wf_testcase.WaterfallTestCase):
|
|
|
| - def _MockRietveldAndGitRepository(self, mocked_url, rietveld_requests):
|
| + def _MockRietveld(self, rietveld_requests):
|
| + def Mocked_Rietveld_PostMessage(_, url, message):
|
| + rietveld_requests.append((url, message))
|
| + return True
|
| + self.mock(Rietveld, 'PostMessage', Mocked_Rietveld_PostMessage)
|
| +
|
| + def _MockGitRepository(self, mocked_url):
|
| def Mocked_GetChangeLog(*_):
|
| class MockedChangeLog(object):
|
| @property
|
| def code_review_url(self):
|
| return mocked_url
|
| + @property
|
| + def committer_time(self):
|
| + return _MOCKED_COMMIT_TIME
|
| return MockedChangeLog()
|
| self.mock(GitRepository, 'GetChangeLog', Mocked_GetChangeLog)
|
| - def Mocked_Rietveld_PostMessage(_, url, message):
|
| - rietveld_requests.append((url, message))
|
| - return True
|
| - self.mock(Rietveld, 'PostMessage', Mocked_Rietveld_PostMessage)
|
| +
|
| + def _MockDatetimeUtcNow(self):
|
| + class Mocked_Datetime(object):
|
| + @staticmethod
|
| + def utcnow():
|
| + return _MOCKED_DATETIME_UTCNOW
|
| + self.mock(send_notification_for_culprit_pipeline,
|
| + 'datetime', Mocked_Datetime)
|
|
|
| def testShouldNotSendNotificationForSingleFailedBuild(self):
|
| self.assertFalse(
|
| send_notification_for_culprit_pipeline._ShouldSendNotification(
|
| - 'm', 'b1', 1, 'chromium', 'r1'))
|
| + 'm', 'b1', 1, 'chromium', 'r1', 2, False))
|
| culprit = WfCulprit.Get('chromium', 'r1')
|
| self.assertIsNotNone(culprit)
|
| self.assertEqual([['m', 'b1', 1]], culprit.builds)
|
| @@ -38,10 +56,10 @@ class SendNotificationForCulpritPipelineTest(wf_testcase.WaterfallTestCase):
|
| def testShouldNotSendNotificationForSameFailedBuild(self):
|
| self.assertFalse(
|
| send_notification_for_culprit_pipeline._ShouldSendNotification(
|
| - 'm', 'b2', 2, 'chromium', 'r2'))
|
| + 'm', 'b2', 2, 'chromium', 'r2', 2, False))
|
| self.assertFalse(
|
| send_notification_for_culprit_pipeline._ShouldSendNotification(
|
| - 'm', 'b2', 2, 'chromium', 'r2'))
|
| + 'm', 'b2', 2, 'chromium', 'r2', 2, False))
|
| culprit = WfCulprit.Get('chromium', 'r2')
|
| self.assertIsNotNone(culprit)
|
| self.assertEqual([['m', 'b2', 2]], culprit.builds)
|
| @@ -49,10 +67,10 @@ class SendNotificationForCulpritPipelineTest(wf_testcase.WaterfallTestCase):
|
| def testShouldSendNotificationForSecondFailedBuild(self):
|
| self.assertFalse(
|
| send_notification_for_culprit_pipeline._ShouldSendNotification(
|
| - 'm', 'b31', 31, 'chromium', 'r3'))
|
| + 'm', 'b31', 31, 'chromium', 'r3', 2, False))
|
| self.assertTrue(
|
| send_notification_for_culprit_pipeline._ShouldSendNotification(
|
| - 'm', 'b32', 32, 'chromium', 'r3'))
|
| + 'm', 'b32', 32, 'chromium', 'r3', 2, False))
|
| culprit = WfCulprit.Get('chromium', 'r3')
|
| self.assertIsNotNone(culprit)
|
| self.assertEqual(status.RUNNING, culprit.cr_notification_status)
|
| @@ -60,7 +78,9 @@ class SendNotificationForCulpritPipelineTest(wf_testcase.WaterfallTestCase):
|
|
|
| def testShouldNotSendNotificationForFirstFailedBuildCycle(self):
|
| rietveld_requests = []
|
| - self._MockRietveldAndGitRepository('url', rietveld_requests)
|
| + self._MockRietveld(rietveld_requests)
|
| + self._MockGitRepository('url')
|
| + self._MockDatetimeUtcNow()
|
|
|
| pipeline = SendNotificationForCulpritPipeline()
|
| self.assertFalse(pipeline.run('m', 'b4', 4, 'chromium', 'r4'))
|
| @@ -68,7 +88,9 @@ class SendNotificationForCulpritPipelineTest(wf_testcase.WaterfallTestCase):
|
|
|
| def testShouldNotSendNotificationIfNoCodeReview(self):
|
| rietveld_requests = []
|
| - self._MockRietveldAndGitRepository(None, rietveld_requests)
|
| + self._MockRietveld(rietveld_requests)
|
| + self._MockGitRepository(None)
|
| + self._MockDatetimeUtcNow()
|
| culprit = WfCulprit.Create('chromium', 'r5')
|
| culprit.builds.append(['m', 'b51', 51])
|
| culprit.put()
|
| @@ -79,7 +101,9 @@ class SendNotificationForCulpritPipelineTest(wf_testcase.WaterfallTestCase):
|
|
|
| def testSendNotificationSuccess(self):
|
| rietveld_requests = []
|
| - self._MockRietveldAndGitRepository('url', rietveld_requests)
|
| + self._MockRietveld(rietveld_requests)
|
| + self._MockGitRepository('url')
|
| + self._MockDatetimeUtcNow()
|
| culprit = WfCulprit.Create('chromium', 'r6')
|
| culprit.builds.append(['m', 'b61', 61])
|
| culprit.put()
|
|
|