1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# Copyright 2009 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
"""
Run the doctests and pagetests.
"""
import os
from zope.component import getUtility
from canonical.launchpad.ftests import (
ANONYMOUS,
login,
)
from canonical.launchpad.ftests.test_system_documentation import (
uploaderSetUp,
uploadQueueSetUp,
)
from canonical.launchpad.testing.systemdocs import (
LayeredDocFileSuite,
setUp,
tearDown,
)
from canonical.testing.layers import (
DatabaseFunctionalLayer,
LaunchpadZopelessLayer,
)
from lp.bugs.interfaces.bug import CreateBugParams
from lp.bugs.interfaces.bugtask import IBugTaskSet
from lp.registry.interfaces.distribution import IDistributionSet
from lp.registry.interfaces.person import IPersonSet
from lp.services.testing import build_test_suite
from lp.services.worlddata.interfaces.language import ILanguageSet
from lp.testing.mail_helpers import pop_notifications
here = os.path.dirname(os.path.realpath(__file__))
def _createUbuntuBugTaskLinkedToQuestion():
"""Get the id of an Ubuntu bugtask linked to a question.
The Ubuntu team is set as the answer contact for Ubuntu, and no-priv
is used as the submitter..
"""
login('test@canonical.com')
sample_person = getUtility(IPersonSet).getByEmail('test@canonical.com')
ubuntu_team = getUtility(IPersonSet).getByName('ubuntu-team')
ubuntu_team.addLanguage(getUtility(ILanguageSet)['en'])
ubuntu = getUtility(IDistributionSet).getByName('ubuntu')
ubuntu.addAnswerContact(ubuntu_team, ubuntu_team.teamowner)
ubuntu_question = ubuntu.newQuestion(
sample_person, "Can't install Ubuntu",
"I insert the install CD in the CD-ROM drive, but it won't boot.")
no_priv = getUtility(IPersonSet).getByEmail('no-priv@canonical.com')
params = CreateBugParams(
owner=no_priv, title="Installer fails on a Mac PPC",
comment=ubuntu_question.description)
bug = ubuntu.createBug(params)
ubuntu_question.linkBug(bug)
[ubuntu_bugtask] = bug.bugtasks
login(ANONYMOUS)
# Remove the notifcations for the newly created question.
pop_notifications()
return ubuntu_bugtask.id
def bugLinkedToQuestionSetUp(test):
"""Setup the question and linked bug for testing."""
def get_bugtask_linked_to_question():
return getUtility(IBugTaskSet).get(bugtask_id)
setUp(test)
bugtask_id = _createUbuntuBugTaskLinkedToQuestion()
test.globs['get_bugtask_linked_to_question'] = (
get_bugtask_linked_to_question)
# Log in here, since we don't want to set up an non-anonymous
# interaction in the test.
login('no-priv@canonical.com')
def uploaderBugLinkedToQuestionSetUp(test):
LaunchpadZopelessLayer.switchDbUser('launchpad')
bugLinkedToQuestionSetUp(test)
LaunchpadZopelessLayer.commit()
uploaderSetUp(test)
login(ANONYMOUS)
def uploadQueueBugLinkedToQuestionSetUp(test):
LaunchpadZopelessLayer.switchDbUser('launchpad')
bugLinkedToQuestionSetUp(test)
LaunchpadZopelessLayer.commit()
uploadQueueSetUp(test)
login(ANONYMOUS)
# Files that have special needs can construct their own suite
special = {
'notifications-linked-private-bug.txt':
LayeredDocFileSuite(
'notifications-linked-private-bug.txt',
setUp=bugLinkedToQuestionSetUp, tearDown=tearDown,
layer=DatabaseFunctionalLayer),
'notifications-linked-bug.txt': LayeredDocFileSuite(
'notifications-linked-bug.txt',
setUp=bugLinkedToQuestionSetUp, tearDown=tearDown,
layer=DatabaseFunctionalLayer),
'notifications-linked-bug.txt-uploader':
LayeredDocFileSuite(
'notifications-linked-bug.txt',
setUp=uploaderBugLinkedToQuestionSetUp,
tearDown=tearDown,
layer=LaunchpadZopelessLayer),
'notifications-linked-bug.txt-queued': LayeredDocFileSuite(
'notifications-linked-bug.txt',
setUp=uploadQueueBugLinkedToQuestionSetUp,
tearDown=tearDown,
layer=LaunchpadZopelessLayer),
}
def test_suite():
return build_test_suite(here, special)
|