Merge lp:~salgado/offspring/object-factory into lp:~linaro-automation/offspring/linaro

Proposed by Guilherme Salgado
Status: Merged
Approved by: James Tunnicliffe
Approved revision: no longer in the source branch.
Merged at revision: 52
Proposed branch: lp:~salgado/offspring/object-factory
Merge into: lp:~linaro-automation/offspring/linaro
Diff against target: 114 lines (+108/-0)
1 file modified
lib/offspring/web/queuemanager/tests/factory.py (+108/-0)
To merge this branch: bzr merge lp:~salgado/offspring/object-factory
Reviewer Review Type Date Requested Status
James Tunnicliffe (community) Approve
Review via email: mp+76742@code.launchpad.net

Description of the change

Create a new factory of (django) model objects to be used in tests

To post a comment you must log in.
Revision history for this message
James Tunnicliffe (dooferlad) wrote :

Looks good.

review: Approve
lp:~salgado/offspring/object-factory updated
30. By Guilherme Salgado

Fix one final place which was using offspring-builder-script instead of offspring-builder-config

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'lib/offspring/web/queuemanager/tests'
2=== added file 'lib/offspring/web/queuemanager/tests/__init__.py'
3=== added file 'lib/offspring/web/queuemanager/tests/factory.py'
4--- lib/offspring/web/queuemanager/tests/factory.py 1970-01-01 00:00:00 +0000
5+++ lib/offspring/web/queuemanager/tests/factory.py 2011-09-23 13:55:27 +0000
6@@ -0,0 +1,108 @@
7+from itertools import count
8+
9+from django.contrib.auth.models import User
10+from django_group_access.models import AccessGroup
11+
12+from offspring.web.queuemanager.models import (
13+ BuildRequest,
14+ BuildResult,
15+ Lexbuilder,
16+ Project,
17+ Release)
18+
19+
20+class ObjectFactory(object):
21+
22+ def __init__(self):
23+ self.counter = count()
24+
25+ def getUniqueEmailAddress(self):
26+ return "%s@example.com" % self.getUniqueString('email')
27+
28+ def getUniqueString(self, prefix=None):
29+ """Return a string unique to this factory instance.
30+
31+ :param prefix: Used as a prefix for the unique string. If unspecified,
32+ defaults to 'generic-string'.
33+ """
34+ if prefix is None:
35+ prefix = "generic-string"
36+ string = "%s%s" % (prefix, self.getUniqueInteger())
37+ return string.lower()
38+
39+ def getUniqueInteger(self):
40+ """Return an integer unique to this factory instance."""
41+ return self.counter.next()
42+
43+ def makeAccessGroup(self, users):
44+ name = self.getUniqueString()
45+ group = AccessGroup(name=name)
46+ group.save()
47+ for user in users:
48+ group.members.add(user)
49+ group.save()
50+ return group
51+
52+ def makeUser(self):
53+ userid = password = self.getUniqueString()
54+ user = User.objects.create_user(
55+ userid, self.getUniqueEmailAddress(), password)
56+ user.save()
57+ return user
58+
59+ def makeProject(self, name=None, title=None, is_private=False,
60+ owner=None, access_groups=[]):
61+ if name is None:
62+ name = self.getUniqueString()
63+ if title is None:
64+ title = self.getUniqueString()
65+ if owner is None:
66+ owner = self.makeUser()
67+ project = Project(
68+ name=name, title=title, is_private=is_private, owner=owner)
69+ project.save()
70+ for group in access_groups:
71+ project.access_groups.add(group)
72+ project.save()
73+ return project
74+
75+ def makeBuildResult(self, project=None):
76+ if project is None:
77+ project = self.makeProject()
78+ project.save()
79+ result = BuildResult(project=project)
80+ result.save()
81+ return result
82+
83+ def makeRelease(self, build=None, name=None, creator=None):
84+ if build is None:
85+ build = self.makeBuildResult()
86+ if name is None:
87+ name = self.getUniqueString()
88+ if creator is None:
89+ creator = self.makeUser()
90+ release = Release(build=build, name=name, creator=creator)
91+ release.save()
92+ return release
93+
94+ def makeLexbuilder(self, name=None, uri=None, current_job=None):
95+ if name is None:
96+ name = self.getUniqueString()
97+ if uri is None:
98+ uri = 'htt://example.com/%s' % name
99+ if current_job is None:
100+ current_job = self.makeBuildResult()
101+ builder = Lexbuilder(name=name, uri=uri, current_job=current_job)
102+ builder.save()
103+ return builder
104+
105+ def makeBuildRequest(self, project=None):
106+ if project is None:
107+ project = self.makeProject()
108+ project.save()
109+ request = BuildRequest(project=project)
110+ request.save()
111+ return request
112+
113+
114+factory = ObjectFactory()

Subscribers

People subscribed via source and target branches