diff options
author | Nejc Habjan <nejc.habjan@siemens.com> | 2020-08-29 17:48:27 +0200 |
---|---|---|
committer | Nejc Habjan <nejc.habjan@siemens.com> | 2020-08-31 23:48:55 +0200 |
commit | 66d108de9665055921123476426fb6716c602496 (patch) | |
tree | 77afaad489e7b162345ed50bf1dc1bf1dd8c3b61 | |
parent | 4492fc42c9f6e0031dd3f3c6c99e4c58d4f472ff (diff) | |
download | gitlab-66d108de9665055921123476426fb6716c602496.tar.gz |
test(api): add tests for variables API
-rw-r--r-- | gitlab/tests/objects/test_variables.py | 193 | ||||
-rw-r--r-- | tools/functional/api/test_variables.py | 48 | ||||
-rw-r--r-- | tools/functional/cli/conftest.py | 21 | ||||
-rw-r--r-- | tools/functional/cli/test_cli_variables.py | 19 | ||||
-rw-r--r-- | tools/functional/conftest.py | 27 | ||||
-rwxr-xr-x | tools/functional_tests.sh | 2 | ||||
-rw-r--r-- | tools/python_test_v4.py | 19 |
7 files changed, 288 insertions, 41 deletions
diff --git a/gitlab/tests/objects/test_variables.py b/gitlab/tests/objects/test_variables.py new file mode 100644 index 0000000..d79bf96 --- /dev/null +++ b/gitlab/tests/objects/test_variables.py @@ -0,0 +1,193 @@ +""" +GitLab API: +https://docs.gitlab.com/ee/api/instance_level_ci_variables.html +https://docs.gitlab.com/ee/api/project_level_variables.html +https://docs.gitlab.com/ee/api/group_level_variables.html +""" + +import re + +import pytest +import responses + +from gitlab.v4.objects import GroupVariable, ProjectVariable, Variable + + +key = "TEST_VARIABLE_1" +value = "TEST_1" +new_value = "TEST_2" + +variable_content = { + "key": key, + "variable_type": "env_var", + "value": value, + "protected": False, + "masked": True, +} +variables_url = re.compile( + r"http://localhost/api/v4/(((groups|projects)/1)|(admin/ci))/variables" +) +variables_key_url = re.compile( + rf"http://localhost/api/v4/(((groups|projects)/1)|(admin/ci))/variables/{key}" +) + + +@pytest.fixture +def resp_list_variables(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url=variables_url, + json=[variable_content], + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture +def resp_get_variable(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url=variables_key_url, + json=variable_content, + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture +def resp_create_variable(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.POST, + url=variables_url, + json=variable_content, + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture +def resp_update_variable(): + updated_content = dict(variable_content) + updated_content["value"] = new_value + + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.PUT, + url=variables_key_url, + json=updated_content, + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture +def resp_delete_variable(no_content): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.DELETE, + url=variables_key_url, + json=no_content, + content_type="application/json", + status=204, + ) + yield rsps + + +def test_list_instance_variables(gl, resp_list_variables): + variables = gl.variables.list() + assert isinstance(variables, list) + assert isinstance(variables[0], Variable) + assert variables[0].value == value + + +def test_get_instance_variable(gl, resp_get_variable): + variable = gl.variables.get(key) + assert isinstance(variable, Variable) + assert variable.value == value + + +def test_create_instance_variable(gl, resp_create_variable): + variable = gl.variables.create({"key": key, "value": value}) + assert isinstance(variable, Variable) + assert variable.value == value + + +def test_update_instance_variable(gl, resp_update_variable): + variable = gl.variables.get(key, lazy=True) + variable.value = new_value + variable.save() + assert variable.value == new_value + + +def test_delete_instance_variable(gl, resp_delete_variable): + variable = gl.variables.get(key, lazy=True) + variable.delete() + + +def test_list_project_variables(project, resp_list_variables): + variables = project.variables.list() + assert isinstance(variables, list) + assert isinstance(variables[0], ProjectVariable) + assert variables[0].value == value + + +def test_get_project_variable(project, resp_get_variable): + variable = project.variables.get(key) + assert isinstance(variable, ProjectVariable) + assert variable.value == value + + +def test_create_project_variable(project, resp_create_variable): + variable = project.variables.create({"key": key, "value": value}) + assert isinstance(variable, ProjectVariable) + assert variable.value == value + + +def test_update_project_variable(project, resp_update_variable): + variable = project.variables.get(key, lazy=True) + variable.value = new_value + variable.save() + assert variable.value == new_value + + +def test_delete_project_variable(project, resp_delete_variable): + variable = project.variables.get(key, lazy=True) + variable.delete() + + +def test_list_group_variables(group, resp_list_variables): + variables = group.variables.list() + assert isinstance(variables, list) + assert isinstance(variables[0], GroupVariable) + assert variables[0].value == value + + +def test_get_group_variable(group, resp_get_variable): + variable = group.variables.get(key) + assert isinstance(variable, GroupVariable) + assert variable.value == value + + +def test_create_group_variable(group, resp_create_variable): + variable = group.variables.create({"key": key, "value": value}) + assert isinstance(variable, GroupVariable) + assert variable.value == value + + +def test_update_group_variable(group, resp_update_variable): + variable = group.variables.get(key, lazy=True) + variable.value = new_value + variable.save() + assert variable.value == new_value + + +def test_delete_group_variable(group, resp_delete_variable): + variable = group.variables.get(key, lazy=True) + variable.delete() diff --git a/tools/functional/api/test_variables.py b/tools/functional/api/test_variables.py new file mode 100644 index 0000000..d20ebba --- /dev/null +++ b/tools/functional/api/test_variables.py @@ -0,0 +1,48 @@ +""" +GitLab API: +https://docs.gitlab.com/ee/api/instance_level_ci_variables.html +https://docs.gitlab.com/ee/api/project_level_variables.html +https://docs.gitlab.com/ee/api/group_level_variables.html +""" + + +def test_instance_variables(gl): + variable = gl.variables.create({"key": "key1", "value": "value1"}) + assert variable.value == "value1" + assert len(gl.variables.list()) == 1 + + variable.value = "new_value1" + variable.save() + variable = gl.variables.get(variable.key) + assert variable.value == "new_value1" + + variable.delete() + assert len(gl.variables.list()) == 0 + + +def test_group_variables(group): + variable = group.variables.create({"key": "key1", "value": "value1"}) + assert variable.value == "value1" + assert len(group.variables.list()) == 1 + + variable.value = "new_value1" + variable.save() + variable = group.variables.get(variable.key) + assert variable.value == "new_value1" + + variable.delete() + assert len(group.variables.list()) == 0 + + +def test_project_variables(project): + variable = project.variables.create({"key": "key1", "value": "value1"}) + assert variable.value == "value1" + assert len(project.variables.list()) == 1 + + variable.value = "new_value1" + variable.save() + variable = project.variables.get(variable.key) + assert variable.value == "new_value1" + + variable.delete() + assert len(project.variables.list()) == 0 diff --git a/tools/functional/cli/conftest.py b/tools/functional/cli/conftest.py new file mode 100644 index 0000000..13c3096 --- /dev/null +++ b/tools/functional/cli/conftest.py @@ -0,0 +1,21 @@ +import pytest + + +@pytest.fixture +def gitlab_cli(script_runner, CONFIG): + """Wrapper fixture to help make test cases less verbose.""" + + def _gitlab_cli(subcommands): + """ + Return a script_runner.run method that takes a default gitlab + command, and subcommands passed as arguments inside test cases. + """ + command = ["gitlab", "--config-file", CONFIG] + + for subcommand in subcommands: + # ensure we get strings (e.g from IDs) + command.append(str(subcommand)) + + return script_runner.run(*command) + + return _gitlab_cli diff --git a/tools/functional/cli/test_cli_variables.py b/tools/functional/cli/test_cli_variables.py new file mode 100644 index 0000000..9b1b16d --- /dev/null +++ b/tools/functional/cli/test_cli_variables.py @@ -0,0 +1,19 @@ +def test_list_instance_variables(gitlab_cli, gl): + cmd = ["variable", "list"] + ret = gitlab_cli(cmd) + + assert ret.success + + +def test_list_group_variables(gitlab_cli, group): + cmd = ["group-variable", "list", "--group-id", group.id] + ret = gitlab_cli(cmd) + + assert ret.success + + +def test_list_project_variables(gitlab_cli, project): + cmd = ["project-variable", "list", "--project-id", project.id] + ret = gitlab_cli(cmd) + + assert ret.success diff --git a/tools/functional/conftest.py b/tools/functional/conftest.py index bd99fa9..e12471b 100644 --- a/tools/functional/conftest.py +++ b/tools/functional/conftest.py @@ -1,3 +1,5 @@ +import os +import tempfile from random import randint import pytest @@ -5,6 +7,9 @@ import pytest import gitlab +TEMP_DIR = tempfile.gettempdir() + + def random_id(): """ Helper to ensure new resource creation does not clash with @@ -17,27 +22,7 @@ def random_id(): @pytest.fixture(scope="session") def CONFIG(): - return "/tmp/python-gitlab.cfg" - - -@pytest.fixture -def gitlab_cli(script_runner, CONFIG): - """Wrapper fixture to help make test cases less verbose.""" - - def _gitlab_cli(subcommands): - """ - Return a script_runner.run method that takes a default gitlab - command, and subcommands passed as arguments inside test cases. - """ - command = ["gitlab", "--config-file", CONFIG] - - for subcommand in subcommands: - # ensure we get strings (e.g from IDs) - command.append(str(subcommand)) - - return script_runner.run(*command) - - return _gitlab_cli + return os.path.join(TEMP_DIR, "python-gitlab.cfg") @pytest.fixture(scope="session") diff --git a/tools/functional_tests.sh b/tools/functional_tests.sh index 87907c5..9b91f0f 100755 --- a/tools/functional_tests.sh +++ b/tools/functional_tests.sh @@ -18,4 +18,4 @@ setenv_script=$(dirname "$0")/build_test_env.sh || exit 1 BUILD_TEST_ENV_AUTO_CLEANUP=true . "$setenv_script" "$@" || exit 1 -pytest "$(dirname "$0")/functional/cli" +pytest --script-launch-mode=subprocess "$(dirname "$0")/functional/cli" diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py index 21faf9e..7ff97b6 100644 --- a/tools/python_test_v4.py +++ b/tools/python_test_v4.py @@ -367,17 +367,6 @@ assert gm1.state == "closed" assert len(gm1.issues()) == 0 assert len(gm1.merge_requests()) == 0 -# group variables -group1.variables.create({"key": "foo", "value": "bar"}) -g_v = group1.variables.get("foo") -assert g_v.value == "bar" -g_v.value = "baz" -g_v.save() -g_v = group1.variables.get("foo") -assert g_v.value == "baz" -assert len(group1.variables.list()) == 1 -g_v.delete() -assert len(group1.variables.list()) == 0 # group labels # group1.labels.create({"name": "foo", "description": "bar", "color": "#112233"}) @@ -856,14 +845,6 @@ tr1 = admin_project.triggers.create({"description": "trigger1"}) assert len(admin_project.triggers.list()) == 1 tr1.delete() -# variables -v1 = admin_project.variables.create({"key": "key1", "value": "value1"}) -assert len(admin_project.variables.list()) == 1 -v1.value = "new_value1" -v1.save() -v1 = admin_project.variables.get(v1.key) -assert v1.value == "new_value1" -v1.delete() # branches and merges to_merge = admin_project.branches.create({"branch": "branch1", "ref": "master"}) |