Add pytest-warning to tests and correct some warnings, complete coverage (essentially branch)
This commit is contained in:
parent
b168e0a642
commit
6eea76d984
11 changed files with 78 additions and 15 deletions
2
Makefile
2
Makefile
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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">×</button>
|
|
||||||
{{ message }}
|
{{ message }}
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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')(
|
||||||
|
|
|
@ -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
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -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'],
|
||||||
)
|
)
|
||||||
|
|
2
tox.ini
2
tox.ini
|
@ -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}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue