add very basic tests

This commit is contained in:
Thomas NOËL 2020-05-03 02:25:04 +02:00
parent 16bbebecde
commit 2183f49d1d
6 changed files with 130 additions and 18 deletions

47
tests/conftest.py Normal file
View File

@ -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

View File

@ -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

8
tests/test_maarch.py Normal file
View File

@ -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)

8
tests/test_seisin.py Normal file
View File

@ -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)

65
tests/utils.py Normal file
View File

@ -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)

View File

@ -15,6 +15,8 @@ deps =
psycopg2-binary
pytest
pytest-django
mock
httmock
xmlschema<1.1
py2: setuptools<45.0.0
commands =