From: Stephen Finucane Date: Mon, 20 Jun 2016 12:19:21 +0000 (+0100) Subject: tests: Add additional 'create_' helpers X-Git-Tag: v2.0.0-rc1~326 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fbca4b28f5eb49e5a7967b329227b13955aa4b77;p=thirdparty%2Fpatchwork.git tests: Add additional 'create_' helpers Add some additional object creation helpers, as a way to help eventually remove the 'default' class. Signed-off-by: Stephen Finucane Reviewed-by: Andy Doan --- diff --git a/patchwork/tests/utils.py b/patchwork/tests/utils.py index 8bd02881..e3ae39db 100644 --- a/patchwork/tests/utils.py +++ b/patchwork/tests/utils.py @@ -26,6 +26,8 @@ import os from django.contrib.auth.models import User +from patchwork.models import Bundle +from patchwork.models import Comment from patchwork.models import CoverLetter from patchwork.models import Patch from patchwork.models import Person @@ -36,6 +38,14 @@ from patchwork.models import Project _test_mail_dir = os.path.join(os.path.dirname(__file__), 'mail') _test_patch_dir = os.path.join(os.path.dirname(__file__), 'patches') +SAMPLE_DIFF = """--- /dev/null 2011-01-01 00:00:00.000000000 +0800 ++++ a 2011-01-01 00:00:00.000000000 +0800 +@@ -0,0 +1 @@ ++a +""" + +SAMPLE_CONTENT = 'Hello, world.' + class defaults(object): project = Project(linkname='test-project', name='Test Project', @@ -64,24 +74,63 @@ error_strings = { } -def create_user(): - _user_id = User.objects.count() +def create_project(**kwargs): + """Create a 'Project' object.""" + num = Project.objects.count() - username = 'test%d' % _user_id - email = '%s@example.com' % username + values = { + 'linkname': 'test-project-%d' % num, + 'name': 'Test Project %d' % num, + 'listid': 'test%d.example.com' % num, + } + values.update(kwargs) + + project = Project(**values) + project.save() + + return project - user = User.objects.create_user(username, email, username) - user.save() - person = Person(email=email, name=username, user=user) +def create_person(**kwargs): + """Create a 'Person' object.""" + num = Person.objects.count() + + values = { + 'email': 'test_person_%d@example.com' % num, + 'name': 'test_person_%d' % num, + 'user': None, + } + values.update(kwargs) + + person = Person(**values) person.save() + return person + + +def create_user(**kwargs): + """Create a 'User' object.""" + num = User.objects.count() + + values = { + 'name': 'test_user_%d' % num, + 'email': 'test_user_%d@example.com' % num, + } + values.update(kwargs) + + user = User.objects.create_user(values['name'], values['email'], + values['name']) + user.save() + + create_person(user=user, **values) + return user -def create_maintainer(project): +def create_maintainer(project, **kwargs): """Create a 'User' and set as maintainer for provided project.""" - user = create_user() + user = create_user(**kwargs) + profile = user.profile profile.maintainer_projects.add(project) profile.save() @@ -89,41 +138,133 @@ def create_maintainer(project): return user -def create_patches(count=1): - """Create 'count' unique patches.""" - defaults.project.save() - defaults.patch_author_person.save() +def create_bundle(**kwargs): + """Create 'Bundle' object.""" + num = Bundle.objects.count() - patches = [] + values = { + 'owner': create_user(), + 'project': create_project(), + 'name': 'test_bundle_%d' % num, + } + values.update(kwargs) - for i in range(0, count): - patch = Patch(project=defaults.project, - submitter=defaults.patch_author_person, - msgid=make_msgid(), - name='testpatch%d' % (i + 1), - diff=defaults.patch) - patch.save() - patches.append(patch) + bundle = Bundle(**values) + bundle.save() + + return bundle - return patches +def create_patch(**kwargs): + """Create 'Patch' object.""" + num = Patch.objects.count() -def create_covers(count=1): - """Create 'count' unique cover letters.""" + values = { + 'submitter': create_person(), + 'delegate': None, + 'project': create_project(), + 'msgid': make_msgid(), + 'name': 'testpatch%d' % num, + 'headers': '', + 'content': '', + 'diff': SAMPLE_DIFF, + } + values.update(kwargs) + + patch = Patch(**values) + patch.save() + + return patch + + +def create_cover(**kwargs): + """Create 'CoverLetter' object.""" + num = CoverLetter.objects.count() + + values = { + 'submitter': create_person(), + 'project': create_project(), + 'msgid': make_msgid(), + 'name': 'testpatch%d' % num, + 'headers': '', + 'content': '', + } + values.update(kwargs) + + cover = CoverLetter(**values) + cover.save() + + return cover + + +def create_comment(**kwargs): + """Create 'Comment' object.""" + values = { + 'submitter': create_person(), + 'submission': create_patch(), + 'msgid': make_msgid(), + 'content': SAMPLE_CONTENT, + } + values.update(kwargs) + + comment = Comment(**values) + comment.save() + + return comment + + +def _create_submissions(create_func, count=1, **kwargs): + """Create 'count' Submission-based objects. + + Args: + count (int): Number of patches to create + kwargs (dict): Overrides for various patch fields + """ defaults.project.save() defaults.patch_author_person.save() - covers = [] + values = { + 'project': defaults.project, + 'submitter': defaults.patch_author_person, + } + values.update(kwargs) + objects = [] for i in range(0, count): - cover = CoverLetter(project=defaults.project, - submitter=defaults.patch_author_person, - msgid=make_msgid(), - name='testcover%d' % (i + 1)) - cover.save() - covers.append(cover) - - return covers + obj = create_func(**values) + objects.append(obj) + + return objects + + +def create_patches(count=1, **kwargs): + """Create 'count' unique patches. + + This differs from 'create_patch', in that it will ensure all + patches have at least the same project and submitter. In addition, + it is possible to set other fields to the same value, by passing + them as kwargs. + + Args: + count (int): Number of patches to create + kwargs (dict): Overrides for various patch fields + """ + return _create_submissions(create_patch, count, **kwargs) + + +def create_covers(count=1, **kwargs): + """Create 'count' unique cover letters. + + This differs from 'create_cover', in that it will ensure all cover + letters have at least the same project and submitter. In addition, + it is possible to set other fields to the same value, by passing + them as kwargs. + + Args: + count (int): Number of cover letters to create + kwargs (dict): Overrides for various cover letter fields + """ + return _create_submissions(create_cover, count, **kwargs) def read_patch(filename, encoding=None):