diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..a9d584a --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,47 @@ +import pytest +from httmock import urlmatch, HTTMock, response, remember_called + +import django_webtest + +from django.core.files import File +from django.core.cache import cache +from django.utils import six +from io import BytesIO + +from utils import make_resource + +if six.PY2: + collect_ignore = ['wcs/'] + + +@pytest.fixture(autouse=True) +def media(settings, tmpdir): + settings.MEDIA_ROOT = str(tmpdir.mkdir('media')) + + +@pytest.fixture +def app(request): + wtm = django_webtest.WebTestMixin() + wtm._patch_settings() + request.addfinalizer(wtm._unpatch_settings) + cache.clear() + return django_webtest.DjangoTestApp() + + +@pytest.fixture +def endpoint_dummy_cache(monkeypatch): + from django.core.cache import caches + import passerelle.views + monkeypatch.setattr( + passerelle.views, 'cache', caches['dummy']) + + +@urlmatch() +def internal_server_error(url, request): + return response(500, 'Internal server error') + + +@pytest.fixture +def mock_500(): + with HTTMock(internal_server_error): + yield None diff --git a/tests/test_base.py b/tests/test_base.py deleted file mode 100644 index 43a04cf..0000000 --- a/tests/test_base.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -import pytest - -from django.core.cache import cache -import django_webtest - - -@pytest.fixture -def app(request): - wtm = django_webtest.WebTestMixin() - wtm._patch_settings() - cache.clear() - yield django_webtest.DjangoTestApp() - wtm._unpatch_settings() - - -def test_dummny(app): - assert True diff --git a/tests/test_maarch.py b/tests/test_maarch.py new file mode 100644 index 0000000..f6784ca --- /dev/null +++ b/tests/test_maarch.py @@ -0,0 +1,8 @@ +import utils + +from passerelle_minint.minint_maarch.models import MinIntMaarch + + +def test_creation(app, db): + resource = utils.make_resource(MinIntMaarch, wsdl_url='https://example.com/', + slug='slug', verify_cert=True) diff --git a/tests/test_seisin.py b/tests/test_seisin.py new file mode 100644 index 0000000..fadcb9c --- /dev/null +++ b/tests/test_seisin.py @@ -0,0 +1,8 @@ +import utils + +from passerelle_minint.minint_seisin.models import SeisinManagement + + +def test_creation(app, db): + resource = utils.make_resource(SeisinManagement, wsdl_url='https://example.com/', + slug='slug', verify_cert=True) diff --git a/tests/utils.py b/tests/utils.py new file mode 100644 index 0000000..62fc82b --- /dev/null +++ b/tests/utils.py @@ -0,0 +1,65 @@ +import json + +import mock +import httmock + +from django.contrib.contenttypes.models import ContentType +from django.core.urlresolvers import reverse +from django.utils.six.moves.urllib import parse as urlparse + +from passerelle.base.models import ApiUser, AccessRight +from passerelle.compat import json_loads + + +def generic_endpoint_url(connector, endpoint, slug='test'): + return reverse('generic-endpoint', kwargs={ + 'connector': connector, 'slug': slug, 'endpoint': endpoint}) + + +def setup_access_rights(obj): + api = ApiUser.objects.create(username='all', + keytype='', key='') + obj_type = ContentType.objects.get_for_model(obj) + AccessRight.objects.create(codename='can_access', apiuser=api, + resource_type=obj_type, resource_pk=obj.pk) + return obj + + +class FakedResponse(mock.Mock): + headers = {} + + def json(self): + return json_loads(self.content) + + +def mock_url(url=None, response='', status_code=200, headers=None): + urlmatch_kwargs = {} + if url: + parsed = urlparse.urlparse(url) + if parsed.netloc: + urlmatch_kwargs['netloc'] = parsed.netloc + if parsed.path: + urlmatch_kwargs['path'] = parsed.path + + if not isinstance(response, str): + response = json.dumps(response) + + @httmock.urlmatch(**urlmatch_kwargs) + def mocked(url, request): + return httmock.response(status_code, response, headers, request=request) + return httmock.HTTMock(mocked) + + +def make_resource(model_class, **kwargs): + resource = model_class.objects.create(**kwargs) + setup_access_rights(resource) + return resource + + +def endpoint_get(expected_url, app, resource, endpoint, **kwargs): + url = generic_endpoint_url( + connector=resource.__class__.get_connector_slug(), + endpoint=endpoint, + slug=resource.slug) + assert url == expected_url, 'endpoint URL has changed' + return app.get(url, **kwargs) diff --git a/tox.ini b/tox.ini index b2b8ebc..28312a4 100644 --- a/tox.ini +++ b/tox.ini @@ -15,6 +15,8 @@ deps = psycopg2-binary pytest pytest-django + mock + httmock xmlschema<1.1 py2: setuptools<45.0.0 commands =