Skip to content

Commit

Permalink
refactor: migrate legacy EE tests to pytest
Browse files Browse the repository at this point in the history
  • Loading branch information
nejch authored and JohnVillalovos committed Oct 18, 2022
1 parent 4eca9b9 commit 88c2505
Show file tree
Hide file tree
Showing 9 changed files with 173 additions and 165 deletions.
18 changes: 18 additions & 0 deletions 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()
31 changes: 31 additions & 0 deletions 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()
17 changes: 17 additions & 0 deletions tests/functional/api/test_gitlab.py
Expand Up @@ -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
Expand Down
11 changes: 11 additions & 0 deletions tests/functional/api/test_groups.py
Expand Up @@ -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"
Expand Down
16 changes: 16 additions & 0 deletions tests/functional/api/test_issues.py
Expand Up @@ -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)
Expand Down
53 changes: 53 additions & 0 deletions tests/functional/api/test_merge_requests.py
Expand Up @@ -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)
Expand Down
20 changes: 20 additions & 0 deletions 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
7 changes: 7 additions & 0 deletions tests/functional/conftest.py
Expand Up @@ -529,6 +529,13 @@ def group_label(group):
return group.labels.create(data)


@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."""
Expand Down
165 changes: 0 additions & 165 deletions 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()

0 comments on commit 88c2505

Please sign in to comment.