90fe9e27fb3afdd177236cd1d01381b3d22749a8
1 # -*- coding: utf-8 -*-
6 from django
.core
.urlresolvers
import reverse
8 from django
.contrib
.auth
.models
import User
10 from auf
.django
.saml
import settings
11 from auf
.django
.references
import models
as ref
13 from .middleware
import LOGGED_USER_EMAIL
, LOGGED_USER_GN
, LOGGED_USER_SN
14 from .common
import CommonTest
17 class PermissionTest(CommonTest
):
19 Teste les outils de sécurisation.
22 def test_employe_required_anonymous(self
):
24 Test le decorateur sans utilisateur connecté.
26 url
= self
.anonymize(reverse('test_employe_required'))
27 response
= self
.client
.get(url
)
28 self
.assertEqual(response
.status_code
, 302)
30 def test_employe_required_authenticated(self
):
32 Test le decorateur avec un utilisateur connecté.
34 url
= reverse('test_employe_required')
35 response
= self
.client
.get(url
)
36 self
.assertEqual(response
.status_code
, 403)
38 def test_employe_required_ok(self
):
40 Test le decorateur avec un employé connecté.
43 courriel
=LOGGED_USER_EMAIL
).save()
44 url
= reverse('test_employe_required')
45 response
= self
.client
.get(url
)
46 self
.assertEqual(response
.status_code
, 200)
48 def test_login_required(self
):
50 Test le décorateur de connexion requise.
52 url
= self
.anonymize(reverse('test_login_required'))
53 response
= self
.client
.get(url
)
54 self
.assertEqual(response
.status_code
, 302)
57 class AdminTest(CommonTest
):
59 Teste le comportement de l'admin avec l'IDP.
62 def test_anonymize(self
):
64 Test la fonction qui ajoute un params GET.
66 url
= self
.anonymize(reverse('admin:index'))
67 self
.assertEqual(url
.count('?'), 1)
69 def test_admin_index_anonymous(self
):
71 La page de login de l'admin doît être désactivée.
72 Il n'y a pas de redirection vers le login.
74 url
= self
.anonymize(reverse('admin:index'))
75 response
= self
.client
.get(url
)
77 response
['location'].count('?'),
80 self
.assertEqual(response
.status_code
, 302)
81 location
, dummy
= self
.redirectize(response
['location']).split('?')
82 self
.assertEqual(location
, settings
.SAML_MELLON_LOGIN_URL
)
84 def test_admin_index_authenticated(self
):
86 L'admin est inacessible par défaut, mais le user est crée à la volée.
88 url
= reverse('admin:index')
89 response
= self
.client
.get(url
)
90 self
.assertEqual(response
.status_code
, 403)
92 self
.assertEqual(User
.objects
.count(), 1)
93 user
= User
.objects
.all()[0]
94 email
= LOGGED_USER_EMAIL
.replace('@auf.org', '')
95 self
.assertEqual(user
.username
, email
,)
96 self
.assertEqual(user
.email
, LOGGED_USER_EMAIL
,)
97 self
.assertEqual(user
.first_name
, LOGGED_USER_GN
)
98 self
.assertEqual(user
.last_name
, LOGGED_USER_SN
)
100 def test_admin_login(self
):
102 Test l'accès à l'admin selon le flag is_staff du compte local.
104 url
= reverse('admin:index')
106 user
= User
.objects
.all()[0]
110 response
= self
.client
.get(url
)
111 self
.assertEqual(response
.status_code
, 200)
113 def test_admin_logout(self
):
115 Test la redirection du logout local puis au IdP
117 url
= reverse('admin:index')
119 user
= User
.objects
.all()[0]
123 url
= reverse('admin:logout')
124 response
= self
.client
.get(url
)
125 location
, qs
= self
.redirectize(response
['location']).split('?')
126 self
.assertEqual(response
.status_code
, 302)
127 self
.assertEqual(location
, reverse('local_logout'))
130 class TemplateTagTest(CommonTest
):
132 Teste les fonctionnalités des templatetags SAML.
136 super(TemplateTagTest
, self
).setUp()
137 self
.url
= reverse('test_tags')
138 self
.response
= self
.client
.get(self
.url
)
140 def test_templatetag_login_var(self
):
142 Test le rendu du templatetag *mellon_login_url* avec une variable en
145 regex
= "test_templatetag_login_var:(.*)\?%s=(.*)\n" % (
146 settings
.SAML_REDIRECT_FIELD_NAME
, )
147 m
= re
.search(regex
, self
.response
.content
)
148 login_url
, redirect_url
= m
.groups()
149 self
.assertEqual(login_url
, settings
.SAML_MELLON_LOGIN_URL
)
150 self
.assertEqual(redirect_url
, urllib
.quote_plus(self
.url
))
152 def test_templatetag_login_default(self
):
154 Test le rendu du templatetag *mellon_login_url* sans paramètre.
156 regex
= "test_templatetag_login_default:(.*)\?%s=(.*)\n" % (
157 settings
.SAML_REDIRECT_FIELD_NAME
, )
158 m
= re
.search(regex
, self
.response
.content
)
159 login_url
, redirect_url
= m
.groups()
160 self
.assertEqual(login_url
, settings
.SAML_MELLON_LOGIN_URL
)
161 self
.assertEqual(redirect_url
, urllib
.quote_plus(self
.url
))
163 def test_templatetag_login_string(self
):
165 Test le rendu du templatetag *mellon_login_url* avec paramètre string.
167 regex
= "test_templatetag_login_string:(.*)\?%s=(.*)\n" % (
168 settings
.SAML_REDIRECT_FIELD_NAME
, )
169 m
= re
.search(regex
, self
.response
.content
)
170 login_url
, redirect_url
= m
.groups()
171 self
.assertEqual(login_url
, settings
.SAML_MELLON_LOGIN_URL
)
172 self
.assertEqual(redirect_url
, urllib
.quote_plus('/admin'))
174 def test_templatetag_logout_var(self
):
176 Test le rendu du templatetag *mellon_logout_url* avec une variable en
179 regex
= "test_templatetag_logout_var:(.*)\?%s=(.*)\n" % (
180 settings
.SAML_REDIRECT_FIELD_NAME
, )
181 m
= re
.search(regex
, self
.response
.content
)
182 logout_url
, redirect_url
= m
.groups()
183 self
.assertEqual(logout_url
, reverse('local_logout'))
184 self
.assertEqual(redirect_url
, urllib
.quote_plus(self
.url
))
186 def test_templatetag_logout_default(self
):
188 Test le rendu du templatetag *mellon_logout_url* sans paramètre.
190 regex
= "test_templatetag_logout_default:(.*)\?%s=(.*)\n" % (
191 settings
.SAML_REDIRECT_FIELD_NAME
, )
192 m
= re
.search(regex
, self
.response
.content
)
193 logout_url
, redirect_url
= m
.groups()
194 self
.assertEqual(logout_url
, reverse('local_logout'))
197 urllib
.quote_plus(settings
.SAML_LOGOUT_REDIRECT_URL
))
199 def test_templatetag_logout_string(self
):
201 Test le rendu du templatetag *mellon_logout_url* avec paramètre string.
203 regex
= "test_templatetag_logout_string:(.*)\?%s=(.*)\n" % (
204 settings
.SAML_REDIRECT_FIELD_NAME
, )
205 m
= re
.search(regex
, self
.response
.content
)
206 logout_url
, redirect_url
= m
.groups()
207 self
.assertEqual(logout_url
, reverse('local_logout'))
208 self
.assertEqual(redirect_url
, urllib
.quote_plus('/admin'))