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
|
# Copyright 2009 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
"""Helper functions for Answer Tracker tests."""
__metaclass__ = type
__all__ = [
'QuestionFactory',
]
from zope.component import getUtility
from canonical.launchpad.webapp.interfaces import ILaunchBag
from lp.answers.interfaces.questiontarget import IQuestionTarget
from lp.registry.interfaces.pillar import IPillarNameSet
class QuestionFactory:
"""Helper object that can be used to quickly create questions."""
@classmethod
def _getQuestionTarget(cls, target_name):
"""Return the `IQuestionTarget` to use.
It returns the pillar with the target_name and makes sure it
provides `IQuestionTarget`.
"""
assert isinstance(target_name, basestring), (
"expected a project name: %r", target_name)
target = getUtility(IPillarNameSet).getByName(target_name)
assert target is not None, (
'No project with name %s' % target_name)
assert IQuestionTarget.providedBy(target), (
"%r doesn't provide IQuestionTarget" % target)
return target
@classmethod
def createManyByProject(cls, specification):
"""Create a number of questions on selected projects.
The function expects a sequence of tuples of the form
(project_name, question_count).
project_name should be the name of a pillar providing
`IQuestionTarget`.
question_count is the number of questions to create on the target.
Questions will appear as posted by the currently logged in user.
"""
for project, question_count in specification:
target = cls._getQuestionTarget(project)
cls.createManyByTarget(target, question_count)
@classmethod
def createManyByTarget(cls, target, question_count):
"""Create a number of questions on a selected target
:param question_count: The number of questions to create on the
target.
Questions will appear as posted by the currently logged in user.
"""
owner = getUtility(ILaunchBag).user
created_questions = []
for index in range(question_count):
replacements = {'index': index, 'target': target.displayname}
created_questions.append(target.newQuestion(
owner,
'Question %(index)s on %(target)s' % replacements,
'Description %(index)s on %(target)s' % replacements))
return created_questions
|