summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNejc Habjan <hab.nejc@gmail.com>2022-01-15 12:36:54 +0100
committerGitHub <noreply@github.com>2022-01-15 12:36:54 +0100
commitfe14dd512e59dbb782b2b1c1ab4d94a701a8758f (patch)
treeb5c623ea2428d46461c7ab97c6d2062733a843a7
parent1ac982ae30781830c2a19a83a014e04a4b6bae41 (diff)
parent208da04a01a4b5de8dc34e62c87db4cfa4c0d9b6 (diff)
downloadgitlab-fe14dd512e59dbb782b2b1c1ab4d94a701a8758f.tar.gz
Merge pull request #1843 from python-gitlab/jlvillal/rm_httmock
test: use 'responses' in test_mixins_methods.py
-rw-r--r--tests/unit/mixins/test_mixin_methods.py337
1 files changed, 191 insertions, 146 deletions
diff --git a/tests/unit/mixins/test_mixin_methods.py b/tests/unit/mixins/test_mixin_methods.py
index 626230e..6ccda40 100644
--- a/tests/unit/mixins/test_mixin_methods.py
+++ b/tests/unit/mixins/test_mixin_methods.py
@@ -1,5 +1,5 @@
import pytest
-from httmock import HTTMock, response, urlmatch # noqa
+import responses
from gitlab import base
from gitlab.mixins import (
@@ -24,108 +24,127 @@ class FakeManager(base.RESTManager):
_obj_cls = FakeObject
+@responses.activate
def test_get_mixin(gl):
class M(GetMixin, FakeManager):
pass
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/tests/42", method="get")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '{"id": 42, "foo": "bar"}'
- return response(200, content, headers, None, 5, request)
+ url = "http://localhost/api/v4/tests/42"
+ responses.add(
+ method=responses.GET,
+ url=url,
+ json={"id": 42, "foo": "bar"},
+ status=200,
+ match_querystring=True,
+ )
- with HTTMock(resp_cont):
- mgr = M(gl)
- obj = mgr.get(42)
- assert isinstance(obj, FakeObject)
- assert obj.foo == "bar"
- assert obj.id == 42
+ mgr = M(gl)
+ obj = mgr.get(42)
+ assert isinstance(obj, FakeObject)
+ assert obj.foo == "bar"
+ assert obj.id == 42
+ assert responses.assert_call_count(url, 1) is True
+@responses.activate
def test_refresh_mixin(gl):
class TestClass(RefreshMixin, FakeObject):
pass
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/tests/42", method="get")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '{"id": 42, "foo": "bar"}'
- return response(200, content, headers, None, 5, request)
+ url = "http://localhost/api/v4/tests/42"
+ responses.add(
+ method=responses.GET,
+ url=url,
+ json={"id": 42, "foo": "bar"},
+ status=200,
+ match_querystring=True,
+ )
- with HTTMock(resp_cont):
- mgr = FakeManager(gl)
- obj = TestClass(mgr, {"id": 42})
- res = obj.refresh()
- assert res is None
- assert obj.foo == "bar"
- assert obj.id == 42
+ mgr = FakeManager(gl)
+ obj = TestClass(mgr, {"id": 42})
+ res = obj.refresh()
+ assert res is None
+ assert obj.foo == "bar"
+ assert obj.id == 42
+ assert responses.assert_call_count(url, 1) is True
+@responses.activate
def test_get_without_id_mixin(gl):
class M(GetWithoutIdMixin, FakeManager):
pass
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/tests", method="get")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '{"foo": "bar"}'
- return response(200, content, headers, None, 5, request)
+ url = "http://localhost/api/v4/tests"
+ responses.add(
+ method=responses.GET,
+ url=url,
+ json={"foo": "bar"},
+ status=200,
+ match_querystring=True,
+ )
- with HTTMock(resp_cont):
- mgr = M(gl)
- obj = mgr.get()
- assert isinstance(obj, FakeObject)
- assert obj.foo == "bar"
- assert not hasattr(obj, "id")
+ mgr = M(gl)
+ obj = mgr.get()
+ assert isinstance(obj, FakeObject)
+ assert obj.foo == "bar"
+ assert not hasattr(obj, "id")
+ assert responses.assert_call_count(url, 1) is True
+@responses.activate
def test_list_mixin(gl):
class M(ListMixin, FakeManager):
pass
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/tests", method="get")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '[{"id": 42, "foo": "bar"},{"id": 43, "foo": "baz"}]'
- return response(200, content, headers, None, 5, request)
-
- with HTTMock(resp_cont):
- # test RESTObjectList
- mgr = M(gl)
- obj_list = mgr.list(as_list=False)
- assert isinstance(obj_list, base.RESTObjectList)
- for obj in obj_list:
- assert isinstance(obj, FakeObject)
- assert obj.id in (42, 43)
-
- # test list()
- obj_list = mgr.list(all=True)
- assert isinstance(obj_list, list)
- assert obj_list[0].id == 42
- assert obj_list[1].id == 43
- assert isinstance(obj_list[0], FakeObject)
- assert len(obj_list) == 2
+ url = "http://localhost/api/v4/tests"
+ responses.add(
+ method=responses.GET,
+ url=url,
+ json=[{"id": 42, "foo": "bar"}, {"id": 43, "foo": "baz"}],
+ status=200,
+ match_querystring=True,
+ )
+
+ # test RESTObjectList
+ mgr = M(gl)
+ obj_list = mgr.list(as_list=False)
+ assert isinstance(obj_list, base.RESTObjectList)
+ for obj in obj_list:
+ assert isinstance(obj, FakeObject)
+ assert obj.id in (42, 43)
+
+ # test list()
+ obj_list = mgr.list(all=True)
+ assert isinstance(obj_list, list)
+ assert obj_list[0].id == 42
+ assert obj_list[1].id == 43
+ assert isinstance(obj_list[0], FakeObject)
+ assert len(obj_list) == 2
+ assert responses.assert_call_count(url, 2) is True
+@responses.activate
def test_list_other_url(gl):
class M(ListMixin, FakeManager):
pass
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/others", method="get")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '[{"id": 42, "foo": "bar"}]'
- return response(200, content, headers, None, 5, request)
+ url = "http://localhost/api/v4/others"
+ responses.add(
+ method=responses.GET,
+ url=url,
+ json=[{"id": 42, "foo": "bar"}],
+ status=200,
+ match_querystring=True,
+ )
- with HTTMock(resp_cont):
- mgr = M(gl)
- obj_list = mgr.list(path="/others", as_list=False)
- assert isinstance(obj_list, base.RESTObjectList)
- obj = obj_list.next()
- assert obj.id == 42
- assert obj.foo == "bar"
- with pytest.raises(StopIteration):
- obj_list.next()
+ mgr = M(gl)
+ obj_list = mgr.list(path="/others", as_list=False)
+ assert isinstance(obj_list, base.RESTObjectList)
+ obj = obj_list.next()
+ assert obj.id == 42
+ assert obj.foo == "bar"
+ with pytest.raises(StopIteration):
+ obj_list.next()
def test_create_mixin_missing_attrs(gl):
@@ -144,6 +163,7 @@ def test_create_mixin_missing_attrs(gl):
assert "foo" in str(error.value)
+@responses.activate
def test_create_mixin(gl):
class M(CreateMixin, FakeManager):
_create_attrs = base.RequiredOptional(
@@ -151,20 +171,24 @@ def test_create_mixin(gl):
)
_update_attrs = base.RequiredOptional(required=("foo",), optional=("bam",))
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/tests", method="post")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '{"id": 42, "foo": "bar"}'
- return response(200, content, headers, None, 5, request)
+ url = "http://localhost/api/v4/tests"
+ responses.add(
+ method=responses.POST,
+ url=url,
+ json={"id": 42, "foo": "bar"},
+ status=200,
+ match_querystring=True,
+ )
- with HTTMock(resp_cont):
- mgr = M(gl)
- obj = mgr.create({"foo": "bar"})
- assert isinstance(obj, FakeObject)
- assert obj.id == 42
- assert obj.foo == "bar"
+ mgr = M(gl)
+ obj = mgr.create({"foo": "bar"})
+ assert isinstance(obj, FakeObject)
+ assert obj.id == 42
+ assert obj.foo == "bar"
+ assert responses.assert_call_count(url, 1) is True
+@responses.activate
def test_create_mixin_custom_path(gl):
class M(CreateMixin, FakeManager):
_create_attrs = base.RequiredOptional(
@@ -172,18 +196,21 @@ def test_create_mixin_custom_path(gl):
)
_update_attrs = base.RequiredOptional(required=("foo",), optional=("bam",))
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/others", method="post")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '{"id": 42, "foo": "bar"}'
- return response(200, content, headers, None, 5, request)
+ url = "http://localhost/api/v4/others"
+ responses.add(
+ method=responses.POST,
+ url=url,
+ json={"id": 42, "foo": "bar"},
+ status=200,
+ match_querystring=True,
+ )
- with HTTMock(resp_cont):
- mgr = M(gl)
- obj = mgr.create({"foo": "bar"}, path="/others")
- assert isinstance(obj, FakeObject)
- assert obj.id == 42
- assert obj.foo == "bar"
+ mgr = M(gl)
+ obj = mgr.create({"foo": "bar"}, path="/others")
+ assert isinstance(obj, FakeObject)
+ assert obj.id == 42
+ assert obj.foo == "bar"
+ assert responses.assert_call_count(url, 1) is True
def test_update_mixin_missing_attrs(gl):
@@ -202,6 +229,7 @@ def test_update_mixin_missing_attrs(gl):
assert "foo" in str(error.value)
+@responses.activate
def test_update_mixin(gl):
class M(UpdateMixin, FakeManager):
_create_attrs = base.RequiredOptional(
@@ -209,20 +237,24 @@ def test_update_mixin(gl):
)
_update_attrs = base.RequiredOptional(required=("foo",), optional=("bam",))
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/tests/42", method="put")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '{"id": 42, "foo": "baz"}'
- return response(200, content, headers, None, 5, request)
+ url = "http://localhost/api/v4/tests/42"
+ responses.add(
+ method=responses.PUT,
+ url=url,
+ json={"id": 42, "foo": "baz"},
+ status=200,
+ match_querystring=True,
+ )
- with HTTMock(resp_cont):
- mgr = M(gl)
- server_data = mgr.update(42, {"foo": "baz"})
- assert isinstance(server_data, dict)
- assert server_data["id"] == 42
- assert server_data["foo"] == "baz"
+ mgr = M(gl)
+ server_data = mgr.update(42, {"foo": "baz"})
+ assert isinstance(server_data, dict)
+ assert server_data["id"] == 42
+ assert server_data["foo"] == "baz"
+ assert responses.assert_call_count(url, 1) is True
+@responses.activate
def test_update_mixin_no_id(gl):
class M(UpdateMixin, FakeManager):
_create_attrs = base.RequiredOptional(
@@ -230,36 +262,42 @@ def test_update_mixin_no_id(gl):
)
_update_attrs = base.RequiredOptional(required=("foo",), optional=("bam",))
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/tests", method="put")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '{"foo": "baz"}'
- return response(200, content, headers, None, 5, request)
+ url = "http://localhost/api/v4/tests"
+ responses.add(
+ method=responses.PUT,
+ url=url,
+ json={"foo": "baz"},
+ status=200,
+ match_querystring=True,
+ )
- with HTTMock(resp_cont):
- mgr = M(gl)
- server_data = mgr.update(new_data={"foo": "baz"})
- assert isinstance(server_data, dict)
- assert server_data["foo"] == "baz"
+ mgr = M(gl)
+ server_data = mgr.update(new_data={"foo": "baz"})
+ assert isinstance(server_data, dict)
+ assert server_data["foo"] == "baz"
+ assert responses.assert_call_count(url, 1) is True
+@responses.activate
def test_delete_mixin(gl):
class M(DeleteMixin, FakeManager):
pass
- @urlmatch(
- scheme="http", netloc="localhost", path="/api/v4/tests/42", method="delete"
+ url = "http://localhost/api/v4/tests/42"
+ responses.add(
+ method=responses.DELETE,
+ url=url,
+ json="",
+ status=200,
+ match_querystring=True,
)
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = ""
- return response(200, content, headers, None, 5, request)
- with HTTMock(resp_cont):
- mgr = M(gl)
- mgr.delete(42)
+ mgr = M(gl)
+ mgr.delete(42)
+ assert responses.assert_call_count(url, 1) is True
+@responses.activate
def test_save_mixin(gl):
class M(UpdateMixin, FakeManager):
pass
@@ -267,34 +305,41 @@ def test_save_mixin(gl):
class TestClass(SaveMixin, base.RESTObject):
pass
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/tests/42", method="put")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '{"id": 42, "foo": "baz"}'
- return response(200, content, headers, None, 5, request)
+ url = "http://localhost/api/v4/tests/42"
+ responses.add(
+ method=responses.PUT,
+ url=url,
+ json={"id": 42, "foo": "baz"},
+ status=200,
+ match_querystring=True,
+ )
- with HTTMock(resp_cont):
- mgr = M(gl)
- obj = TestClass(mgr, {"id": 42, "foo": "bar"})
- obj.foo = "baz"
- obj.save()
- assert obj._attrs["foo"] == "baz"
- assert obj._updated_attrs == {}
+ mgr = M(gl)
+ obj = TestClass(mgr, {"id": 42, "foo": "bar"})
+ obj.foo = "baz"
+ obj.save()
+ assert obj._attrs["foo"] == "baz"
+ assert obj._updated_attrs == {}
+ assert responses.assert_call_count(url, 1) is True
+@responses.activate
def test_set_mixin(gl):
class M(SetMixin, FakeManager):
pass
- @urlmatch(scheme="http", netloc="localhost", path="/api/v4/tests/foo", method="put")
- def resp_cont(url, request):
- headers = {"Content-Type": "application/json"}
- content = '{"key": "foo", "value": "bar"}'
- return response(200, content, headers, None, 5, request)
+ url = "http://localhost/api/v4/tests/foo"
+ responses.add(
+ method=responses.PUT,
+ url=url,
+ json={"key": "foo", "value": "bar"},
+ status=200,
+ match_querystring=True,
+ )
- with HTTMock(resp_cont):
- mgr = M(gl)
- obj = mgr.set("foo", "bar")
- assert isinstance(obj, FakeObject)
- assert obj.key == "foo"
- assert obj.value == "bar"
+ mgr = M(gl)
+ obj = mgr.set("foo", "bar")
+ assert isinstance(obj, FakeObject)
+ assert obj.key == "foo"
+ assert obj.value == "bar"
+ assert responses.assert_call_count(url, 1) is True