Skip to content

Commit

Permalink
refactor(tests): split functional tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nejch committed Oct 8, 2020
1 parent 2002098 commit 61e43eb
Show file tree
Hide file tree
Showing 15 changed files with 1,498 additions and 1,164 deletions.
46 changes: 46 additions & 0 deletions tools/functional/api/test_clusters.py
@@ -0,0 +1,46 @@
def test_project_clusters(project):
project.clusters.create(
{
"name": "cluster1",
"platform_kubernetes_attributes": {
"api_url": "http://url",
"token": "tokenval",
},
}
)
clusters = project.clusters.list()
assert len(clusters) == 1

cluster = clusters[0]
cluster.platform_kubernetes_attributes = {"api_url": "http://newurl"}
cluster.save()

cluster = project.clusters.list()[0]
assert cluster.platform_kubernetes["api_url"] == "http://newurl"

cluster.delete()
assert len(project.clusters.list()) == 0


def test_group_clusters(group):
group.clusters.create(
{
"name": "cluster1",
"platform_kubernetes_attributes": {
"api_url": "http://url",
"token": "tokenval",
},
}
)
clusters = group.clusters.list()
assert len(clusters) == 1

cluster = clusters[0]
cluster.platform_kubernetes_attributes = {"api_url": "http://newurl"}
cluster.save()

cluster = group.clusters.list()[0]
assert cluster.platform_kubernetes["api_url"] == "http://newurl"

cluster.delete()
assert len(group.clusters.list()) == 0
42 changes: 42 additions & 0 deletions tools/functional/api/test_current_user.py
@@ -0,0 +1,42 @@
def test_current_user_email(gl):
gl.auth()
mail = gl.user.emails.create({"email": "current@user.com"})
assert len(gl.user.emails.list()) == 1

mail.delete()
assert len(gl.user.emails.list()) == 0


def test_current_user_gpg_keys(gl, GPG_KEY):
gl.auth()
gkey = gl.user.gpgkeys.create({"key": GPG_KEY})
assert len(gl.user.gpgkeys.list()) == 1

# Seems broken on the gitlab side
gkey = gl.user.gpgkeys.get(gkey.id)
gkey.delete()
assert len(gl.user.gpgkeys.list()) == 0


def test_current_user_ssh_keys(gl, SSH_KEY):
gl.auth()
key = gl.user.keys.create({"title": "testkey", "key": SSH_KEY})
assert len(gl.user.keys.list()) == 1

key.delete()
assert len(gl.user.keys.list()) == 0


def test_current_user_status(gl):
gl.auth()
message = "Test"
emoji = "thumbsup"
status = gl.user.status.get()

status.message = message
status.emoji = emoji
status.save()

new_status = gl.user.status.get()
assert new_status.message == message
assert new_status.emoji == emoji
12 changes: 12 additions & 0 deletions tools/functional/api/test_deploy_keys.py
@@ -0,0 +1,12 @@
def test_project_deploy_keys(gl, project, DEPLOY_KEY):
deploy_key = project.keys.create({"title": "foo@bar", "key": DEPLOY_KEY})
project_keys = list(project.keys.list())
assert len(project_keys) == 1

project2 = gl.projects.create({"name": "deploy-key-project"})
project2.keys.enable(deploy_key.id)
assert len(project2.keys.list()) == 1

project2.keys.delete(deploy_key.id)
assert len(project2.keys.list()) == 0
project2.delete()
36 changes: 36 additions & 0 deletions tools/functional/api/test_deploy_tokens.py
@@ -0,0 +1,36 @@
def test_project_deploy_tokens(gl, project):
deploy_token = project.deploytokens.create(
{
"name": "foo",
"username": "bar",
"expires_at": "2022-01-01",
"scopes": ["read_registry"],
}
)
assert len(project.deploytokens.list()) == 1
assert gl.deploytokens.list() == project.deploytokens.list()

assert project.deploytokens.list()[0].name == "foo"
assert project.deploytokens.list()[0].expires_at == "2022-01-01T00:00:00.000Z"
assert project.deploytokens.list()[0].scopes == ["read_registry"]
assert project.deploytokens.list()[0].username == "bar"

deploy_token.delete()
assert len(project.deploytokens.list()) == 0
assert len(gl.deploytokens.list()) == 0


def test_group_deploy_tokens(gl, group):
deploy_token = group.deploytokens.create(
{
"name": "foo",
"scopes": ["read_registry"],
}
)

assert len(group.deploytokens.list()) == 1
assert gl.deploytokens.list() == group.deploytokens.list()

deploy_token.delete()
assert len(group.deploytokens.list()) == 0
assert len(gl.deploytokens.list()) == 0
187 changes: 181 additions & 6 deletions tools/functional/api/test_gitlab.py
@@ -1,8 +1,183 @@
"""
Temporary module to run legacy tests as a single pytest test case
as they're all plain asserts at module level.
"""
import pytest

import gitlab

def test_api_v4(gl):
from tools.functional import python_test_v4

def test_auth_from_config(gl, temp_dir):
"""Test token authentication from config file"""
test_gitlab = gitlab.Gitlab.from_config(
config_files=[temp_dir / "python-gitlab.cfg"]
)
test_gitlab.auth()
assert isinstance(test_gitlab.user, gitlab.v4.objects.CurrentUser)


def test_broadcast_messages(gl):
msg = gl.broadcastmessages.create({"message": "this is the message"})
msg.color = "#444444"
msg.save()
msg_id = msg.id

msg = gl.broadcastmessages.list(all=True)[0]
assert msg.color == "#444444"

msg = gl.broadcastmessages.get(msg_id)
assert msg.color == "#444444"

msg.delete()
assert len(gl.broadcastmessages.list()) == 0


def test_markdown(gl):
html = gl.markdown("foo")
assert "foo" in html


def test_lint(gl):
success, errors = gl.lint("Invalid")
assert success is False
assert errors


def test_sidekiq_queue_metrics(gl):
out = gl.sidekiq.queue_metrics()
assert isinstance(out, dict)
assert "pages" in out["queues"]


def test_sidekiq_process_metrics(gl):
out = gl.sidekiq.process_metrics()
assert isinstance(out, dict)
assert "hostname" in out["processes"][0]


def test_sidekiq_job_stats(gl):
out = gl.sidekiq.job_stats()
assert isinstance(out, dict)
assert "processed" in out["jobs"]


def test_sidekiq_compound_metrics(gl):
out = gl.sidekiq.compound_metrics()
assert isinstance(out, dict)
assert "jobs" in out
assert "processes" in out
assert "queues" in out


def test_gitlab_settings(gl):
settings = gl.settings.get()
settings.default_projects_limit = 42
settings.save()
settings = gl.settings.get()
assert settings.default_projects_limit == 42


def test_template_dockerfile(gl):
assert gl.dockerfiles.list()

dockerfile = gl.dockerfiles.get("Node")
assert dockerfile.content is not None


def test_template_gitignore(gl):
assert gl.gitignores.list()
gitignore = gl.gitignores.get("Node")
assert gitignore.content is not None


def test_template_gitlabciyml(gl):
assert gl.gitlabciymls.list()
gitlabciyml = gl.gitlabciymls.get("Nodejs")
assert gitlabciyml.content is not None


def test_template_license(gl):
assert gl.licenses.list()
license = gl.licenses.get(
"bsd-2-clause", project="mytestproject", fullname="mytestfullname"
)
assert "mytestfullname" in license.content


def test_hooks(gl):
hook = gl.hooks.create({"url": "http://whatever.com"})
assert len(gl.hooks.list()) == 1

hook.delete()
assert len(gl.hooks.list()) == 0


def test_namespaces(gl):
namespace = gl.namespaces.list(all=True)
assert len(namespace) != 0

namespace = gl.namespaces.list(search="root", all=True)[0]
assert namespace.kind == "user"


def test_notification_settings(gl):
settings = gl.notificationsettings.get()
settings.level = gitlab.NOTIFICATION_LEVEL_WATCH
settings.save()

settings = gl.notificationsettings.get()
assert settings.level == gitlab.NOTIFICATION_LEVEL_WATCH


def test_user_activities(gl):
activities = gl.user_activities.list(query_parameters={"from": "2019-01-01"})
assert isinstance(activities, list)


def test_events(gl):
events = gl.events.list()
assert isinstance(events, list)


@pytest.mark.skip
def test_features(gl):
feat = gl.features.set("foo", 30)
assert feat.name == "foo"
assert len(gl.features.list()) == 1

feat.delete()
assert len(gl.features.list()) == 0


def test_pagination(gl, project):
project2 = gl.projects.create({"name": "project-page-2"})

list1 = gl.projects.list(per_page=1, page=1)
list2 = gl.projects.list(per_page=1, page=2)
assert len(list1) == 1
assert len(list2) == 1
assert list1[0].id != list2[0].id

project2.delete()


def test_rate_limits(gl):
settings = gl.settings.get()
settings.throttle_authenticated_api_enabled = True
settings.throttle_authenticated_api_requests_per_period = 1
settings.throttle_authenticated_api_period_in_seconds = 3
settings.save()

projects = list()
for i in range(0, 20):
projects.append(gl.projects.create({"name": str(i) + "ok"}))

with pytest.raises(gitlab.GitlabCreateError) as e:
for i in range(20, 40):
projects.append(
gl.projects.create(
{"name": str(i) + "shouldfail"}, obey_rate_limit=False
)
)

assert "Retry later" in str(e.value)

settings.throttle_authenticated_api_enabled = False
settings.save()
[project.delete() for project in projects]

0 comments on commit 61e43eb

Please sign in to comment.