diff options
author | Roger Meier <r.meier@siemens.com> | 2019-12-18 13:19:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-18 13:19:20 +0100 |
commit | 5a10eb3af52a8619d446616196dd3c0c3b91c395 (patch) | |
tree | aaeb69e98b5727eb192e9f7b75e1bb9550271d86 | |
parent | 939e9d32e6e249e2a642d2bf3c1a34fde288c842 (diff) | |
parent | ac0ea91f22b08590f85a2b0ffc17cd41ae6e0ff7 (diff) | |
download | gitlab-5a10eb3af52a8619d446616196dd3c0c3b91c395.tar.gz |
Merge pull request #979 from python-gitlab/fix/project-snippets
Fix/project snippets
-rw-r--r-- | gitlab/tests/objects/__init__.py | 0 | ||||
-rw-r--r-- | gitlab/tests/objects/test_projects.py | 140 | ||||
-rw-r--r-- | gitlab/v4/objects.py | 7 | ||||
-rw-r--r-- | tools/python_test_v4.py | 2 |
4 files changed, 146 insertions, 3 deletions
diff --git a/gitlab/tests/objects/__init__.py b/gitlab/tests/objects/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/gitlab/tests/objects/__init__.py diff --git a/gitlab/tests/objects/test_projects.py b/gitlab/tests/objects/test_projects.py new file mode 100644 index 0000000..237a9be --- /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) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 65be16d..88ede56 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): diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py index 841595d..bffdd2a 100644 --- a/tools/python_test_v4.py +++ b/tools/python_test_v4.py @@ -663,7 +663,7 @@ snippet = admin_project.snippets.create( { "title": "snip1", "file_name": "foo.py", - "code": "initial content", + "content": "initial content", "visibility": gitlab.v4.objects.VISIBILITY_PRIVATE, } ) |