From 09fbaa7b3dc7931c2ead163678a4deb3c9f0ffa4 Mon Sep 17 00:00:00 2001 From: juanifioren Date: Wed, 11 Feb 2015 15:37:51 -0300 Subject: [PATCH] Add some tests. --- README.rst | 12 ++++++++- openid_provider/tests/__init__.py | 0 openid_provider/tests/test_code_flow.py | 29 ++++++++++++++++++++ openid_provider/tests/utils.py | 36 +++++++++++++++++++++++++ openid_provider/urls.py | 8 +++--- openid_provider/views.py | 1 - setup.py | 6 ++--- 7 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 openid_provider/tests/__init__.py create mode 100644 openid_provider/tests/test_code_flow.py create mode 100644 openid_provider/tests/utils.py diff --git a/README.rst b/README.rst index d542338..4890a62 100644 --- a/README.rst +++ b/README.rst @@ -19,7 +19,7 @@ Install the package using pip. .. code:: bash - pip install git+https://github.com/juanifioren/django-openid-provider.git#egg=openid_provider + pip install git+https://github.com/juanifioren/django-oidc-provider.git#egg=openid_provider Add it to your apps. @@ -216,6 +216,16 @@ You can copy the sample html here and edit them with your own styles.

{{ error }}

{{ description }}

+************* +Running tests +************* + +Just run them as normal Django tests. + +.. code:: bash + + $ python manage.py test openid_provider + ************ Contributing ************ diff --git a/openid_provider/tests/__init__.py b/openid_provider/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/openid_provider/tests/test_code_flow.py b/openid_provider/tests/test_code_flow.py new file mode 100644 index 0000000..0aada01 --- /dev/null +++ b/openid_provider/tests/test_code_flow.py @@ -0,0 +1,29 @@ +from django.core.urlresolvers import reverse +from django.test import RequestFactory +from django.test import TestCase +from openid_provider.tests.utils import * +from openid_provider.views import * + + +class CodeFlowTestCase(TestCase): + + def setUp(self): + self.factory = RequestFactory() + self.user = create_fake_user() + self.client = create_fake_client(response_type='code') + + def test_authorize_invalid_parameters(self): + """ + If the request fails due to a missing, invalid, or mismatching + redirection URI, or if the client identifier is missing or invalid, + the authorization server SHOULD inform the resource owner of the error. + + See: https://tools.ietf.org/html/rfc6749#section-4.1.2.1 + """ + url = reverse('openid_provider:authorize') + request = self.factory.get(url) + + response = AuthorizeView.as_view()(request) + + self.assertEqual(response.status_code, 200) + self.assertEqual(bool(response.content), True) \ No newline at end of file diff --git a/openid_provider/tests/utils.py b/openid_provider/tests/utils.py new file mode 100644 index 0000000..e1629b7 --- /dev/null +++ b/openid_provider/tests/utils.py @@ -0,0 +1,36 @@ +from django.contrib.auth.models import User +from openid_provider.models import * + + +def create_fake_user(): + """ + Create a test user. + + Return a User object. + """ + user = User() + user.username = 'johndoe' + user.email = 'johndoe@example.com' + user.set_password('1234') + + user.save() + + return user + +def create_fake_client(response_type): + """ + Create a test client, response_type argument MUST be: + 'code', 'id_token' or 'id_token token'. + + Return a Client object. + """ + client = Client() + client.name = 'Some Client' + client.client_id = '123' + client.client_secret = '456' + client.response_type = response_type + client.redirect_uris = ['http://example.com/'] + + client.save() + + return client diff --git a/openid_provider/urls.py b/openid_provider/urls.py index 3b0183f..31d485a 100644 --- a/openid_provider/urls.py +++ b/openid_provider/urls.py @@ -1,12 +1,12 @@ from django.conf.urls import patterns, include, url from django.views.decorators.csrf import csrf_exempt - from openid_provider.views import * urlpatterns = patterns('', - url(r'^authorize/$', AuthorizeView.as_view(), name='authorize'), - url(r'^token/$', csrf_exempt(TokenView.as_view()), name='token'), - url(r'^userinfo/$', csrf_exempt(userinfo), name='userinfo'), + + url(r'^authorize/$', AuthorizeView.as_view(), name='authorize'), + url(r'^token/$', csrf_exempt(TokenView.as_view()), name='token'), + url(r'^userinfo/$', csrf_exempt(userinfo), name='userinfo'), ) \ No newline at end of file diff --git a/openid_provider/views.py b/openid_provider/views.py index 27e7ec9..ecb2309 100644 --- a/openid_provider/views.py +++ b/openid_provider/views.py @@ -1,5 +1,4 @@ from django.contrib.auth.views import redirect_to_login -from django.core.urlresolvers import reverse from django.http import HttpResponse, HttpResponseRedirect, JsonResponse from django.shortcuts import render from django.template.loader import render_to_string diff --git a/setup.py b/setup.py index a6843c6..cdbf314 100644 --- a/setup.py +++ b/setup.py @@ -8,14 +8,14 @@ with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme: os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) setup( - name='django-openid-provider', - version='0.1', + name='django-oidc-provider', + version='0.0.0', packages=['openid_provider'], include_package_data=True, license='MIT License', description='A simple OpenID Connect Provider implementation for Djangonauts.', long_description=README, - url='http://github.com/juanifioren/django-openid-provider', + url='http://github.com/juanifioren/django-oidc-provider', author='Juan Ignacio Fiorentino', author_email='juanifioren@gmail.com', classifiers=[