From 89133497a757be07fe3f516317d57ad303a313cd Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 7 Dec 2017 14:14:01 +0100 Subject: [PATCH 1/2] tests: add dummy connector to test failure behaviours (#20498) --- passerelle/apps/dummy/__init__.py | 0 passerelle/apps/dummy/migrations/0001_initial.py | 28 ++++++++++++++++++++++++ passerelle/apps/dummy/migrations/__init__.py | 0 passerelle/apps/dummy/models.py | 15 +++++++++++++ tests/settings.py | 18 +++++++++++++++ tests/test_dummy.py | 25 +++++++++++++++++++++ 6 files changed, 86 insertions(+) create mode 100644 passerelle/apps/dummy/__init__.py create mode 100644 passerelle/apps/dummy/migrations/0001_initial.py create mode 100644 passerelle/apps/dummy/migrations/__init__.py create mode 100644 passerelle/apps/dummy/models.py create mode 100644 tests/test_dummy.py diff --git a/passerelle/apps/dummy/__init__.py b/passerelle/apps/dummy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/passerelle/apps/dummy/migrations/0001_initial.py b/passerelle/apps/dummy/migrations/0001_initial.py new file mode 100644 index 0000000..9064034 --- /dev/null +++ b/passerelle/apps/dummy/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0005_resourcelog'), + ] + + operations = [ + migrations.CreateModel( + name='DummyConnector', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=50)), + ('slug', models.SlugField()), + ('description', models.TextField()), + ('log_level', models.CharField(default=b'INFO', max_length=10, verbose_name='Log Level', choices=[(b'NOTSET', b'NOTSET'), (b'DEBUG', b'DEBUG'), (b'INFO', b'INFO'), (b'WARNING', b'WARNING'), (b'ERROR', b'ERROR'), (b'CRITICAL', b'CRITICAL'), (b'FATAL', b'FATAL')])), + ('users', models.ManyToManyField(to='base.ApiUser', blank=True)), + ], + options={ + 'verbose_name': 'Dummy connector', + }, + ), + ] diff --git a/passerelle/apps/dummy/migrations/__init__.py b/passerelle/apps/dummy/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/passerelle/apps/dummy/models.py b/passerelle/apps/dummy/models.py new file mode 100644 index 0000000..897a702 --- /dev/null +++ b/passerelle/apps/dummy/models.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from django.utils.translation import ugettext_lazy as _ + +from passerelle.base.models import BaseResource +from passerelle.utils.api import endpoint + + +class DummyConnector(BaseResource): + class Meta: + verbose_name = _('Dummy connector') + + @endpoint(pattern='(?P.+)?$') + def exception_with_utf8(self, request, **kwargs): + raise Exception('é') diff --git a/tests/settings.py b/tests/settings.py index 9de1612..3ded95b 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -31,6 +31,7 @@ INSTALLED_APPS += ( 'passerelle.contrib.teamnet_axel', 'passerelle.contrib.tlmcom', 'passerelle.contrib.tcl', + 'passerelle.apps.dummy', ) PASSERELLE_APP_FAKE_FAMILY_ENABLED = True @@ -45,3 +46,20 @@ PASSERELLE_APP_GRANDLYON_STREETSECTIONS_ENABLED = True TCL_URL_TEMPLATE = 'http://tcl.example.net/%s' TCL_GEOJSON_URL_TEMPLATE = 'http://tcl.example.net/geojson/%s' + +LOGGING['handlers'].update({ + 'mail_admins': { + 'level': 'ERROR', + 'class': 'django.utils.log.AdminEmailHandler', + 'include_html': True, + }, +}) + +LOGGING['loggers']['django.request']['handlers'].append('mail_admins') +LOGGING['loggers']['passerelle.jsonresponse'] = { + 'handlers': ['mail_admins'], + 'level': 'INFO', +} +ADMINS = [ + ('Admin', 'admin@example.net'), +] diff --git a/tests/test_dummy.py b/tests/test_dummy.py new file mode 100644 index 0000000..8d522f0 --- /dev/null +++ b/tests/test_dummy.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +import pytest + +from django.contrib.contenttypes.models import ContentType + +from passerelle.base.models import ApiUser, AccessRight +from passerelle.apps.dummy.models import DummyConnector + + +@pytest.fixture() +def dummy(db): + api = ApiUser.objects.create(username='all', keytype='', key='') + + conn = DummyConnector.objects.create(slug='dummy') + obj_type = ContentType.objects.get_for_model(conn) + AccessRight.objects.create(codename='can_access', apiuser=api, + resource_type=obj_type, + resource_pk=conn.pk) + return conn + +@pytest.mark.xfail +def test_exception_with_utf8(app, dummy, mailoutbox, caplog): + app.get('/dummy/dummy/exception_with_utf8/', status=500) + assert u'Exception: é' in mailoutbox[0].body -- 2.1.4