From f54063e998064a4413b457221d01b4ac205fb711 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Thu, 28 Jan 2021 23:17:33 +0100 Subject: [PATCH] gitlab: set the user for a project --- fedeproxy/common/gitlab.py | 16 ++++++++----- tests/fedeproxy/common/test_gitlab.py | 33 +++++++++++++++------------ 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/fedeproxy/common/gitlab.py b/fedeproxy/common/gitlab.py index 64ff629..7e62a33 100644 --- a/fedeproxy/common/gitlab.py +++ b/fedeproxy/common/gitlab.py @@ -115,14 +115,18 @@ class GitLab(object): pass @retry(DeletionInProgress, tries=5) - def _project_create(self, namespace, project): + def _project_create(self, admin, user, namespace, project, **data): + user_id = self.user_get(user)['id'] + admin_id = self.user_get(admin)['id'] namespace_id = self.get_namespace_id(namespace) - data = { + data.update({ "name": project, "namespace_id": int(namespace_id), "visibility": "public", - } - r = self.s.post(f'{self.s.api}/projects', data=data) + "user_id": user_id, + }) + r = self.s.post(f'{self.s.api}/projects/user/{admin_id}', data=data) + logger.info(r.text) if r.status_code == 201: return r.json() if r.status_code == 400 and ( @@ -132,10 +136,10 @@ class GitLab(object): raise GitLab.DeletionInProgress() r.raise_for_status() - def project_create(self, namespace, project): + def project_create(self, admin, user, namespace, project, **data): info = self.project_get(namespace, project) if info is None: - return self._project_create(namespace, project) + return self._project_create(admin, user, namespace, project, **data) else: return info diff --git a/tests/fedeproxy/common/test_gitlab.py b/tests/fedeproxy/common/test_gitlab.py index f1d575c..f7eec99 100644 --- a/tests/fedeproxy/common/test_gitlab.py +++ b/tests/fedeproxy/common/test_gitlab.py @@ -5,24 +5,30 @@ import gzip from fedeproxy.common.gitlab import GitLab -@pytest.mark.gitlab -def test_project_create(): +@pytest.fixture +def gitlab(): ip = os.environ.get('FEDEPROXY_IP', '0.0.0.0') gitlab = GitLab(f'http://{ip}:8181') gitlab.login('root', 'Wrobyak4') + return gitlab + + +@pytest.mark.gitlab +def test_project_create(gitlab): gitlab.project_delete('root', 'testproject') assert gitlab.project_get('root', 'testproject') is None - p = gitlab.project_create('root', 'testproject') - assert p['id'] == gitlab.project_create('root', 'testproject')['id'] - assert gitlab.project_delete('root', 'testproject') is True - assert gitlab.project_delete('root', 'testproject') is False + user = 'testuser1' + email = 'testuser1@example.com' + u = gitlab.user_create(user, email) + p = gitlab.project_create('root', user, user, 'testproject') + assert p['id'] == gitlab.project_create('root', user, user, 'testproject')['id'] + assert gitlab.project_delete(user, 'testproject') is True + assert gitlab.project_delete(user, 'testproject') is False + assert gitlab.user_delete(user) is True @pytest.mark.gitlab -def test_user_create(): - ip = os.environ.get('FEDEPROXY_IP', '0.0.0.0') - gitlab = GitLab(f'http://{ip}:8181') - gitlab.login('root', 'Wrobyak4') +def test_user_create(gitlab): user = 'testuser1' email = 'testuser1@example.com' gitlab.user_delete(user) @@ -33,12 +39,9 @@ def test_user_create(): @pytest.mark.gitlab -def test_project_export(tmpdir): - ip = os.environ.get('FEDEPROXY_IP', '0.0.0.0') - gitlab = GitLab(f'http://{ip}:8181') - gitlab.login('root', 'Wrobyak4') +def test_project_export(gitlab, tmpdir): gitlab.project_delete('root', 'testproject') - gitlab.project_create('root', 'testproject') + gitlab.project_create('root', 'root', 'root', 'testproject') exported = f'{tmpdir}/testproject.tar.gz' gitlab.project_export('root', 'testproject', exported) assert gzip.open(exported)