~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/soyuz/scripts/tests/test_processaccepted.py

[r=gmb][bug=833736] When syncing packages to a distribution,
        make sure any bugs referenced in the package's changelog are closed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2009-2010 Canonical Ltd.  This software is licensed under the
 
2
# GNU Affero General Public License version 3 (see the file LICENSE).
 
3
 
 
4
__metaclass__ = type
 
5
 
 
6
from textwrap import dedent
 
7
from zope.security.proxy import removeSecurityProxy
 
8
 
 
9
from canonical.testing.layers import LaunchpadZopelessLayer
 
10
from lp.bugs.interfaces.bugtask import BugTaskStatus
 
11
from lp.soyuz.scripts.processaccepted import (
 
12
    close_bugs_for_sourcepackagerelease,
 
13
    )
 
14
from lp.testing import TestCaseWithFactory
 
15
 
 
16
 
 
17
class TestClosingBugs(TestCaseWithFactory):
 
18
    """Test the various bug closing methods in processaccepted.py.
 
19
 
 
20
    Tests are currently spread around the codebase; this is an attempt to
 
21
    start a unification in a single file and those other tests need
 
22
    migrating here.
 
23
    See also:
 
24
        * lp/soyuz/scripts/tests/test_queue.py
 
25
        * lib/lp/soyuz/doc/closing-bugs-from-changelogs.txt
 
26
        * lib/lp/archiveuploader/tests/nascentupload-closing-bugs.txt
 
27
    """
 
28
    layer = LaunchpadZopelessLayer
 
29
 
 
30
    def test_close_bugs_for_sourcepackagerelease_with_no_changes_file(self):
 
31
        # If there's no changes file it should read the changelog_entry on
 
32
        # the sourcepackagerelease.
 
33
 
 
34
        spr = self.factory.makeSourcePackageRelease(changelog_entry="blah")
 
35
 
 
36
        # Make 4 bugs and corresponding bugtasks and put them in an array
 
37
        # as tuples.
 
38
        bugs = []
 
39
        for i in range(5):
 
40
            bug = self.factory.makeBug()
 
41
            bugtask = self.factory.makeBugTask(
 
42
                target=spr.sourcepackage, bug=bug)
 
43
            bugs.append((bug, bugtask))
 
44
 
 
45
        unfixed_bug = self.factory.makeBug()
 
46
        unfixed_task = self.factory.makeBugTask(
 
47
            target=spr.sourcepackage, bug=unfixed_bug)
 
48
 
 
49
        # Make a changelog entry for a package which contains the IDs of
 
50
        # the 5 bugs separated across 2 releases.
 
51
        changelog=dedent("""
 
52
            foo (1.0-3) unstable; urgency=low
 
53
 
 
54
              * closes: %s, %s
 
55
              * lp: #%s, #%s
 
56
 
 
57
             -- Foo Bar <foo@example.com>  Tue, 01 Jan 1970 01:50:41 +0000
 
58
 
 
59
            foo (1.0-2) unstable; urgency=low
 
60
 
 
61
              * closes: %s
 
62
 
 
63
             -- Foo Bar <foo@example.com>  Tue, 01 Jan 1970 01:50:41 +0000
 
64
 
 
65
            foo (1.0-1) unstable; urgency=low
 
66
 
 
67
              * closes: %s
 
68
 
 
69
             -- Foo Bar <foo@example.com>  Tue, 01 Jan 1970 01:50:41 +0000
 
70
 
 
71
            """ % (
 
72
            bugs[0][0].id,
 
73
            bugs[1][0].id,
 
74
            bugs[2][0].id,
 
75
            bugs[3][0].id,
 
76
            bugs[4][0].id,
 
77
            unfixed_bug.id,
 
78
            ))
 
79
        lfa = self.factory.makeLibraryFileAlias(content=changelog)
 
80
 
 
81
        removeSecurityProxy(spr).changelog = lfa
 
82
        self.layer.txn.commit()
 
83
 
 
84
        # Call the method and test it's closed the bugs.
 
85
        close_bugs_for_sourcepackagerelease(spr, changesfile_object=None,
 
86
                                            since_version="1.0-1")
 
87
        for bug, bugtask in bugs:
 
88
            self.assertEqual(BugTaskStatus.FIXRELEASED, bugtask.status)
 
89
 
 
90
        self.assertEqual(BugTaskStatus.NEW, unfixed_task.status)
 
91