From 767f3e453bdb77200a0cc18161f9a84d0001509e Mon Sep 17 00:00:00 2001 From: Stephan Kulow Date: Thu, 2 May 2019 16:32:06 +0200 Subject: [PATCH] Fix comment_tests to create fixtures --- tests/comment_tests.py | 12 ++++++++++++ tests/vcrhelpers.py | 42 +++++++++++++++++++++++++++++------------- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/tests/comment_tests.py b/tests/comment_tests.py index bc3d5f16..515a4e73 100644 --- a/tests/comment_tests.py +++ b/tests/comment_tests.py @@ -1,4 +1,5 @@ from . import OBSLocal +from . import vcrhelpers from osclib.comments import CommentAPI import random import re @@ -93,10 +94,20 @@ handle class TestCommentOBS(OBSLocal.TestCase): def setUp(self): super(TestCommentOBS, self).setUp() + self.wf = vcrhelpers.StagingWorkflow() + self.wf.create_user('factory-auto') + self.wf.create_user('repo-checker') + self.wf.create_user('staging-bot') + self.wf.create_group('factory-staging', ['staging-bot']) + self.wf.create_project(PROJECT, maintainer={'groups': ['factory-staging']}) self.api = CommentAPI(self.apiurl) # Ensure different test runs operate in unique namespace. self.bot = '::'.join([type(self).__name__, str(random.getrandbits(8))]) + def tearDown(self): + self.osc_user('Admin') + del self.wf + def test_basic(self): self.osc_user('staging-bot') @@ -142,6 +153,7 @@ class TestCommentOBS(OBSLocal.TestCase): users = ['factory-auto', 'repo-checker', 'staging-bot'] for user in users: self.osc_user(user) + print('logged in as ', user) from osc import conf bot = '::'.join([self.bot, user]) comment = self.api.add_marker(COMMENT, bot) diff --git a/tests/vcrhelpers.py b/tests/vcrhelpers.py index 94239ffe..be25b6f9 100644 --- a/tests/vcrhelpers.py +++ b/tests/vcrhelpers.py @@ -86,14 +86,23 @@ class StagingWorkflow(object): attribute_value_save(APIURL, self.project, 'Config', 'overridden-by-local = remote-nope\n' 'remote-only = remote-indeed\n') - def create_group(self, name): - if name in self.groups: return + def create_group(self, name, users=[]): + meta = """ {} """.format(name) - self.groups.append(name) + + if len(users): + root = ET.fromstring(meta) + persons = ET.SubElement(root, 'person') + for user in users: + ET.SubElement(persons, 'person', { 'userid': user } ) + meta = ET.tostring(root) + + if not name in self.groups: + self.groups.append(name) url = osc.core.makeurl(APIURL, ['group', name]) osc.core.http_PUT(url, data=meta) @@ -111,6 +120,8 @@ class StagingWorkflow(object): osc.core.http_PUT(url, data=meta) url = osc.core.makeurl(APIURL, ['person', name], {'cmd': 'change_password'}) osc.core.http_POST(url, data='opensuse') + home_project = 'home:' + name + self.projects[home_project] = Project(home_project, create=False) def create_target(self): if self.projects.get('target'): return @@ -138,12 +149,14 @@ class StagingWorkflow(object): source_package.name)) return target_package - def create_project(self, name): + def create_project(self, name, reviewer={}, maintainer={}, project_links=[]): if isinstance(name, Project): return name if name in self.projects: return self.projects[name] - self.projects[name] = Project(name) + self.projects[name] = Project(name, reviewer=reviewer, + maintainer=maintainer, + project_links=project_links) return self.projects[name] def create_submit_request(self, project, package, text=None): @@ -187,21 +200,18 @@ class StagingWorkflow(object): osc.core.http_DELETE(url) except HTTPError: pass - for login in self.users: - url = osc.core.makeurl(APIURL, ['person', login]) - try: - osc.core.http_DELETE(url) - except HTTPError: - pass print('done') if hasattr(self.api, '_invalidate_all'): self.api._invalidate_all() class Project(object): - def __init__(self, name, reviewer={}, project_links=[]): + def __init__(self, name, reviewer={}, maintainer={}, project_links=[], create=True): self.name = name self.packages = [] + if not create: + return + meta = """ @@ -213,7 +223,13 @@ class Project(object): ET.SubElement(root, 'group', { 'groupid': group, 'role': 'reviewer'} ) for group in reviewer.get('users', []): ET.SubElement(root, 'person', { 'userid': group, 'role': 'reviewer'} ) - for link in project_links: + # TODO: avoid this duplication + for group in maintainer.get('groups', []): + ET.SubElement(root, 'group', { 'groupid': group, 'role': 'maintainer'} ) + for group in maintainer.get('users', []): + ET.SubElement(root, 'person', { 'userid': group, 'role': 'maintainer'} ) + + for link in project_links: ET.SubElement(root, 'link', { 'project': link }) url = osc.core.make_meta_url('prj', self.name, APIURL)