diff options
author | Nejc Habjan <nejc.habjan@siemens.com> | 2022-10-16 23:26:54 +0200 |
---|---|---|
committer | John Villalovos <john@sodarock.com> | 2022-10-18 00:04:38 -0700 |
commit | 88c2505b05dbcfa41b9e0458d4f2ec7dcc6f8169 (patch) | |
tree | d3333eb5b137cc188e2af86824986ee8154e38c4 | |
parent | 4eca9b9db8a05f379e1750a53f84f67e8710095a (diff) | |
download | gitlab-88c2505b05dbcfa41b9e0458d4f2ec7dcc6f8169.tar.gz |
refactor: migrate legacy EE tests to pytest
-rw-r--r-- | tests/functional/api/test_boards.py | 18 | ||||
-rw-r--r-- | tests/functional/api/test_epics.py | 31 | ||||
-rw-r--r-- | tests/functional/api/test_gitlab.py | 17 | ||||
-rw-r--r-- | tests/functional/api/test_groups.py | 11 | ||||
-rw-r--r-- | tests/functional/api/test_issues.py | 16 | ||||
-rw-r--r-- | tests/functional/api/test_merge_requests.py | 53 | ||||
-rw-r--r-- | tests/functional/api/test_push_rules.py | 20 | ||||
-rw-r--r-- | tests/functional/conftest.py | 7 | ||||
-rwxr-xr-x | tests/functional/ee-test.py | 165 |
9 files changed, 173 insertions, 165 deletions
diff --git a/tests/functional/api/test_boards.py b/tests/functional/api/test_boards.py new file mode 100644 index 0000000..24c62ca --- /dev/null +++ b/tests/functional/api/test_boards.py @@ -0,0 +1,18 @@ +def test_project_boards(project): + assert not project.boards.list() + + board = project.boards.create({"name": "testboard"}) + board = project.boards.get(board.id) + + project.boards.delete(board.id) + assert not project.boards.list() + + +def test_group_boards(group): + assert not group.boards.list() + + board = group.boards.create({"name": "testboard"}) + board = group.boards.get(board.id) + + group.boards.delete(board.id) + assert not group.boards.list() diff --git a/tests/functional/api/test_epics.py b/tests/functional/api/test_epics.py new file mode 100644 index 0000000..67b9d38 --- /dev/null +++ b/tests/functional/api/test_epics.py @@ -0,0 +1,31 @@ +import pytest + + +def test_epics(group): + epic = group.epics.create({"title": "Test epic"}) + epic.title = "Fixed title" + epic.labels = ["label1", "label2"] + epic.save() + + epic = group.epics.get(epic.iid) + assert epic.title == "Fixed title" + assert epic.labels == ["label1", "label2"] + assert group.epics.list() + + +@pytest.mark.xfail(reason="404 on issue.id") +def test_epic_issues(epic, issue): + assert not epic.issues.list() + + epic_issue = epic.issues.create({"issue_id": issue.id}) + assert epic.issues.list() + + epic_issue.delete() + assert not epic.issues.list() + + +def test_epic_notes(epic): + assert not epic.notes.list() + + epic.notes.create({"body": "Test note"}) + assert epic.notes.list() diff --git a/tests/functional/api/test_gitlab.py b/tests/functional/api/test_gitlab.py index d81f4d8..dbc001b 100644 --- a/tests/functional/api/test_gitlab.py +++ b/tests/functional/api/test_gitlab.py @@ -82,6 +82,23 @@ def test_sidekiq_compound_metrics(gl): assert "queues" in out +def test_geo_nodes(gl): + # Very basic geo nodes tests because we only have 1 node. + nodes = gl.geonodes.list() + assert isinstance(nodes, list) + + status = gl.geonodes.status() + assert isinstance(status, list) + + +def test_gitlab_license(gl): + license = gl.get_license() + assert "user_limit" in license + + with pytest.raises(gitlab.GitlabLicenseError, match="The license key is invalid."): + gl.set_license("dummy key") + + def test_gitlab_settings(gl): settings = gl.settings.get() settings.default_projects_limit = 42 diff --git a/tests/functional/api/test_groups.py b/tests/functional/api/test_groups.py index 7688273..e414eda 100644 --- a/tests/functional/api/test_groups.py +++ b/tests/functional/api/test_groups.py @@ -138,6 +138,17 @@ def test_group_labels(group): assert label not in group.labels.list() +@pytest.mark.xfail(reason="/ldap/groups endpoint is gone") +def test_group_ldap_links(gl, group): + ldap_cn = "common-name" + ldap_provider = "ldap-provider" + assert gl.ldapgroups.list() + + group.add_ldap_group_link(ldap_cn, 30, ldap_provider) + group.ldap_sync() + group.delete_ldap_group_link(ldap_cn) + + def test_group_notification_settings(group): settings = group.notificationsettings.get() settings.level = "disabled" diff --git a/tests/functional/api/test_issues.py b/tests/functional/api/test_issues.py index ba8b0e7..171a0d5 100644 --- a/tests/functional/api/test_issues.py +++ b/tests/functional/api/test_issues.py @@ -50,6 +50,22 @@ def test_issue_labels(project, issue): assert issue not in project.issues.list(labels="None") +def test_issue_links(project, issue): + linked_issue = project.issues.create({"title": "Linked issue"}) + source_issue, target_issue = issue.links.create( + {"target_project_id": project.id, "target_issue_iid": linked_issue.iid} + ) + assert source_issue == issue + assert target_issue == linked_issue + + links = issue.links.list() + assert links + + link_id = links[0].issue_link_id + issue.links.delete(link_id) + assert not issue.links.list() + + def test_issue_events(issue): events = issue.resourcelabelevents.list() assert isinstance(events, list) diff --git a/tests/functional/api/test_merge_requests.py b/tests/functional/api/test_merge_requests.py index 53533c0..18ed296 100644 --- a/tests/functional/api/test_merge_requests.py +++ b/tests/functional/api/test_merge_requests.py @@ -117,6 +117,59 @@ def test_merge_request_rebase(project): assert mr.rebase() +@pytest.mark.xfail(reason="project /approvers endpoint is gone") +def test_project_approvals(project): + mr = project.mergerequests.list()[0] + approval = project.approvals.get() + + reset_value = approval.reset_approvals_on_push + approval.reset_approvals_on_push = not reset_value + approval.save() + + approval = project.approvals.get() + assert reset_value != approval.reset_approvals_on_push + + project.approvals.set_approvers([1], []) + approval = project.approvals.get() + assert approval.approvers[0]["user"]["id"] == 1 + + approval = mr.approvals.get() + approval.approvals_required = 2 + approval.save() + approval = mr.approvals.get() + assert approval.approvals_required == 2 + + approval.approvals_required = 3 + approval.save() + approval = mr.approvals.get() + assert approval.approvals_required == 3 + + mr.approvals.set_approvers(1, [1], []) + approval = mr.approvals.get() + assert approval.approvers[0]["user"]["id"] == 1 + + +def test_project_merge_request_approval_rules(group, project): + approval_rules = project.approvalrules.list(get_all=True) + assert not approval_rules + + project.approvalrules.create( + {"name": "approval-rule", "approvals_required": 2, "group_ids": [group.id]} + ) + approval_rules = project.approvalrules.list(get_all=True) + assert len(approval_rules) == 1 + assert approval_rules[0].approvals_required == 2 + + approval_rules[0].save() + approval_rules = project.approvalrules.list(get_all=True) + assert len(approval_rules) == 1 + assert approval_rules[0].approvals_required == 2 + + approval_rules[0].delete() + ars = project.approvalrules.list(get_all=True) + assert len(ars) == 0 + + def test_merge_request_reset_approvals(gitlab_url, project, wait_for_sidekiq): bot = project.access_tokens.create({"name": "bot", "scopes": ["api"]}) bot_gitlab = gitlab.Gitlab(gitlab_url, private_token=bot.token) diff --git a/tests/functional/api/test_push_rules.py b/tests/functional/api/test_push_rules.py new file mode 100644 index 0000000..572b20d --- /dev/null +++ b/tests/functional/api/test_push_rules.py @@ -0,0 +1,20 @@ +import pytest + + +@pytest.mark.xfail(reason="need to relax RESTObject init for non-dict responses") +def test_project_push_rules(project): + push_rules = project.pushrules.get() + assert not push_rules + + push_rules = project.pushrules.create({"deny_delete_tag": True}) + assert push_rules.deny_delete_tag + + push_rules.deny_delete_tag = False + push_rules.save() + + push_rules = project.pushrules.get() + assert push_rules + assert not push_rules.deny_delete_tag + + push_rules.delete() + assert not push_rules diff --git a/tests/functional/conftest.py b/tests/functional/conftest.py index f494ac7..6acd9d5 100644 --- a/tests/functional/conftest.py +++ b/tests/functional/conftest.py @@ -530,6 +530,13 @@ def group_label(group): @pytest.fixture(scope="module") +def epic(group): + """Fixture for group epic API resource tests.""" + _id = uuid.uuid4().hex + return group.epics.create({"title": f"epic-{_id}", "description": f"Epic {_id}"}) + + +@pytest.fixture(scope="module") def variable(project): """Variable fixture for project variable API resource tests.""" _id = uuid.uuid4().hex diff --git a/tests/functional/ee-test.py b/tests/functional/ee-test.py index d11c29c..e69de29 100755 --- a/tests/functional/ee-test.py +++ b/tests/functional/ee-test.py @@ -1,165 +0,0 @@ -#!/usr/bin/env python - -import gitlab - -P1 = "root/project1" -P2 = "root/project2" -MR_P1 = 1 -I_P1 = 1 -I_P2 = 1 -EPIC_ISSUES = [4, 5] -EPIC_NOTES = ["rubeus", "hagrid"] -G1 = "group1" -LDAP_CN = "app1" -LDAP_PROVIDER = "ldapmain" - - -def start_log(message): - print(f"Testing {message}... ", end="") - - -def end_log(): - print("OK") - - -gl = gitlab.Gitlab.from_config("ee") -project1 = gl.projects.get(P1) -project2 = gl.projects.get(P2) -issue_p1 = project1.issues.get(I_P1) -issue_p2 = project2.issues.get(I_P2) -group1 = gl.groups.get(G1) -mr = project1.mergerequests.get(1) - -start_log("MR approvals") -approval = project1.approvals.get() -v = approval.reset_approvals_on_push -approval.reset_approvals_on_push = not v -approval.save() -approval = project1.approvals.get() -assert v != approval.reset_approvals_on_push -project1.approvals.set_approvers(1, [1], []) -approval = project1.approvals.get() -assert approval.approvers[0]["user"]["id"] == 1 - -approval = mr.approvals.get() -approval.approvals_required = 2 -approval.save() -approval = mr.approvals.get() -assert approval.approvals_required == 2 -approval.approvals_required = 3 -approval.save() -approval = mr.approvals.get() -assert approval.approvals_required == 3 -mr.approvals.set_approvers(1, [1], []) -approval = mr.approvals.get() -assert approval.approvers[0]["user"]["id"] == 1 - -ars = project1.approvalrules.list(get_all=True) -assert len(ars) == 0 -project1.approvalrules.create( - {"name": "approval-rule", "approvals_required": 1, "group_ids": [group1.id]} -) -ars = project1.approvalrules.list(get_all=True) -assert len(ars) == 1 -assert ars[0].approvals_required == 2 -ars[0].save() -ars = project1.approvalrules.list(get_all=True) -assert len(ars) == 1 -assert ars[0].approvals_required == 2 -ars[0].delete() -ars = project1.approvalrules.list(get_all=True) -assert len(ars) == 0 -end_log() - -start_log("geo nodes") -# very basic tests because we only have 1 node... -nodes = gl.geonodes.list() -status = gl.geonodes.status() -end_log() - -start_log("issue links") -# bit of cleanup just in case -for link in issue_p1.links.list(): - issue_p1.links.delete(link.issue_link_id) - -src, dst = issue_p1.links.create({"target_project_id": P2, "target_issue_iid": I_P2}) -links = issue_p1.links.list() -link_id = links[0].issue_link_id -issue_p1.links.delete(link_id) -end_log() - -start_log("LDAP links") -# bit of cleanup just in case -if hasattr(group1, "ldap_group_links"): - for link in group1.ldap_group_links: - group1.delete_ldap_group_link(link["cn"], link["provider"]) -assert gl.ldapgroups.list() -group1.add_ldap_group_link(LDAP_CN, 30, LDAP_PROVIDER) -group1.ldap_sync() -group1.delete_ldap_group_link(LDAP_CN) -end_log() - -start_log("boards") -# bit of cleanup just in case -for board in project1.boards.list(): - if board.name == "testboard": - board.delete() -board = project1.boards.create({"name": "testboard"}) -board = project1.boards.get(board.id) -project1.boards.delete(board.id) - -for board in group1.boards.list(): - if board.name == "testboard": - board.delete() -board = group1.boards.create({"name": "testboard"}) -board = group1.boards.get(board.id) -group1.boards.delete(board.id) -end_log() - -start_log("push rules") -pr = project1.pushrules.get() -if pr: - pr.delete() -pr = project1.pushrules.create({"deny_delete_tag": True}) -pr.deny_delete_tag = False -pr.save() -pr = project1.pushrules.get() -assert pr is not None -assert pr.deny_delete_tag is False -pr.delete() -end_log() - -start_log("license") -license = gl.get_license() -assert "user_limit" in license -try: - gl.set_license("dummykey") -except Exception as e: - assert "The license key is invalid." in e.error_message -end_log() - -start_log("epics") -epic = group1.epics.create({"title": "Test epic"}) -epic.title = "Fixed title" -epic.labels = ["label1", "label2"] -epic.save() -epic = group1.epics.get(epic.iid) -assert epic.title == "Fixed title" -assert len(group1.epics.list()) - -# issues -assert not epic.issues.list() -for i in EPIC_ISSUES: - epic.issues.create({"issue_id": i}) -assert len(EPIC_ISSUES) == len(epic.issues.list()) -for ei in epic.issues.list(): - ei.delete() - -# epic notes -assert not epic.notes.list() -for i in EPIC_NOTES: - epic.notes.create({"body": i}) -assert len(EPIC_NOTES == len(epic.notes.list())) - -epic.delete() -end_log() |