summaryrefslogtreecommitdiff
path: root/gitlab/tests
diff options
context:
space:
mode:
authorNejc Habjan <hab.nejc@gmail.com>2021-02-21 12:01:33 +0100
committerNejc Habjan <hab.nejc@gmail.com>2021-02-21 12:01:33 +0100
commit28d751811ffda45ff0b1c35e0599b655f3a5a68b (patch)
tree62d6990b1037fdc94be07469e84926b2a204171d /gitlab/tests
parent649385cc03065d023d74399237331d1ea64f766f (diff)
downloadgitlab-28d751811ffda45ff0b1c35e0599b655f3a5a68b.tar.gz
feat(objects): add Release Links API support
Diffstat (limited to 'gitlab/tests')
-rw-r--r--gitlab/tests/conftest.py10
-rw-r--r--gitlab/tests/objects/test_releases.py131
2 files changed, 141 insertions, 0 deletions
diff --git a/gitlab/tests/conftest.py b/gitlab/tests/conftest.py
index 98d97ae..fc8312f 100644
--- a/gitlab/tests/conftest.py
+++ b/gitlab/tests/conftest.py
@@ -38,6 +38,11 @@ def default_config(tmpdir):
@pytest.fixture
+def tag_name():
+ return "v1.0.0"
+
+
+@pytest.fixture
def group(gl):
return gl.groups.get(1, lazy=True)
@@ -48,5 +53,10 @@ def project(gl):
@pytest.fixture
+def release(project, tag_name):
+ return project.releases.get(tag_name, lazy=True)
+
+
+@pytest.fixture
def user(gl):
return gl.users.get(1, lazy=True)
diff --git a/gitlab/tests/objects/test_releases.py b/gitlab/tests/objects/test_releases.py
new file mode 100644
index 0000000..6c38a7c
--- /dev/null
+++ b/gitlab/tests/objects/test_releases.py
@@ -0,0 +1,131 @@
+"""
+GitLab API:
+https://docs.gitlab.com/ee/api/releases/index.html
+https://docs.gitlab.com/ee/api/releases/links.html
+"""
+import re
+
+import pytest
+import responses
+
+from gitlab.v4.objects import ProjectReleaseLink
+
+encoded_tag_name = "v1%2E0%2E0"
+link_name = "hello-world"
+link_url = "https://gitlab.example.com/group/hello/-/jobs/688/artifacts/raw/bin/hello-darwin-amd64"
+direct_url = f"https://gitlab.example.com/group/hello/-/releases/{encoded_tag_name}/downloads/hello-world"
+new_link_type = "package"
+link_content = {
+ "id": 2,
+ "name": link_name,
+ "url": link_url,
+ "direct_asset_url": direct_url,
+ "external": False,
+ "link_type": "other",
+}
+
+links_url = re.compile(
+ rf"http://localhost/api/v4/projects/1/releases/{encoded_tag_name}/assets/links"
+)
+link_id_url = re.compile(
+ rf"http://localhost/api/v4/projects/1/releases/{encoded_tag_name}/assets/links/1"
+)
+
+
+@pytest.fixture
+def resp_list_links():
+ with responses.RequestsMock() as rsps:
+ rsps.add(
+ method=responses.GET,
+ url=links_url,
+ json=[link_content],
+ content_type="application/json",
+ status=200,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_get_link():
+ with responses.RequestsMock() as rsps:
+ rsps.add(
+ method=responses.GET,
+ url=link_id_url,
+ json=link_content,
+ content_type="application/json",
+ status=200,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_create_link():
+ with responses.RequestsMock() as rsps:
+ rsps.add(
+ method=responses.POST,
+ url=links_url,
+ json=link_content,
+ content_type="application/json",
+ status=200,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_update_link():
+ updated_content = dict(link_content)
+ updated_content["link_type"] = new_link_type
+
+ with responses.RequestsMock() as rsps:
+ rsps.add(
+ method=responses.PUT,
+ url=link_id_url,
+ json=updated_content,
+ content_type="application/json",
+ status=200,
+ )
+ yield rsps
+
+
+@pytest.fixture
+def resp_delete_link(no_content):
+ with responses.RequestsMock() as rsps:
+ rsps.add(
+ method=responses.DELETE,
+ url=link_id_url,
+ json=link_content,
+ content_type="application/json",
+ status=204,
+ )
+ yield rsps
+
+
+def test_list_release_links(release, resp_list_links):
+ links = release.links.list()
+ assert isinstance(links, list)
+ assert isinstance(links[0], ProjectReleaseLink)
+ assert links[0].url == link_url
+
+
+def test_get_release_link(release, resp_get_link):
+ link = release.links.get(1)
+ assert isinstance(link, ProjectReleaseLink)
+ assert link.url == link_url
+
+
+def test_create_release_link(release, resp_create_link):
+ link = release.links.create({"url": link_url, "name": link_name})
+ assert isinstance(link, ProjectReleaseLink)
+ assert link.url == link_url
+
+
+def test_update_release_link(release, resp_update_link):
+ link = release.links.get(1, lazy=True)
+ link.link_type = new_link_type
+ link.save()
+ assert link.link_type == new_link_type
+
+
+def test_delete_release_link(release, resp_delete_link):
+ link = release.links.get(1, lazy=True)
+ link.delete()