From e104e213b16ca702f33962d770784f045f36cf10 Mon Sep 17 00:00:00 2001 From: Max Wittig Date: Wed, 18 Dec 2019 12:13:47 +0100 Subject: [PATCH 1/3] fix(projects): adjust snippets to match the API --- gitlab/v4/objects.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 65be16d1b..88ede5623 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -3667,8 +3667,11 @@ class ProjectSnippetManager(CRUDMixin, RESTManager): _path = "/projects/%(project_id)s/snippets" _obj_cls = ProjectSnippet _from_parent_attrs = {"project_id": "id"} - _create_attrs = (("title", "file_name", "code"), ("lifetime", "visibility")) - _update_attrs = (tuple(), ("title", "file_name", "code", "visibility")) + _create_attrs = (("title", "file_name", "content", "visibility"), ("description",)) + _update_attrs = ( + tuple(), + ("title", "file_name", "content", "visibility", "description"), + ) class ProjectTrigger(SaveMixin, ObjectDeleteMixin, RESTObject): From 0952c55a316fc8f68854badd68b4fc57658af9e7 Mon Sep 17 00:00:00 2001 From: Max Wittig Date: Wed, 18 Dec 2019 12:14:02 +0100 Subject: [PATCH 2/3] test: add project snippet tests --- gitlab/tests/objects/__init__.py | 0 gitlab/tests/objects/test_projects.py | 140 ++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 gitlab/tests/objects/__init__.py create mode 100644 gitlab/tests/objects/test_projects.py diff --git a/gitlab/tests/objects/__init__.py b/gitlab/tests/objects/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/gitlab/tests/objects/test_projects.py b/gitlab/tests/objects/test_projects.py new file mode 100644 index 000000000..237a9bee7 --- /dev/null +++ b/gitlab/tests/objects/test_projects.py @@ -0,0 +1,140 @@ +import unittest +import gitlab +import os +import pickle +import tempfile +import json +import unittest +import requests +from gitlab import * # noqa +from gitlab.v4.objects import * # noqa +from httmock import HTTMock, urlmatch, response # noqa + + +headers = {"content-type": "application/json"} + + +class TestProjectSnippets(unittest.TestCase): + def setUp(self): + self.gl = Gitlab( + "http://localhost", + private_token="private_token", + ssl_verify=True, + api_version=4, + ) + + def test_list_project_snippets(self): + title = "Example Snippet Title" + visibility = "private" + + @urlmatch( + scheme="http", + netloc="localhost", + path="/api/v4/projects/1/snippets", + method="get", + ) + def resp_list_snippet(url, request): + content = """[{ + "title": "%s", + "description": "More verbose snippet description", + "file_name": "example.txt", + "content": "source code with multiple lines", + "visibility": "%s"}]""" % ( + title, + visibility, + ) + content = content.encode("utf-8") + return response(200, content, headers, None, 25, request) + + with HTTMock(resp_list_snippet): + snippets = self.gl.projects.get(1, lazy=True).snippets.list() + self.assertEqual(len(snippets), 1) + self.assertEqual(snippets[0].title, title) + self.assertEqual(snippets[0].visibility, visibility) + + def test_get_project_snippets(self): + title = "Example Snippet Title" + visibility = "private" + + @urlmatch( + scheme="http", + netloc="localhost", + path="/api/v4/projects/1/snippets/1", + method="get", + ) + def resp_get_snippet(url, request): + content = """{ + "title": "%s", + "description": "More verbose snippet description", + "file_name": "example.txt", + "content": "source code with multiple lines", + "visibility": "%s"}""" % ( + title, + visibility, + ) + content = content.encode("utf-8") + return response(200, content, headers, None, 25, request) + + with HTTMock(resp_get_snippet): + snippet = self.gl.projects.get(1, lazy=True).snippets.get(1) + self.assertEqual(snippet.title, title) + self.assertEqual(snippet.visibility, visibility) + + def test_create_update_project_snippets(self): + title = "Example Snippet Title" + visibility = "private" + + @urlmatch( + scheme="http", + netloc="localhost", + path="/api/v4/projects/1/snippets", + method="put", + ) + def resp_update_snippet(url, request): + content = """{ + "title": "%s", + "description": "More verbose snippet description", + "file_name": "example.txt", + "content": "source code with multiple lines", + "visibility": "%s"}""" % ( + title, + visibility, + ) + content = content.encode("utf-8") + return response(200, content, headers, None, 25, request) + + @urlmatch( + scheme="http", + netloc="localhost", + path="/api/v4/projects/1/snippets", + method="post", + ) + def resp_create_snippet(url, request): + content = """{ + "title": "%s", + "description": "More verbose snippet description", + "file_name": "example.txt", + "content": "source code with multiple lines", + "visibility": "%s"}""" % ( + title, + visibility, + ) + content = content.encode("utf-8") + return response(200, content, headers, None, 25, request) + + with HTTMock(resp_create_snippet, resp_update_snippet): + snippet = self.gl.projects.get(1, lazy=True).snippets.create( + { + "title": title, + "file_name": title, + "content": title, + "visibility": visibility, + } + ) + self.assertEqual(snippet.title, title) + self.assertEqual(snippet.visibility, visibility) + title = "new-title" + snippet.title = title + snippet.save() + self.assertEqual(snippet.title, title) + self.assertEqual(snippet.visibility, visibility) From ac0ea91f22b08590f85a2b0ffc17cd41ae6e0ff7 Mon Sep 17 00:00:00 2001 From: Max Wittig Date: Wed, 18 Dec 2019 12:59:07 +0100 Subject: [PATCH 3/3] test: adjust functional tests for project snippets --- tools/python_test_v4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py index 841595dc4..bffdd2a17 100644 --- a/tools/python_test_v4.py +++ b/tools/python_test_v4.py @@ -663,7 +663,7 @@ { "title": "snip1", "file_name": "foo.py", - "code": "initial content", + "content": "initial content", "visibility": gitlab.v4.objects.VISIBILITY_PRIVATE, } )