Skip to content

Commit

Permalink
Merge pull request #979 from python-gitlab/fix/project-snippets
Browse files Browse the repository at this point in the history
Fix/project snippets
  • Loading branch information
bufferoverflow committed Dec 18, 2019
2 parents 939e9d3 + ac0ea91 commit 5a10eb3
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 3 deletions.
Empty file.
140 changes: 140 additions & 0 deletions 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)
7 changes: 5 additions & 2 deletions gitlab/v4/objects.py
Expand Up @@ -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):
Expand Down
2 changes: 1 addition & 1 deletion tools/python_test_v4.py
Expand Up @@ -663,7 +663,7 @@
{
"title": "snip1",
"file_name": "foo.py",
"code": "initial content",
"content": "initial content",
"visibility": gitlab.v4.objects.VISIBILITY_PRIVATE,
}
)
Expand Down

0 comments on commit 5a10eb3

Please sign in to comment.