Add pytest-warning to tests and correct some warnings, complete coverage (essentially branch)

This commit is contained in:
Valentin Samir 2016-07-29 13:56:23 +02:00
parent b168e0a642
commit 6eea76d984
11 changed files with 78 additions and 15 deletions

View file

@ -62,7 +62,7 @@ run_server: test_project
run_tests: test_venv run_tests: test_venv
python setup.py check --restructuredtext --stric python setup.py check --restructuredtext --stric
test_venv/bin/py.test --cov=cas_server --cov-report html test_venv/bin/py.test -rw -x --cov=cas_server --cov-report html
rm htmlcov/coverage_html.js # I am really pissed off by those keybord shortcuts rm htmlcov/coverage_html.js # I am really pissed off by those keybord shortcuts
test_venv/bin/sphinx-build: test_venv test_venv/bin/sphinx-build: test_venv

View file

@ -32,7 +32,7 @@ class BootsrapForm(forms.Form):
self[name].checkbox = True self[name].checkbox = True
else: else:
attrs['class'] = "form-control" attrs['class'] = "form-control"
if field.label: if field.label: # pragma: no branch (currently all field are hidden or labeled)
attrs["placeholder"] = field.label attrs["placeholder"] = field.label
if field.required: if field.required:
attrs["required"] = "required" attrs["required"] = "required"

View file

@ -15,7 +15,7 @@
<script src="{{settings.CAS_COMPONENT_URLS.respond}}"></script> <script src="{{settings.CAS_COMPONENT_URLS.respond}}"></script>
<![endif]--> <![endif]-->
<link rel="shortcut icon" href="{% static "cas_server/favicon.ico?v=1" %}" /> <link rel="shortcut icon" href="{% static "cas_server/favicon.ico?v=1" %}" />
<link href="{% static "cas_server/login.css" %}" rel="stylesheet"> <link href="{% static "cas_server/styles.css" %}" rel="stylesheet">
</head> </head>
<body> <body>
<div class="container"> <div class="container">
@ -36,18 +36,17 @@
{% for message in messages %} {% for message in messages %}
<div {% spaceless %} <div {% spaceless %}
{% if message.level == message_levels.DEBUG %} {% if message.level == message_levels.DEBUG %}
class="alert alert-warning alert-dismissable" class="alert alert-warning"
{% elif message.level == message_levels.INFO %} {% elif message.level == message_levels.INFO %}
class="alert alert-info alert-dismissable" class="alert alert-info"
{% elif message.level == message_levels.SUCCESS %} {% elif message.level == message_levels.SUCCESS %}
class="alert alert-success alert-dismissable" class="alert alert-success"
{% elif message.level == message_levels.WARNING %} {% elif message.level == message_levels.WARNING %}
class="alert alert-warning alert-dismissable" class="alert alert-warning"
{% else %} {% else %}
class="alert alert-danger alert-dismissable" class="alert alert-danger"
{% endif %} {% endif %}
{% endspaceless %}> {% endspaceless %}>
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&#215;</button>
{{ message }} {{ message }}
</div> </div>
{% endfor %} {% endfor %}

View file

@ -51,6 +51,22 @@ MIDDLEWARE_CLASSES = [
'django.middleware.locale.LocaleMiddleware', 'django.middleware.locale.LocaleMiddleware',
] ]
TEMPLATES = [
{
'APP_DIRS': True,
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages'
]
}
}
]
ROOT_URLCONF = 'cas_server.tests.urls' ROOT_URLCONF = 'cas_server.tests.urls'
# Database # Database

View file

@ -60,6 +60,24 @@ class FederatedUserTestCase(TestCase, UserModels, FederatedIendityProviderModel)
with self.assertRaises(models.FederatedUser.DoesNotExist): with self.assertRaises(models.FederatedUser.DoesNotExist):
models.FederatedUser.objects.get(username="test2") models.FederatedUser.objects.get(username="test2")
def test_json_attributes(self):
"""test the json storage of ``atrributs`` in ``_attributs``"""
provider = models.FederatedIendityProvider.objects.get(suffix="example.com")
user = models.FederatedUser.objects.create(
username=settings.CAS_TEST_USER,
provider=provider,
attributs=settings.CAS_TEST_ATTRIBUTES,
ticket=""
)
self.assertEqual(utils.json_encode(settings.CAS_TEST_ATTRIBUTES), user._attributs)
user.delete()
user = models.FederatedUser.objects.create(
username=settings.CAS_TEST_USER,
provider=provider,
ticket=""
)
self.assertIsNone(user._attributs)
self.assertIsNone(user.attributs)
class FederateSLOTestCase(TestCase, UserModels): class FederateSLOTestCase(TestCase, UserModels):
"""test for the federated SLO model""" """test for the federated SLO model"""
@ -231,3 +249,25 @@ class TicketTestCase(TestCase, UserModels, BaseServicePattern):
self.assertTrue(b'logoutRequest' in params and params[b'logoutRequest']) self.assertTrue(b'logoutRequest' in params and params[b'logoutRequest'])
# only 1 ticket remain in the db # only 1 ticket remain in the db
self.assertEqual(len(models.ServiceTicket.objects.all()), 1) self.assertEqual(len(models.ServiceTicket.objects.all()), 1)
def test_json_attributes(self):
"""test the json storage of ``atrributs`` in ``_attributs``"""
# ge an authenticated client
client = get_auth_client()
# get the user associated to the client
user = self.get_user(client)
ticket = models.ServiceTicket.objects.create(
user=user,
service=self.service,
attributs=settings.CAS_TEST_ATTRIBUTES,
service_pattern=self.service_pattern
)
self.assertEqual(utils.json_encode(settings.CAS_TEST_ATTRIBUTES), ticket._attributs)
ticket.delete()
ticket = models.ServiceTicket.objects.create(
user=user,
service=self.service,
service_pattern=self.service_pattern
)
self.assertIsNone(ticket._attributs)
self.assertIsNone(ticket.attributs)

View file

@ -12,16 +12,21 @@
"""Some utils functions for tests""" """Some utils functions for tests"""
from cas_server.default_settings import settings from cas_server.default_settings import settings
import django
from django.test import Client from django.test import Client
from django.template import loader, Context from django.template import loader
from django.utils import timezone from django.utils import timezone
if django.VERSION < (1, 8):
from django.template import Context
else:
Context = lambda x:x
import cgi import cgi
import six import six
from threading import Thread from threading import Thread
from lxml import etree from lxml import etree
from six.moves import BaseHTTPServer from six.moves import BaseHTTPServer
from six.moves.urllib.parse import urlparse, parse_qsl from six.moves.urllib.parse import urlparse, parse_qsl, parse_qs
from datetime import timedelta from datetime import timedelta
from cas_server import models from cas_server import models
@ -166,7 +171,7 @@ class HttpParamsHandler(BaseHTTPServer.BaseHTTPRequestHandler):
postvars = cgi.parse_multipart(self.rfile, pdict) postvars = cgi.parse_multipart(self.rfile, pdict)
elif ctype == 'application/x-www-form-urlencoded': elif ctype == 'application/x-www-form-urlencoded':
length = int(self.headers.get('content-length')) length = int(self.headers.get('content-length'))
postvars = cgi.parse_qs(self.rfile.read(length), keep_blank_values=1) postvars = parse_qs(self.rfile.read(length), keep_blank_values=1)
else: else:
postvars = {} postvars = {}
self.server.PARAMS = postvars self.server.PARAMS = postvars

View file

@ -16,8 +16,10 @@ from django.views.decorators.debug import sensitive_post_parameters, sensitive_v
from cas_server import views from cas_server import views
app_name = "cas_server"
urlpatterns = [ urlpatterns = [
url(r'^$', RedirectView.as_view(pattern_name="cas_server:login")), url(r'^$', RedirectView.as_view(pattern_name="cas_server:login", permanent=False)),
url( url(
'^login$', '^login$',
sensitive_post_parameters('password')( sensitive_post_parameters('password')(

View file

@ -3,6 +3,7 @@ tox>=1.8.1
pytest>=2.6.4 pytest>=2.6.4
pytest-django>=2.8.0 pytest-django>=2.8.0
pytest-pythonpath>=0.3 pytest-pythonpath>=0.3
pytest-warnings
pytest-cov>=2.2.1 pytest-cov>=2.2.1
requests>=2.4 requests>=2.4
requests_futures>=0.9.5 requests_futures>=0.9.5

View file

@ -66,5 +66,5 @@ if __name__ == '__main__':
download_url="https://github.com/nitmir/django-cas-server/releases", download_url="https://github.com/nitmir/django-cas-server/releases",
zip_safe=False, zip_safe=False,
setup_requires=['pytest-runner'], setup_requires=['pytest-runner'],
tests_require=['pytest', 'pytest-django', 'pytest-pythonpath'], tests_require=['pytest', 'pytest-django', 'pytest-pythonpath', 'pytest-warnings', 'mock>=1'],
) )

View file

@ -31,7 +31,7 @@ whitelist_externals=
[testenv] [testenv]
commands= commands=
py.test {posargs:cas_server/tests/} py.test -rw {posargs:cas_server/tests/}
{[post_cmd]commands} {[post_cmd]commands}
whitelist_externals={[post_cmd]whitelist_externals} whitelist_externals={[post_cmd]whitelist_externals}