summaryrefslogtreecommitdiff
path: root/tests/unit/test_gitlab_http_methods.py
diff options
context:
space:
mode:
authorNejc Habjan <hab.nejc@gmail.com>2021-12-01 01:04:53 +0100
committerGitHub <noreply@github.com>2021-12-01 01:04:53 +0100
commit8d76826fa64460e504acc5924f859f8dbc246b42 (patch)
tree083fefada982c795e2415092794db429abb0c184 /tests/unit/test_gitlab_http_methods.py
parent5a1678f43184bd459132102cc13cf8426fe0449d (diff)
parent86ab04e54ea4175f10053decfad5086cda7aa024 (diff)
downloadgitlab-master.tar.gz
Merge pull request #1723 from python-gitlab/jlvillal/dead_mastermaster
Close-out `master` branch
Diffstat (limited to 'tests/unit/test_gitlab_http_methods.py')
-rw-r--r--tests/unit/test_gitlab_http_methods.py406
1 files changed, 0 insertions, 406 deletions
diff --git a/tests/unit/test_gitlab_http_methods.py b/tests/unit/test_gitlab_http_methods.py
deleted file mode 100644
index ba57c31..0000000
--- a/tests/unit/test_gitlab_http_methods.py
+++ /dev/null
@@ -1,406 +0,0 @@
-import pytest
-import requests
-from httmock import HTTMock, response, urlmatch
-
-from gitlab import GitlabHttpError, GitlabList, GitlabParsingError, RedirectError
-
-
-def test_build_url(gl):
- r = gl._build_url("http://localhost/api/v4")
- assert r == "http://localhost/api/v4"
- r = gl._build_url("https://localhost/api/v4")
- assert r == "https://localhost/api/v4"
- r = gl._build_url("/projects")
- assert r == "http://localhost/api/v4/projects"
-
-
-def test_http_request(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get")
- def resp_cont(url, request):
- headers = {"content-type": "application/json"}
- content = '[{"name": "project1"}]'
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- http_r = gl.http_request("get", "/projects")
- http_r.json()
- assert http_r.status_code == 200
-
-
-def test_http_request_404(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/not_there", method="get")
- def resp_cont(url, request):
- content = {"Here is why it failed"}
- return response(404, content, {}, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabHttpError):
- gl.http_request("get", "/not_there")
-
-
-@pytest.mark.parametrize("status_code", [500, 502, 503, 504])
-def test_http_request_with_only_failures(gl, status_code):
- call_count = 0
-
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get")
- def resp_cont(url, request):
- nonlocal call_count
- call_count += 1
- return response(status_code, {"Here is why it failed"}, {}, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabHttpError):
- gl.http_request("get", "/projects")
-
- assert call_count == 1
-
-
-def test_http_request_with_retry_on_method_for_transient_failures(gl):
- call_count = 0
- calls_before_success = 3
-
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get")
- def resp_cont(url, request):
- nonlocal call_count
- call_count += 1
- status_code = 200 if call_count == calls_before_success else 500
- return response(
- status_code,
- {"Failure is the stepping stone to success"},
- {},
- None,
- 5,
- request,
- )
-
- with HTTMock(resp_cont):
- http_r = gl.http_request("get", "/projects", retry_transient_errors=True)
-
- assert http_r.status_code == 200
- assert call_count == calls_before_success
-
-
-def test_http_request_with_retry_on_class_for_transient_failures(gl_retry):
- call_count = 0
- calls_before_success = 3
-
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get")
- def resp_cont(url, request):
- nonlocal call_count
- call_count += 1
- status_code = 200 if call_count == calls_before_success else 500
- return response(
- status_code,
- {"Failure is the stepping stone to success"},
- {},
- None,
- 5,
- request,
- )
-
- with HTTMock(resp_cont):
- http_r = gl_retry.http_request("get", "/projects")
-
- assert http_r.status_code == 200
- assert call_count == calls_before_success
-
-
-def test_http_request_with_retry_on_class_and_method_for_transient_failures(gl_retry):
- call_count = 0
- calls_before_success = 3
-
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get")
- def resp_cont(url, request):
- nonlocal call_count
- call_count += 1
- status_code = 200 if call_count == calls_before_success else 500
- return response(status_code, {"Here is why it failed"}, {}, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabHttpError):
- gl_retry.http_request("get", "/projects", retry_transient_errors=False)
-
- assert call_count == 1
-
-
-def create_redirect_response(
- *, request: requests.models.PreparedRequest, http_method: str, api_path: str
-) -> requests.models.Response:
- """Create a Requests response object that has a redirect in it"""
-
- assert api_path.startswith("/")
- http_method = http_method.upper()
-
- # Create a history which contains our original request which is redirected
- history = [
- response(
- status_code=302,
- content="",
- headers={"Location": f"http://example.com/api/v4{api_path}"},
- reason="Moved Temporarily",
- request=request,
- )
- ]
-
- # Create a "prepped" Request object to be the final redirect. The redirect
- # will be a "GET" method as Requests changes the method to "GET" when there
- # is a 301/302 redirect code.
- req = requests.Request(
- method="GET",
- url=f"http://example.com/api/v4{api_path}",
- )
- prepped = req.prepare()
-
- resp_obj = response(
- status_code=200,
- content="",
- headers={},
- reason="OK",
- elapsed=5,
- request=prepped,
- )
- resp_obj.history = history
- return resp_obj
-
-
-def test_http_request_302_get_does_not_raise(gl):
- """Test to show that a redirect of a GET will not cause an error"""
-
- method = "get"
- api_path = "/user/status"
-
- @urlmatch(
- scheme="http", netloc="localhost", path=f"/api/v4{api_path}", method=method
- )
- def resp_cont(
- url: str, request: requests.models.PreparedRequest
- ) -> requests.models.Response:
- resp_obj = create_redirect_response(
- request=request, http_method=method, api_path=api_path
- )
- return resp_obj
-
- with HTTMock(resp_cont):
- gl.http_request(verb=method, path=api_path)
-
-
-def test_http_request_302_put_raises_redirect_error(gl):
- """Test to show that a redirect of a PUT will cause an error"""
-
- method = "put"
- api_path = "/user/status"
-
- @urlmatch(
- scheme="http", netloc="localhost", path=f"/api/v4{api_path}", method=method
- )
- def resp_cont(
- url: str, request: requests.models.PreparedRequest
- ) -> requests.models.Response:
- resp_obj = create_redirect_response(
- request=request, http_method=method, api_path=api_path
- )
- return resp_obj
-
- with HTTMock(resp_cont):
- with pytest.raises(RedirectError) as exc:
- gl.http_request(verb=method, path=api_path)
- error_message = exc.value.error_message
- assert "Moved Temporarily" in error_message
- assert "http://localhost/api/v4/user/status" in error_message
- assert "http://example.com/api/v4/user/status" in error_message
-
-
-def test_get_request(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get")
- def resp_cont(url: str, request: requests.models.PreparedRequest):
- headers = {"content-type": "application/json"}
- content = '{"name": "project1"}'
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- result = gl.http_get("/projects")
- assert isinstance(result, dict)
- assert result["name"] == "project1"
-
-
-def test_get_request_raw(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get")
- def resp_cont(url, request):
- headers = {"content-type": "application/octet-stream"}
- content = "content"
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- result = gl.http_get("/projects")
- assert result.content.decode("utf-8") == "content"
-
-
-def test_get_request_404(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/not_there", method="get")
- def resp_cont(url, request):
- content = {"Here is why it failed"}
- return response(404, content, {}, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabHttpError):
- gl.http_get("/not_there")
-
-
-def test_get_request_invalid_data(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get")
- def resp_cont(url, request):
- headers = {"content-type": "application/json"}
- content = '["name": "project1"]'
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabParsingError):
- gl.http_get("/projects")
-
-
-def test_list_request(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get")
- def resp_cont(url, request):
- headers = {"content-type": "application/json", "X-Total": 1}
- content = '[{"name": "project1"}]'
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- result = gl.http_list("/projects", as_list=True)
- assert isinstance(result, list)
- assert len(result) == 1
-
- with HTTMock(resp_cont):
- result = gl.http_list("/projects", as_list=False)
- assert isinstance(result, GitlabList)
- assert len(result) == 1
-
- with HTTMock(resp_cont):
- result = gl.http_list("/projects", all=True)
- assert isinstance(result, list)
- assert len(result) == 1
-
-
-def test_list_request_404(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/not_there", method="get")
- def resp_cont(url, request):
- content = {"Here is why it failed"}
- return response(404, content, {}, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabHttpError):
- gl.http_list("/not_there")
-
-
-def test_list_request_invalid_data(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get")
- def resp_cont(url, request):
- headers = {"content-type": "application/json"}
- content = '["name": "project1"]'
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabParsingError):
- gl.http_list("/projects")
-
-
-def test_post_request(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="post")
- def resp_cont(url, request):
- headers = {"content-type": "application/json"}
- content = '{"name": "project1"}'
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- result = gl.http_post("/projects")
- assert isinstance(result, dict)
- assert result["name"] == "project1"
-
-
-def test_post_request_404(gl):
- @urlmatch(
- scheme="http", netloc="localhost", path="/api/v4/not_there", method="post"
- )
- def resp_cont(url, request):
- content = {"Here is why it failed"}
- return response(404, content, {}, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabHttpError):
- gl.http_post("/not_there")
-
-
-def test_post_request_invalid_data(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="post")
- def resp_cont(url, request):
- headers = {"content-type": "application/json"}
- content = '["name": "project1"]'
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabParsingError):
- gl.http_post("/projects")
-
-
-def test_put_request(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="put")
- def resp_cont(url, request):
- headers = {"content-type": "application/json"}
- content = '{"name": "project1"}'
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- result = gl.http_put("/projects")
- assert isinstance(result, dict)
- assert result["name"] == "project1"
-
-
-def test_put_request_404(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/not_there", method="put")
- def resp_cont(url, request):
- content = {"Here is why it failed"}
- return response(404, content, {}, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabHttpError):
- gl.http_put("/not_there")
-
-
-def test_put_request_invalid_data(gl):
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="put")
- def resp_cont(url, request):
- headers = {"content-type": "application/json"}
- content = '["name": "project1"]'
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabParsingError):
- gl.http_put("/projects")
-
-
-def test_delete_request(gl):
- @urlmatch(
- scheme="http", netloc="localhost", path="/api/v4/projects", method="delete"
- )
- def resp_cont(url, request):
- headers = {"content-type": "application/json"}
- content = "true"
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- result = gl.http_delete("/projects")
- assert isinstance(result, requests.Response)
- assert result.json() is True
-
-
-def test_delete_request_404(gl):
- @urlmatch(
- scheme="http", netloc="localhost", path="/api/v4/not_there", method="delete"
- )
- def resp_cont(url, request):
- content = {"Here is why it failed"}
- return response(404, content, {}, None, 5, request)
-
- with HTTMock(resp_cont):
- with pytest.raises(GitlabHttpError):
- gl.http_delete("/not_there")