summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Meier <r.meier@siemens.com>2019-12-18 13:19:20 +0100
committerGitHub <noreply@github.com>2019-12-18 13:19:20 +0100
commit5a10eb3af52a8619d446616196dd3c0c3b91c395 (patch)
treeaaeb69e98b5727eb192e9f7b75e1bb9550271d86
parent939e9d32e6e249e2a642d2bf3c1a34fde288c842 (diff)
parentac0ea91f22b08590f85a2b0ffc17cd41ae6e0ff7 (diff)
downloadgitlab-5a10eb3af52a8619d446616196dd3c0c3b91c395.tar.gz
Merge pull request #979 from python-gitlab/fix/project-snippets
Fix/project snippets
-rw-r--r--gitlab/tests/objects/__init__.py0
-rw-r--r--gitlab/tests/objects/test_projects.py140
-rw-r--r--gitlab/v4/objects.py7
-rw-r--r--tools/python_test_v4.py2
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,
}
)