From patchwork Fri Feb 25 19:35:51 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guilherme Salgado X-Patchwork-Id: 84568 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bilbo.ozlabs.org (localhost [127.0.0.1]) by ozlabs.org (Postfix) with ESMTP id EB779B70FD for ; Sat, 26 Feb 2011 06:35:58 +1100 (EST) Received: from adelie.canonical.com (adelie.canonical.com [91.189.90.139]) by ozlabs.org (Postfix) with ESMTP id 5B067B7088 for ; Sat, 26 Feb 2011 06:35:57 +1100 (EST) Received: from youngberry.canonical.com ([91.189.89.112]) by adelie.canonical.com with esmtp (Exim 4.71 #1 (Debian)) id 1Pt3SE-0006lU-FC; Fri, 25 Feb 2011 19:35:54 +0000 Received: from [187.126.147.231] (helo=feioso) by youngberry.canonical.com with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1Pt3SD-0002fL-RA; Fri, 25 Feb 2011 19:35:54 +0000 Received: from localhost6.localdomain6 (localhost.localdomain [127.0.0.1]) by feioso (Postfix) with ESMTP id 3653242475; Fri, 25 Feb 2011 16:35:51 -0300 (BRT) Subject: [PATCH] New factory which creates arbitrary model objects to be used in tests. To: patchwork@lists.ozlabs.org From: Guilherme Salgado Date: Fri, 25 Feb 2011 16:35:51 -0300 Message-ID: <20110225193252.9630.30937.stgit@localhost6.localdomain6> User-Agent: StGit/0.15 MIME-Version: 1.0 Cc: patches@linaro.org X-BeenThere: patchwork@lists.ozlabs.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Patchwork development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: patchwork-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: patchwork-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org --- If there's interest in this I'd be happy to move the stuff from patchwork/tests/utils.py to here and change tests to use the factory. apps/patchwork/tests/factory.py | 88 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 88 insertions(+), 0 deletions(-) create mode 100644 apps/patchwork/tests/factory.py diff --git a/apps/patchwork/tests/factory.py b/apps/patchwork/tests/factory.py new file mode 100644 index 0000000..9aa5ec3 --- /dev/null +++ b/apps/patchwork/tests/factory.py @@ -0,0 +1,88 @@ +# Patchwork - automated patch tracking system +# Copyright (C) 2011 Jeremy Kerr +# +# This file is part of the Patchwork package. +# +# Patchwork is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# Patchwork is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Patchwork; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from itertools import count +from random import randint + +from django.contrib.auth.models import User + +from patchwork.models import Patch, Person, Project, State + + +class ObjectFactory(object): + """Factory methods for creating basic Python objects.""" + + def __init__(self): + # Initialise the unique identifier. + self.integer = count(randint(0, 1000000)) + + def getUniqueEmailAddress(self): + return "%s@example.com" % self.getUniqueString('email') + + def getUniqueString(self, prefix=None): + """Return a string unique to this factory instance. + + :param prefix: Used as a prefix for the unique string. If unspecified, + defaults to 'generic-string'. + """ + if prefix is None: + prefix = "generic-string" + string = "%s%s" % (prefix, self.getUniqueInteger()) + return string.lower() + + def getUniqueInteger(self): + """Return an integer unique to this factory instance.""" + return self.integer.next() + + def makeUser(self): + userid = password = self.getUniqueString() + user = User.objects.create_user( + userid, self.getUniqueEmailAddress(), password) + user.save() + return user + + def makeProject(self): + name = self.getUniqueString() + project = Project( + linkname=name, name=name, + listid=self.getUniqueString(), + listemail=self.getUniqueEmailAddress()) + project.save() + return project + + def makePerson(self, is_user=True): + if is_user: + user = self.makeUser() + person = Person( + email=self.getUniqueEmailAddress(), name=self.getUniqueString(), + user=user) + person.save() + return person + + def makePatch(self, project=None, submitter=None): + if project is None: + project = self.makeProject() + if submitter is None: + submitter = self.makePerson() + patch = Patch( + project=project, msgid=self.getUniqueString(), + name=self.getUniqueString(), submitter=submitter, + state=State.objects.get(name='New')) + patch.save() + return patch