Skip to content

Commit 88c2505

Browse files
nejchJohnVillalovos
authored andcommitted
refactor: migrate legacy EE tests to pytest
1 parent 4eca9b9 commit 88c2505

9 files changed

+173
-165
lines changed

tests/functional/api/test_boards.py

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
def test_project_boards(project):
2+
assert not project.boards.list()
3+
4+
board = project.boards.create({"name": "testboard"})
5+
board = project.boards.get(board.id)
6+
7+
project.boards.delete(board.id)
8+
assert not project.boards.list()
9+
10+
11+
def test_group_boards(group):
12+
assert not group.boards.list()
13+
14+
board = group.boards.create({"name": "testboard"})
15+
board = group.boards.get(board.id)
16+
17+
group.boards.delete(board.id)
18+
assert not group.boards.list()

tests/functional/api/test_epics.py

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import pytest
2+
3+
4+
def test_epics(group):
5+
epic = group.epics.create({"title": "Test epic"})
6+
epic.title = "Fixed title"
7+
epic.labels = ["label1", "label2"]
8+
epic.save()
9+
10+
epic = group.epics.get(epic.iid)
11+
assert epic.title == "Fixed title"
12+
assert epic.labels == ["label1", "label2"]
13+
assert group.epics.list()
14+
15+
16+
@pytest.mark.xfail(reason="404 on issue.id")
17+
def test_epic_issues(epic, issue):
18+
assert not epic.issues.list()
19+
20+
epic_issue = epic.issues.create({"issue_id": issue.id})
21+
assert epic.issues.list()
22+
23+
epic_issue.delete()
24+
assert not epic.issues.list()
25+
26+
27+
def test_epic_notes(epic):
28+
assert not epic.notes.list()
29+
30+
epic.notes.create({"body": "Test note"})
31+
assert epic.notes.list()

tests/functional/api/test_gitlab.py

+17
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,23 @@ def test_sidekiq_compound_metrics(gl):
8282
assert "queues" in out
8383

8484

85+
def test_geo_nodes(gl):
86+
# Very basic geo nodes tests because we only have 1 node.
87+
nodes = gl.geonodes.list()
88+
assert isinstance(nodes, list)
89+
90+
status = gl.geonodes.status()
91+
assert isinstance(status, list)
92+
93+
94+
def test_gitlab_license(gl):
95+
license = gl.get_license()
96+
assert "user_limit" in license
97+
98+
with pytest.raises(gitlab.GitlabLicenseError, match="The license key is invalid."):
99+
gl.set_license("dummy key")
100+
101+
85102
def test_gitlab_settings(gl):
86103
settings = gl.settings.get()
87104
settings.default_projects_limit = 42

tests/functional/api/test_groups.py

+11
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,17 @@ def test_group_labels(group):
138138
assert label not in group.labels.list()
139139

140140

141+
@pytest.mark.xfail(reason="/ldap/groups endpoint is gone")
142+
def test_group_ldap_links(gl, group):
143+
ldap_cn = "common-name"
144+
ldap_provider = "ldap-provider"
145+
assert gl.ldapgroups.list()
146+
147+
group.add_ldap_group_link(ldap_cn, 30, ldap_provider)
148+
group.ldap_sync()
149+
group.delete_ldap_group_link(ldap_cn)
150+
151+
141152
def test_group_notification_settings(group):
142153
settings = group.notificationsettings.get()
143154
settings.level = "disabled"

tests/functional/api/test_issues.py

+16
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,22 @@ def test_issue_labels(project, issue):
5050
assert issue not in project.issues.list(labels="None")
5151

5252

53+
def test_issue_links(project, issue):
54+
linked_issue = project.issues.create({"title": "Linked issue"})
55+
source_issue, target_issue = issue.links.create(
56+
{"target_project_id": project.id, "target_issue_iid": linked_issue.iid}
57+
)
58+
assert source_issue == issue
59+
assert target_issue == linked_issue
60+
61+
links = issue.links.list()
62+
assert links
63+
64+
link_id = links[0].issue_link_id
65+
issue.links.delete(link_id)
66+
assert not issue.links.list()
67+
68+
5369
def test_issue_events(issue):
5470
events = issue.resourcelabelevents.list()
5571
assert isinstance(events, list)

tests/functional/api/test_merge_requests.py

+53
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,59 @@ def test_merge_request_rebase(project):
117117
assert mr.rebase()
118118

119119

120+
@pytest.mark.xfail(reason="project /approvers endpoint is gone")
121+
def test_project_approvals(project):
122+
mr = project.mergerequests.list()[0]
123+
approval = project.approvals.get()
124+
125+
reset_value = approval.reset_approvals_on_push
126+
approval.reset_approvals_on_push = not reset_value
127+
approval.save()
128+
129+
approval = project.approvals.get()
130+
assert reset_value != approval.reset_approvals_on_push
131+
132+
project.approvals.set_approvers([1], [])
133+
approval = project.approvals.get()
134+
assert approval.approvers[0]["user"]["id"] == 1
135+
136+
approval = mr.approvals.get()
137+
approval.approvals_required = 2
138+
approval.save()
139+
approval = mr.approvals.get()
140+
assert approval.approvals_required == 2
141+
142+
approval.approvals_required = 3
143+
approval.save()
144+
approval = mr.approvals.get()
145+
assert approval.approvals_required == 3
146+
147+
mr.approvals.set_approvers(1, [1], [])
148+
approval = mr.approvals.get()
149+
assert approval.approvers[0]["user"]["id"] == 1
150+
151+
152+
def test_project_merge_request_approval_rules(group, project):
153+
approval_rules = project.approvalrules.list(get_all=True)
154+
assert not approval_rules
155+
156+
project.approvalrules.create(
157+
{"name": "approval-rule", "approvals_required": 2, "group_ids": [group.id]}
158+
)
159+
approval_rules = project.approvalrules.list(get_all=True)
160+
assert len(approval_rules) == 1
161+
assert approval_rules[0].approvals_required == 2
162+
163+
approval_rules[0].save()
164+
approval_rules = project.approvalrules.list(get_all=True)
165+
assert len(approval_rules) == 1
166+
assert approval_rules[0].approvals_required == 2
167+
168+
approval_rules[0].delete()
169+
ars = project.approvalrules.list(get_all=True)
170+
assert len(ars) == 0
171+
172+
120173
def test_merge_request_reset_approvals(gitlab_url, project, wait_for_sidekiq):
121174
bot = project.access_tokens.create({"name": "bot", "scopes": ["api"]})
122175
bot_gitlab = gitlab.Gitlab(gitlab_url, private_token=bot.token)
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import pytest
2+
3+
4+
@pytest.mark.xfail(reason="need to relax RESTObject init for non-dict responses")
5+
def test_project_push_rules(project):
6+
push_rules = project.pushrules.get()
7+
assert not push_rules
8+
9+
push_rules = project.pushrules.create({"deny_delete_tag": True})
10+
assert push_rules.deny_delete_tag
11+
12+
push_rules.deny_delete_tag = False
13+
push_rules.save()
14+
15+
push_rules = project.pushrules.get()
16+
assert push_rules
17+
assert not push_rules.deny_delete_tag
18+
19+
push_rules.delete()
20+
assert not push_rules

tests/functional/conftest.py

+7
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,13 @@ def group_label(group):
529529
return group.labels.create(data)
530530

531531

532+
@pytest.fixture(scope="module")
533+
def epic(group):
534+
"""Fixture for group epic API resource tests."""
535+
_id = uuid.uuid4().hex
536+
return group.epics.create({"title": f"epic-{_id}", "description": f"Epic {_id}"})
537+
538+
532539
@pytest.fixture(scope="module")
533540
def variable(project):
534541
"""Variable fixture for project variable API resource tests."""

tests/functional/ee-test.py

-165
Original file line numberDiff line numberDiff line change
@@ -1,165 +0,0 @@
1-
#!/usr/bin/env python
2-
3-
import gitlab
4-
5-
P1 = "root/project1"
6-
P2 = "root/project2"
7-
MR_P1 = 1
8-
I_P1 = 1
9-
I_P2 = 1
10-
EPIC_ISSUES = [4, 5]
11-
EPIC_NOTES = ["rubeus", "hagrid"]
12-
G1 = "group1"
13-
LDAP_CN = "app1"
14-
LDAP_PROVIDER = "ldapmain"
15-
16-
17-
def start_log(message):
18-
print(f"Testing {message}... ", end="")
19-
20-
21-
def end_log():
22-
print("OK")
23-
24-
25-
gl = gitlab.Gitlab.from_config("ee")
26-
project1 = gl.projects.get(P1)
27-
project2 = gl.projects.get(P2)
28-
issue_p1 = project1.issues.get(I_P1)
29-
issue_p2 = project2.issues.get(I_P2)
30-
group1 = gl.groups.get(G1)
31-
mr = project1.mergerequests.get(1)
32-
33-
start_log("MR approvals")
34-
approval = project1.approvals.get()
35-
v = approval.reset_approvals_on_push
36-
approval.reset_approvals_on_push = not v
37-
approval.save()
38-
approval = project1.approvals.get()
39-
assert v != approval.reset_approvals_on_push
40-
project1.approvals.set_approvers(1, [1], [])
41-
approval = project1.approvals.get()
42-
assert approval.approvers[0]["user"]["id"] == 1
43-
44-
approval = mr.approvals.get()
45-
approval.approvals_required = 2
46-
approval.save()
47-
approval = mr.approvals.get()
48-
assert approval.approvals_required == 2
49-
approval.approvals_required = 3
50-
approval.save()
51-
approval = mr.approvals.get()
52-
assert approval.approvals_required == 3
53-
mr.approvals.set_approvers(1, [1], [])
54-
approval = mr.approvals.get()
55-
assert approval.approvers[0]["user"]["id"] == 1
56-
57-
ars = project1.approvalrules.list(get_all=True)
58-
assert len(ars) == 0
59-
project1.approvalrules.create(
60-
{"name": "approval-rule", "approvals_required": 1, "group_ids": [group1.id]}
61-
)
62-
ars = project1.approvalrules.list(get_all=True)
63-
assert len(ars) == 1
64-
assert ars[0].approvals_required == 2
65-
ars[0].save()
66-
ars = project1.approvalrules.list(get_all=True)
67-
assert len(ars) == 1
68-
assert ars[0].approvals_required == 2
69-
ars[0].delete()
70-
ars = project1.approvalrules.list(get_all=True)
71-
assert len(ars) == 0
72-
end_log()
73-
74-
start_log("geo nodes")
75-
# very basic tests because we only have 1 node...
76-
nodes = gl.geonodes.list()
77-
status = gl.geonodes.status()
78-
end_log()
79-
80-
start_log("issue links")
81-
# bit of cleanup just in case
82-
for link in issue_p1.links.list():
83-
issue_p1.links.delete(link.issue_link_id)
84-
85-
src, dst = issue_p1.links.create({"target_project_id": P2, "target_issue_iid": I_P2})
86-
links = issue_p1.links.list()
87-
link_id = links[0].issue_link_id
88-
issue_p1.links.delete(link_id)
89-
end_log()
90-
91-
start_log("LDAP links")
92-
# bit of cleanup just in case
93-
if hasattr(group1, "ldap_group_links"):
94-
for link in group1.ldap_group_links:
95-
group1.delete_ldap_group_link(link["cn"], link["provider"])
96-
assert gl.ldapgroups.list()
97-
group1.add_ldap_group_link(LDAP_CN, 30, LDAP_PROVIDER)
98-
group1.ldap_sync()
99-
group1.delete_ldap_group_link(LDAP_CN)
100-
end_log()
101-
102-
start_log("boards")
103-
# bit of cleanup just in case
104-
for board in project1.boards.list():
105-
if board.name == "testboard":
106-
board.delete()
107-
board = project1.boards.create({"name": "testboard"})
108-
board = project1.boards.get(board.id)
109-
project1.boards.delete(board.id)
110-
111-
for board in group1.boards.list():
112-
if board.name == "testboard":
113-
board.delete()
114-
board = group1.boards.create({"name": "testboard"})
115-
board = group1.boards.get(board.id)
116-
group1.boards.delete(board.id)
117-
end_log()
118-
119-
start_log("push rules")
120-
pr = project1.pushrules.get()
121-
if pr:
122-
pr.delete()
123-
pr = project1.pushrules.create({"deny_delete_tag": True})
124-
pr.deny_delete_tag = False
125-
pr.save()
126-
pr = project1.pushrules.get()
127-
assert pr is not None
128-
assert pr.deny_delete_tag is False
129-
pr.delete()
130-
end_log()
131-
132-
start_log("license")
133-
license = gl.get_license()
134-
assert "user_limit" in license
135-
try:
136-
gl.set_license("dummykey")
137-
except Exception as e:
138-
assert "The license key is invalid." in e.error_message
139-
end_log()
140-
141-
start_log("epics")
142-
epic = group1.epics.create({"title": "Test epic"})
143-
epic.title = "Fixed title"
144-
epic.labels = ["label1", "label2"]
145-
epic.save()
146-
epic = group1.epics.get(epic.iid)
147-
assert epic.title == "Fixed title"
148-
assert len(group1.epics.list())
149-
150-
# issues
151-
assert not epic.issues.list()
152-
for i in EPIC_ISSUES:
153-
epic.issues.create({"issue_id": i})
154-
assert len(EPIC_ISSUES) == len(epic.issues.list())
155-
for ei in epic.issues.list():
156-
ei.delete()
157-
158-
# epic notes
159-
assert not epic.notes.list()
160-
for i in EPIC_NOTES:
161-
epic.notes.create({"body": i})
162-
assert len(EPIC_NOTES == len(epic.notes.list()))
163-
164-
epic.delete()
165-
end_log()

0 commit comments

Comments
 (0)