~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/code/model/tests/test_sourcepackagerecipebuild.py

Merge db-devel.

Show diffs side-by-side

added added

removed removed

Lines of Context:
503
503
    layer = LaunchpadZopelessLayer
504
504
 
505
505
    def test_notify(self):
506
 
        """Notify sends email."""
 
506
        """We do not send mail on completion of source package recipe builds.
 
507
 
 
508
        See bug 778437.
 
509
        """
507
510
        person = self.factory.makePerson(name='person')
508
511
        cake = self.factory.makeSourcePackageRecipe(
509
512
            name=u'recipe', owner=person)
514
517
        removeSecurityProxy(build).status = BuildStatus.FULLYBUILT
515
518
        IStore(build).flush()
516
519
        build.notify()
517
 
        (message, ) = pop_notifications()
 
520
        self.assertEquals(0, len(pop_notifications()))
 
521
 
 
522
    def assertBuildMessageValid(self, build, message):
 
523
        # Not currently used; can be used if we do want to check about any
 
524
        # notifications sent in other cases.
518
525
        requester = build.requester
519
526
        requester_address = format_address(
520
527
            requester.displayname, requester.preferredemail.email)
544
551
        notifications = pop_notifications()
545
552
        self.assertEquals(0, len(notifications))
546
553
 
547
 
    def test_handleStatusNotifies(self):
548
 
        """"handleStatus causes notification, even if OK."""
549
 
 
550
 
        def prepare_build():
551
 
            queue_record = self.factory.makeSourcePackageRecipeBuildJob()
552
 
            build = queue_record.specific_job.build
553
 
            naked_build = removeSecurityProxy(build)
554
 
            naked_build.status = BuildStatus.FULLYBUILT
555
 
            naked_build.date_started = self.factory.getUniqueDate()
556
 
            queue_record.builder = self.factory.makeBuilder()
557
 
            slave = WaitingSlave('BuildStatus.OK')
558
 
            queue_record.builder.setSlaveForTesting(slave)
559
 
            return build
560
 
 
561
 
        def assertNotifyCount(status, build, count):
562
 
            build.handleStatus(status, None, {'filemap': {}})
563
 
            self.assertEqual(count, len(pop_notifications()))
564
 
        assertNotifyCount("PACKAGEFAIL", prepare_build(), 1)
565
 
        assertNotifyCount("OK", prepare_build(), 0)
566
 
        build = prepare_build()
567
 
        removeSecurityProxy(build).verifySuccessfulUpload = FakeMethod(
 
554
 
 
555
class TestBuildNotifications(TrialTestCase):
 
556
 
 
557
    layer = LaunchpadZopelessLayer
 
558
 
 
559
    def setUp(self):
 
560
        super(TestBuildNotifications, self).setUp()
 
561
        from lp.testing.factory import LaunchpadObjectFactory
 
562
        self.factory = LaunchpadObjectFactory()
 
563
 
 
564
    def prepare_build(self, fake_successful_upload=False):
 
565
        queue_record = self.factory.makeSourcePackageRecipeBuildJob()
 
566
        build = queue_record.specific_job.build
 
567
        naked_build = removeSecurityProxy(build)
 
568
        naked_build.status = BuildStatus.FULLYBUILT
 
569
        naked_build.date_started = self.factory.getUniqueDate()
 
570
        if fake_successful_upload:
 
571
            naked_build.verifySuccessfulUpload = FakeMethod(
568
572
                result=True)
569
 
        assertNotifyCount("OK", prepare_build(), 0)
 
573
        queue_record.builder = self.factory.makeBuilder()
 
574
        slave = WaitingSlave('BuildStatus.OK')
 
575
        queue_record.builder.setSlaveForTesting(slave)
 
576
        return build
 
577
 
 
578
    def assertDeferredNotifyCount(self, status, build, expected_count):
 
579
        d = build.handleStatus(status, None, {'filemap': {}})
 
580
        def cb(result):
 
581
            self.assertEqual(expected_count, len(pop_notifications()))
 
582
        d.addCallback(cb)
 
583
        return d
 
584
 
 
585
    def test_handleStatus_PACKAGEFAIL(self):
 
586
        """Failing to build the package immediately sends a notification."""
 
587
        return self.assertDeferredNotifyCount(
 
588
            "PACKAGEFAIL", self.prepare_build(), 1)
 
589
 
 
590
    def test_handleStatus_OK(self):
 
591
        """Building the source package does _not_ immediately send mail.
 
592
        
 
593
        (The archive uploader mail send one later.
 
594
        """
 
595
        return self.assertDeferredNotifyCount(
 
596
            "OK", self.prepare_build(), 0)
 
597
 
 
598
    def test_handleStatus_OK_successful_upload(self):
 
599
        return self.assertDeferredNotifyCount(
 
600
            "OK", self.prepare_build(True), 0)
570
601
 
571
602
 
572
603
class MakeSPRecipeBuildMixin: