diff options
author | Nejc Habjan <hab.nejc@gmail.com> | 2021-02-21 12:01:33 +0100 |
---|---|---|
committer | Nejc Habjan <hab.nejc@gmail.com> | 2021-02-21 12:01:33 +0100 |
commit | 28d751811ffda45ff0b1c35e0599b655f3a5a68b (patch) | |
tree | 62d6990b1037fdc94be07469e84926b2a204171d /gitlab/tests | |
parent | 649385cc03065d023d74399237331d1ea64f766f (diff) | |
download | gitlab-28d751811ffda45ff0b1c35e0599b655f3a5a68b.tar.gz |
feat(objects): add Release Links API support
Diffstat (limited to 'gitlab/tests')
-rw-r--r-- | gitlab/tests/conftest.py | 10 | ||||
-rw-r--r-- | gitlab/tests/objects/test_releases.py | 131 |
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() |