Skip to content

Commit 68a4162

Browse files
authored
Merge pull request #1205 from python-gitlab/refactor/split-functional-tests
refactor(tests): split functional tests
2 parents 2002098 + 65ce026 commit 68a4162

15 files changed

+1504
-1164
lines changed

tools/functional/api/test_clusters.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
def test_project_clusters(project):
2+
project.clusters.create(
3+
{
4+
"name": "cluster1",
5+
"platform_kubernetes_attributes": {
6+
"api_url": "http://url",
7+
"token": "tokenval",
8+
},
9+
}
10+
)
11+
clusters = project.clusters.list()
12+
assert len(clusters) == 1
13+
14+
cluster = clusters[0]
15+
cluster.platform_kubernetes_attributes = {"api_url": "http://newurl"}
16+
cluster.save()
17+
18+
cluster = project.clusters.list()[0]
19+
assert cluster.platform_kubernetes["api_url"] == "http://newurl"
20+
21+
cluster.delete()
22+
assert len(project.clusters.list()) == 0
23+
24+
25+
def test_group_clusters(group):
26+
group.clusters.create(
27+
{
28+
"name": "cluster1",
29+
"platform_kubernetes_attributes": {
30+
"api_url": "http://url",
31+
"token": "tokenval",
32+
},
33+
}
34+
)
35+
clusters = group.clusters.list()
36+
assert len(clusters) == 1
37+
38+
cluster = clusters[0]
39+
cluster.platform_kubernetes_attributes = {"api_url": "http://newurl"}
40+
cluster.save()
41+
42+
cluster = group.clusters.list()[0]
43+
assert cluster.platform_kubernetes["api_url"] == "http://newurl"
44+
45+
cluster.delete()
46+
assert len(group.clusters.list()) == 0
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
def test_current_user_email(gl):
2+
gl.auth()
3+
mail = gl.user.emails.create({"email": "current@user.com"})
4+
assert len(gl.user.emails.list()) == 1
5+
6+
mail.delete()
7+
assert len(gl.user.emails.list()) == 0
8+
9+
10+
def test_current_user_gpg_keys(gl, GPG_KEY):
11+
gl.auth()
12+
gkey = gl.user.gpgkeys.create({"key": GPG_KEY})
13+
assert len(gl.user.gpgkeys.list()) == 1
14+
15+
# Seems broken on the gitlab side
16+
gkey = gl.user.gpgkeys.get(gkey.id)
17+
gkey.delete()
18+
assert len(gl.user.gpgkeys.list()) == 0
19+
20+
21+
def test_current_user_ssh_keys(gl, SSH_KEY):
22+
gl.auth()
23+
key = gl.user.keys.create({"title": "testkey", "key": SSH_KEY})
24+
assert len(gl.user.keys.list()) == 1
25+
26+
key.delete()
27+
assert len(gl.user.keys.list()) == 0
28+
29+
30+
def test_current_user_status(gl):
31+
gl.auth()
32+
message = "Test"
33+
emoji = "thumbsup"
34+
status = gl.user.status.get()
35+
36+
status.message = message
37+
status.emoji = emoji
38+
status.save()
39+
40+
new_status = gl.user.status.get()
41+
assert new_status.message == message
42+
assert new_status.emoji == emoji
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
def test_project_deploy_keys(gl, project, DEPLOY_KEY):
2+
deploy_key = project.keys.create({"title": "foo@bar", "key": DEPLOY_KEY})
3+
project_keys = list(project.keys.list())
4+
assert len(project_keys) == 1
5+
6+
project2 = gl.projects.create({"name": "deploy-key-project"})
7+
project2.keys.enable(deploy_key.id)
8+
assert len(project2.keys.list()) == 1
9+
10+
project2.keys.delete(deploy_key.id)
11+
assert len(project2.keys.list()) == 0
12+
project2.delete()
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
def test_project_deploy_tokens(gl, project):
2+
deploy_token = project.deploytokens.create(
3+
{
4+
"name": "foo",
5+
"username": "bar",
6+
"expires_at": "2022-01-01",
7+
"scopes": ["read_registry"],
8+
}
9+
)
10+
assert len(project.deploytokens.list()) == 1
11+
assert gl.deploytokens.list() == project.deploytokens.list()
12+
13+
assert project.deploytokens.list()[0].name == "foo"
14+
assert project.deploytokens.list()[0].expires_at == "2022-01-01T00:00:00.000Z"
15+
assert project.deploytokens.list()[0].scopes == ["read_registry"]
16+
assert project.deploytokens.list()[0].username == "bar"
17+
18+
deploy_token.delete()
19+
assert len(project.deploytokens.list()) == 0
20+
assert len(gl.deploytokens.list()) == 0
21+
22+
23+
def test_group_deploy_tokens(gl, group):
24+
deploy_token = group.deploytokens.create(
25+
{
26+
"name": "foo",
27+
"scopes": ["read_registry"],
28+
}
29+
)
30+
31+
assert len(group.deploytokens.list()) == 1
32+
assert gl.deploytokens.list() == group.deploytokens.list()
33+
34+
deploy_token.delete()
35+
assert len(group.deploytokens.list()) == 0
36+
assert len(gl.deploytokens.list()) == 0

tools/functional/api/test_gitlab.py

Lines changed: 181 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,183 @@
1-
"""
2-
Temporary module to run legacy tests as a single pytest test case
3-
as they're all plain asserts at module level.
4-
"""
1+
import pytest
52

3+
import gitlab
64

7-
def test_api_v4(gl):
8-
from tools.functional import python_test_v4
5+
6+
def test_auth_from_config(gl, temp_dir):
7+
"""Test token authentication from config file"""
8+
test_gitlab = gitlab.Gitlab.from_config(
9+
config_files=[temp_dir / "python-gitlab.cfg"]
10+
)
11+
test_gitlab.auth()
12+
assert isinstance(test_gitlab.user, gitlab.v4.objects.CurrentUser)
13+
14+
15+
def test_broadcast_messages(gl):
16+
msg = gl.broadcastmessages.create({"message": "this is the message"})
17+
msg.color = "#444444"
18+
msg.save()
19+
msg_id = msg.id
20+
21+
msg = gl.broadcastmessages.list(all=True)[0]
22+
assert msg.color == "#444444"
23+
24+
msg = gl.broadcastmessages.get(msg_id)
25+
assert msg.color == "#444444"
26+
27+
msg.delete()
28+
assert len(gl.broadcastmessages.list()) == 0
29+
30+
31+
def test_markdown(gl):
32+
html = gl.markdown("foo")
33+
assert "foo" in html
34+
35+
36+
def test_lint(gl):
37+
success, errors = gl.lint("Invalid")
38+
assert success is False
39+
assert errors
40+
41+
42+
def test_sidekiq_queue_metrics(gl):
43+
out = gl.sidekiq.queue_metrics()
44+
assert isinstance(out, dict)
45+
assert "pages" in out["queues"]
46+
47+
48+
def test_sidekiq_process_metrics(gl):
49+
out = gl.sidekiq.process_metrics()
50+
assert isinstance(out, dict)
51+
assert "hostname" in out["processes"][0]
52+
53+
54+
def test_sidekiq_job_stats(gl):
55+
out = gl.sidekiq.job_stats()
56+
assert isinstance(out, dict)
57+
assert "processed" in out["jobs"]
58+
59+
60+
def test_sidekiq_compound_metrics(gl):
61+
out = gl.sidekiq.compound_metrics()
62+
assert isinstance(out, dict)
63+
assert "jobs" in out
64+
assert "processes" in out
65+
assert "queues" in out
66+
67+
68+
def test_gitlab_settings(gl):
69+
settings = gl.settings.get()
70+
settings.default_projects_limit = 42
71+
settings.save()
72+
settings = gl.settings.get()
73+
assert settings.default_projects_limit == 42
74+
75+
76+
def test_template_dockerfile(gl):
77+
assert gl.dockerfiles.list()
78+
79+
dockerfile = gl.dockerfiles.get("Node")
80+
assert dockerfile.content is not None
81+
82+
83+
def test_template_gitignore(gl):
84+
assert gl.gitignores.list()
85+
gitignore = gl.gitignores.get("Node")
86+
assert gitignore.content is not None
87+
88+
89+
def test_template_gitlabciyml(gl):
90+
assert gl.gitlabciymls.list()
91+
gitlabciyml = gl.gitlabciymls.get("Nodejs")
92+
assert gitlabciyml.content is not None
93+
94+
95+
def test_template_license(gl):
96+
assert gl.licenses.list()
97+
license = gl.licenses.get(
98+
"bsd-2-clause", project="mytestproject", fullname="mytestfullname"
99+
)
100+
assert "mytestfullname" in license.content
101+
102+
103+
def test_hooks(gl):
104+
hook = gl.hooks.create({"url": "http://whatever.com"})
105+
assert len(gl.hooks.list()) == 1
106+
107+
hook.delete()
108+
assert len(gl.hooks.list()) == 0
109+
110+
111+
def test_namespaces(gl):
112+
namespace = gl.namespaces.list(all=True)
113+
assert namespace
114+
115+
namespace = gl.namespaces.list(search="root", all=True)[0]
116+
assert namespace.kind == "user"
117+
118+
119+
def test_notification_settings(gl):
120+
settings = gl.notificationsettings.get()
121+
settings.level = gitlab.NOTIFICATION_LEVEL_WATCH
122+
settings.save()
123+
124+
settings = gl.notificationsettings.get()
125+
assert settings.level == gitlab.NOTIFICATION_LEVEL_WATCH
126+
127+
128+
def test_user_activities(gl):
129+
activities = gl.user_activities.list(query_parameters={"from": "2019-01-01"})
130+
assert isinstance(activities, list)
131+
132+
133+
def test_events(gl):
134+
events = gl.events.list()
135+
assert isinstance(events, list)
136+
137+
138+
@pytest.mark.skip
139+
def test_features(gl):
140+
feat = gl.features.set("foo", 30)
141+
assert feat.name == "foo"
142+
assert len(gl.features.list()) == 1
143+
144+
feat.delete()
145+
assert len(gl.features.list()) == 0
146+
147+
148+
def test_pagination(gl, project):
149+
project2 = gl.projects.create({"name": "project-page-2"})
150+
151+
list1 = gl.projects.list(per_page=1, page=1)
152+
list2 = gl.projects.list(per_page=1, page=2)
153+
assert len(list1) == 1
154+
assert len(list2) == 1
155+
assert list1[0].id != list2[0].id
156+
157+
project2.delete()
158+
159+
160+
def test_rate_limits(gl):
161+
settings = gl.settings.get()
162+
settings.throttle_authenticated_api_enabled = True
163+
settings.throttle_authenticated_api_requests_per_period = 1
164+
settings.throttle_authenticated_api_period_in_seconds = 3
165+
settings.save()
166+
167+
projects = list()
168+
for i in range(0, 20):
169+
projects.append(gl.projects.create({"name": str(i) + "ok"}))
170+
171+
with pytest.raises(gitlab.GitlabCreateError) as e:
172+
for i in range(20, 40):
173+
projects.append(
174+
gl.projects.create(
175+
{"name": str(i) + "shouldfail"}, obey_rate_limit=False
176+
)
177+
)
178+
179+
assert "Retry later" in str(e.value)
180+
181+
settings.throttle_authenticated_api_enabled = False
182+
settings.save()
183+
[project.delete() for project in projects]

0 commit comments

Comments
 (0)