~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/bugs/doc/bug-nomination.txt

[r=abentley][ui=none][bug=114766] Restrict the ability to nominate
        bugs for a release to bug supervisors, owners or drivers.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
= Bug Nomination =
2
2
 
3
 
Any logged-in user can nominate a bug to be fixed in a specific
 
3
A bug supervisor can nominate a bug to be fixed in a specific
4
4
distribution or product series. Nominations are created by
5
5
calling IBug.addNomination.
6
6
 
7
7
    >>> from zope.component import getUtility
8
8
    >>> from zope.interface.verify import verifyClass
 
9
    >>> from zope.security.proxy import removeSecurityProxy
 
10
    >>> from canonical.launchpad.ftests import login_person
9
11
    >>> from lp.bugs.interfaces.bug import IBugSet
10
12
    >>> from lp.bugs.interfaces.bugnomination import IBugNomination
11
13
    >>> from lp.bugs.model.bugnomination import BugNomination
12
14
    >>> from lp.registry.interfaces.distribution import IDistributionSet
13
15
    >>> from lp.registry.interfaces.person import IPersonSet
 
16
    >>> from lp.registry.interfaces.product import IProductSet
 
17
    >>> from lp.testing.sampledata import (ADMIN_EMAIL)
 
18
    >>> login(ADMIN_EMAIL)
 
19
    >>> nominator = factory.makePerson(name='nominator')
 
20
    >>> ubuntu = getUtility(IDistributionSet).getByName("ubuntu")
 
21
    >>> ubuntu = removeSecurityProxy(ubuntu)
 
22
    >>> ubuntu.bug_supervisor = nominator
 
23
    >>> firefox = getUtility(IProductSet).getByName("firefox")
 
24
    >>> firefox = removeSecurityProxy(firefox)
 
25
    >>> firefox.bug_supervisor = nominator
 
26
    >>> logout()
14
27
 
15
 
    >>> login("no-priv@canonical.com")
 
28
    >>> login_person(nominator)
16
29
 
17
30
The BugNomination class implements IBugNomination.
18
31
 
22
35
    >>> bugset = getUtility(IBugSet)
23
36
    >>> bug_one = bugset.get(1)
24
37
 
25
 
    >>> ubuntu = getUtility(IDistributionSet).getByName("ubuntu")
26
38
    >>> ubuntu_grumpy = ubuntu.getSeries("grumpy")
27
39
    >>> personset = getUtility(IPersonSet)
28
 
    >>> no_privs = personset.getByName("no-priv")
 
40
    >>> nominator = personset.getByName("nominator")
29
41
 
30
42
    >>> grumpy_nomination = bug_one.addNomination(
31
 
    ...     target=ubuntu_grumpy, owner=no_privs)
 
43
    ...     target=ubuntu_grumpy, owner=nominator)
32
44
 
33
45
The nomination records the distro series or series for which the bug
34
 
was nominated and the user that submitted the nomination (the "owner".)
 
46
was nominated and the user that submitted the nomination (the "owner").
35
47
 
36
48
    >>> print grumpy_nomination.owner.name
37
 
    no-priv
 
49
    nominator
38
50
 
39
51
    >>> print grumpy_nomination.distroseries.fullseriesname
40
52
    Ubuntu Grumpy
47
59
 
48
60
    >>> firefox_trunk = firefox.getSeries("trunk")
49
61
 
50
 
    >>> no_privs = personset.getByName("no-priv")
 
62
    >>> nominator = personset.getByName("nominator")
51
63
 
52
64
    >>> firefox_ms_nomination = bug_one.addNomination(
53
 
    ...     target=firefox_trunk, owner=no_privs)
 
65
    ...     target=firefox_trunk, owner=nominator)
54
66
 
55
67
    >>> print firefox_ms_nomination.owner.name
56
 
    no-priv
 
68
    nominator
57
69
 
58
70
    >>> print firefox_ms_nomination.productseries.title
59
71
    Mozilla Firefox trunk series
149
161
as "Nominated".
150
162
 
151
163
    >>> ubuntu_breezy_autotest_nomination = bug_one.addNomination(
152
 
    ...     target=ubuntu_breezy_autotest, owner=no_privs)
 
164
    ...     target=ubuntu_breezy_autotest, owner=nominator)
153
165
 
154
166
    >>> print ubuntu_breezy_autotest_nomination.status.title
155
167
    Nominated
179
191
 
180
192
    >>> current_user = getUtility(ILaunchBag).user
181
193
 
182
 
    >>> current_user == no_privs
 
194
    >>> current_user == nominator
183
195
    True
184
196
    >>> check_permission("launchpad.Driver", firefox_ms_nomination)
185
197
    False
186
198
 
187
 
    >>> firefox_ms_nomination.approve(no_privs)
 
199
    >>> firefox_ms_nomination.approve(nominator)
188
200
    Traceback (most recent call last):
189
201
      ..
190
202
    Unauthorized: ...
191
203
 
192
 
    >>> firefox_ms_nomination.decline(no_privs)
 
204
    >>> firefox_ms_nomination.decline(nominator)
193
205
    Traceback (most recent call last):
194
206
      ..
195
207
    Unauthorized: ...
198
210
 
199
211
    >>> login("foo.bar@canonical.com")
200
212
 
 
213
    >>> no_privs = personset.getByName("no-priv")
201
214
    >>> firefox_ms_nomination.target.driver = no_privs
202
215
 
203
216
    >>> login("no-priv@canonical.com")