~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/bugs/tests/test_bugtask.py

[rs=buildbot-poller] automatic merge from stable. Revisions: 11051,
        11052, 11053, 11054, 11055, 11056, 11057 included.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 
4
4
__metaclass__ = type
5
5
 
 
6
from datetime import timedelta
6
7
import unittest
7
8
 
8
9
from zope.component import getUtility
14
15
from lp.hardwaredb.interfaces.hwdb import HWBus, IHWDeviceSet
15
16
from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities
16
17
from canonical.launchpad.searchbuilder import all, any
17
 
from canonical.testing import LaunchpadFunctionalLayer, LaunchpadZopelessLayer
 
18
from canonical.testing import (
 
19
    DatabaseFunctionalLayer, LaunchpadFunctionalLayer, LaunchpadZopelessLayer)
18
20
 
 
21
from lp.bugs.interfaces.bugtarget import IBugTarget
19
22
from lp.bugs.interfaces.bugtask import (
20
23
    BugTaskImportance, BugTaskSearchParams, BugTaskStatus)
21
24
from lp.bugs.model.bugtask import build_tag_search_clause
28
31
 
29
32
class TestBugTaskDelta(TestCaseWithFactory):
30
33
 
31
 
    layer = LaunchpadFunctionalLayer
 
34
    layer = DatabaseFunctionalLayer
32
35
 
33
36
    def setUp(self):
34
37
        super(TestBugTaskDelta, self).setUp()
66
69
 
67
70
    def test_get_bugwatch_delta(self):
68
71
        # Exercise getDelta() with a change to bugwatch.
69
 
        user = self.factory.makePerson()
70
72
        bug_task = self.factory.makeBugTask()
71
73
        bug_task_before_modification = Snapshot(
72
74
            bug_task, providing=providedBy(bug_task))
501
503
            [bugtask.bug.id for bugtask in bugtasks])
502
504
 
503
505
 
504
 
class TestBugTaskPermissionsToSetAssigneeBase(TestCaseWithFactory):
 
506
class TestBugTaskPermissionsToSetAssigneeMixin:
505
507
 
506
 
    layer = LaunchpadFunctionalLayer
 
508
    layer = DatabaseFunctionalLayer
507
509
 
508
510
    def setUp(self):
509
511
        """Create the test setup.
516
518
          owners, bug supervisors, drivers
517
519
        - bug tasks for the targets
518
520
        """
519
 
        super(TestBugTaskPermissionsToSetAssigneeBase, self).setUp()
 
521
        super(TestBugTaskPermissionsToSetAssigneeMixin, self).setUp()
520
522
        self.target_owner_member = self.factory.makePerson()
521
523
        self.target_owner_team = self.factory.makeTeam(
522
524
            owner=self.target_owner_member)
556
558
        self.target_bugtask.transitionToAssignee(self.regular_user)
557
559
        logout()
558
560
 
 
561
    def makeTarget(self):
 
562
        """Create a target and a series.
 
563
 
 
564
        The target and series must be assigned as attributes of self:
 
565
        'self.target' and 'self.series'.
 
566
        """
 
567
        raise NotImplementedError(self.makeTarget)
 
568
 
559
569
    def test_userCanSetAnyAssignee_anonymous_user(self):
560
570
        # Anonymous users cannot set anybody as an assignee.
561
571
        login(ANONYMOUS)
700
710
 
701
711
 
702
712
class TestProductBugTaskPermissionsToSetAssignee(
703
 
    TestBugTaskPermissionsToSetAssigneeBase):
 
713
    TestBugTaskPermissionsToSetAssigneeMixin, TestCaseWithFactory):
704
714
 
705
715
    def makeTarget(self):
706
716
        """Create a product and a product series."""
709
719
 
710
720
 
711
721
class TestDistributionBugTaskPermissionsToSetAssignee(
712
 
    TestBugTaskPermissionsToSetAssigneeBase):
 
722
    TestBugTaskPermissionsToSetAssigneeMixin, TestCaseWithFactory):
713
723
 
714
724
    def makeTarget(self):
715
725
        """Create a distribution and a distroseries."""
718
728
        self.series = self.factory.makeDistroSeries(self.target)
719
729
 
720
730
 
 
731
class TestBugTaskSearch(TestCaseWithFactory):
 
732
 
 
733
    layer = DatabaseFunctionalLayer
 
734
 
 
735
    def login(self):
 
736
        # Log in as an arbitrary person.
 
737
        person = self.factory.makePerson()
 
738
        login_person(person)
 
739
        self.addCleanup(logout)
 
740
        return person
 
741
 
 
742
    def makeBugTarget(self):
 
743
        """Make an arbitrary bug target with no tasks on it."""
 
744
        return IBugTarget(self.factory.makeProduct())
 
745
 
 
746
    def test_no_tasks(self):
 
747
        # A brand new bug target has no tasks.
 
748
        target = self.makeBugTarget()
 
749
        self.assertEqual([], list(target.searchTasks(None)))
 
750
 
 
751
    def test_new_task_shows_up(self):
 
752
        # When we create a new bugtask on the target, it shows up in
 
753
        # searchTasks.
 
754
        target = self.makeBugTarget()
 
755
        self.login()
 
756
        task = self.factory.makeBugTask(target=target)
 
757
        self.assertEqual([task], list(target.searchTasks(None)))
 
758
 
 
759
    def test_modified_since_excludes_earlier_bugtasks(self):
 
760
        # When we search for bug tasks that have been modified since a certain
 
761
        # time, tasks for bugs that have not been modified since then are
 
762
        # excluded.
 
763
        target = self.makeBugTarget()
 
764
        self.login()
 
765
        task = self.factory.makeBugTask(target=target)
 
766
        date = task.bug.date_last_updated + timedelta(days=1)
 
767
        result = target.searchTasks(None, modified_since=date)
 
768
        self.assertEqual([], list(result))
 
769
 
 
770
    def test_modified_since_includes_later_bugtasks(self):
 
771
        # When we search for bug tasks that have been modified since a certain
 
772
        # time, tasks for bugs that have been modified since then are
 
773
        # included.
 
774
        target = self.makeBugTarget()
 
775
        self.login()
 
776
        task = self.factory.makeBugTask(target=target)
 
777
        date = task.bug.date_last_updated - timedelta(days=1)
 
778
        result = target.searchTasks(None, modified_since=date)
 
779
        self.assertEqual([task], list(result))
 
780
 
 
781
    def test_modified_since_includes_later_bugtasks_excludes_earlier(self):
 
782
        # When we search for bugs that have been modified since a certain
 
783
        # time, tasks for bugs that have been modified since then are
 
784
        # included, tasks that have not are excluded.
 
785
        target = self.makeBugTarget()
 
786
        self.login()
 
787
        task1 = self.factory.makeBugTask(target=target)
 
788
        date = task1.bug.date_last_updated
 
789
        task1.bug.date_last_updated -= timedelta(days=1)
 
790
        task2 = self.factory.makeBugTask(target=target)
 
791
        task2.bug.date_last_updated += timedelta(days=1)
 
792
        result = target.searchTasks(None, modified_since=date)
 
793
        self.assertEqual([task2], list(result))
 
794
 
 
795
 
721
796
def test_suite():
722
797
    suite = unittest.TestSuite()
723
 
    suite.addTest(unittest.makeSuite(TestBugTaskDelta))
724
 
    suite.addTest(unittest.makeSuite(TestBugTaskTagSearchClauses))
725
 
    suite.addTest(unittest.makeSuite(TestBugTaskHardwareSearch))
726
 
    suite.addTest(unittest.makeSuite(
727
 
        TestProductBugTaskPermissionsToSetAssignee))
728
 
    suite.addTest(unittest.makeSuite(
729
 
        TestDistributionBugTaskPermissionsToSetAssignee))
 
798
    suite.addTest(unittest.TestLoader().loadTestsFromName(__name__))
730
799
    suite.addTest(DocTestSuite('lp.bugs.model.bugtask'))
731
800
    return suite