diff --git a/gitlab/tests/objects/test_badges.py b/gitlab/tests/objects/test_badges.py new file mode 100644 index 000000000..c9281eadb --- /dev/null +++ b/gitlab/tests/objects/test_badges.py @@ -0,0 +1,210 @@ +""" +GitLab API: https://docs.gitlab.com/ee/api/project_badges.html +GitLab API: https://docs.gitlab.com/ee/api/group_badges.html +""" +import re + +import pytest +import responses + +from gitlab.v4.objects import ProjectBadge, GroupBadge + +link_url = ( + "http://example.com/ci_status.svg?project=example-org/example-project&ref=master" +) +image_url = "https://example.io/my/badge" + +rendered_link_url = ( + "http://example.com/ci_status.svg?project=example-org/example-project&ref=master" +) +rendered_image_url = "https://example.io/my/badge" + +new_badge = { + "link_url": link_url, + "image_url": image_url, +} + +badge_content = { + "name": "Coverage", + "id": 1, + "link_url": link_url, + "image_url": image_url, + "rendered_link_url": rendered_image_url, + "rendered_image_url": rendered_image_url, +} + +preview_badge_content = { + "link_url": link_url, + "image_url": image_url, + "rendered_link_url": rendered_link_url, + "rendered_image_url": rendered_image_url, +} + + +@pytest.fixture() +def resp_get_badge(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url=re.compile(r"http://localhost/api/v4/(projects|groups)/1/badges/1"), + json=badge_content, + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture() +def resp_list_badges(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url=re.compile(r"http://localhost/api/v4/(projects|groups)/1/badges"), + json=[badge_content], + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture() +def resp_create_badge(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.POST, + url=re.compile(r"http://localhost/api/v4/(projects|groups)/1/badges"), + json=badge_content, + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture() +def resp_update_badge(): + updated_content = dict(badge_content) + updated_content["link_url"] = "http://link_url" + + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.PUT, + url=re.compile(r"http://localhost/api/v4/(projects|groups)/1/badges/1"), + json=updated_content, + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture() +def resp_delete_badge(no_content): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.DELETE, + url=re.compile(r"http://localhost/api/v4/(projects|groups)/1/badges/1"), + json=no_content, + content_type="application/json", + status=204, + ) + yield rsps + + +@pytest.fixture() +def resp_preview_badge(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url=re.compile( + r"http://localhost/api/v4/(projects|groups)/1/badges/render" + ), + json=preview_badge_content, + content_type="application/json", + status=200, + ) + yield rsps + + +def test_list_project_badges(project, resp_list_badges): + badges = project.badges.list() + assert isinstance(badges, list) + assert isinstance(badges[0], ProjectBadge) + + +def test_list_group_badges(group, resp_list_badges): + badges = group.badges.list() + assert isinstance(badges, list) + assert isinstance(badges[0], GroupBadge) + + +def test_get_project_badge(project, resp_get_badge): + badge = project.badges.get(1) + assert isinstance(badge, ProjectBadge) + assert badge.name == "Coverage" + assert badge.id == 1 + + +def test_get_group_badge(group, resp_get_badge): + badge = group.badges.get(1) + assert isinstance(badge, GroupBadge) + assert badge.name == "Coverage" + assert badge.id == 1 + + +def test_delete_project_badge(project, resp_delete_badge): + badge = project.badges.get(1, lazy=True) + badge.delete() + + +def test_delete_group_badge(group, resp_delete_badge): + badge = group.badges.get(1, lazy=True) + badge.delete() + + +def test_create_project_badge(project, resp_create_badge): + badge = project.badges.create(new_badge) + assert isinstance(badge, ProjectBadge) + assert badge.image_url == image_url + + +def test_create_group_badge(group, resp_create_badge): + badge = group.badges.create(new_badge) + assert isinstance(badge, GroupBadge) + assert badge.image_url == image_url + + +def test_preview_project_badge(project, resp_preview_badge): + output = project.badges.render( + link_url=link_url, + image_url=image_url, + ) + assert isinstance(output, dict) + assert "rendered_link_url" in output + assert "rendered_image_url" in output + assert output["link_url"] == output["rendered_link_url"] + assert output["image_url"] == output["rendered_image_url"] + + +def test_preview_group_badge(group, resp_preview_badge): + output = group.badges.render( + link_url=link_url, + image_url=image_url, + ) + assert isinstance(output, dict) + assert "rendered_link_url" in output + assert "rendered_image_url" in output + assert output["link_url"] == output["rendered_link_url"] + assert output["image_url"] == output["rendered_image_url"] + + +def test_update_project_badge(project, resp_update_badge): + badge = project.badges.get(1, lazy=True) + badge.link_url = "http://link_url" + badge.save() + assert badge.link_url == "http://link_url" + + +def test_update_group_badge(group, resp_update_badge): + badge = group.badges.get(1, lazy=True) + badge.link_url = "http://link_url" + badge.save() + assert badge.link_url == "http://link_url"