Full coverage for validate view
This commit is contained in:
parent
87a877b91c
commit
6d610d5aa6
@ -432,6 +432,22 @@ class LoginTestCase(TestCase):
|
|||||||
self.assertEqual(response.status_code, 302)
|
self.assertEqual(response.status_code, 302)
|
||||||
self.assertTrue(response["Location"].startswith("%s?ticket=" % service))
|
self.assertTrue(response["Location"].startswith("%s?ticket=" % service))
|
||||||
|
|
||||||
|
def test_service_user_field_evaluate_to_false(self):
|
||||||
|
"""
|
||||||
|
Test using a user attribute as username:
|
||||||
|
case the attribute exists but evaluate to False
|
||||||
|
"""
|
||||||
|
service = "https://field_needed_success.example.com"
|
||||||
|
saved_nom = settings.CAS_TEST_ATTRIBUTES["nom"]
|
||||||
|
settings.CAS_TEST_ATTRIBUTES["nom"] = []
|
||||||
|
|
||||||
|
client = get_auth_client()
|
||||||
|
response = client.get("/login", {"service": service})
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertTrue(b"The attribut nom is needed to use that service" in response.content)
|
||||||
|
|
||||||
|
settings.CAS_TEST_ATTRIBUTES["nom"] = saved_nom
|
||||||
|
|
||||||
def test_gateway(self):
|
def test_gateway(self):
|
||||||
"""test gateway parameter"""
|
"""test gateway parameter"""
|
||||||
|
|
||||||
@ -820,17 +836,25 @@ class AuthTestCase(TestCase):
|
|||||||
|
|
||||||
|
|
||||||
class ValidateTestCase(TestCase):
|
class ValidateTestCase(TestCase):
|
||||||
|
"""tests for the validate view"""
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
"""preparing test context"""
|
||||||
settings.CAS_AUTH_CLASS = 'cas_server.auth.TestAuthUser'
|
settings.CAS_AUTH_CLASS = 'cas_server.auth.TestAuthUser'
|
||||||
self.service = 'https://www.example.com'
|
self.service = 'https://www.example.com'
|
||||||
self.service_pattern = models.ServicePattern.objects.create(
|
self.service_pattern = models.ServicePattern.objects.create(
|
||||||
name="example",
|
name="example",
|
||||||
pattern="^https://www\.example\.com(/.*)?$"
|
pattern="^https://www\.example\.com(/.*)?$"
|
||||||
)
|
)
|
||||||
|
self.service_user_field = "https://user_field.example.com"
|
||||||
|
self.service_pattern_user_field = models.ServicePattern.objects.create(
|
||||||
|
name="user field",
|
||||||
|
pattern="^https://user_field\.example\.com(/.*)?$",
|
||||||
|
user_field="alias"
|
||||||
|
)
|
||||||
models.ReplaceAttributName.objects.create(name="*", service_pattern=self.service_pattern)
|
models.ReplaceAttributName.objects.create(name="*", service_pattern=self.service_pattern)
|
||||||
|
|
||||||
def test_validate_view_ok(self):
|
def test_validate_view_ok(self):
|
||||||
|
"""test for a valid (ticket, service)"""
|
||||||
ticket = get_user_ticket_request(self.service)[1]
|
ticket = get_user_ticket_request(self.service)[1]
|
||||||
|
|
||||||
client = Client()
|
client = Client()
|
||||||
@ -839,6 +863,7 @@ class ValidateTestCase(TestCase):
|
|||||||
self.assertEqual(response.content, b'yes\ntest\n')
|
self.assertEqual(response.content, b'yes\ntest\n')
|
||||||
|
|
||||||
def test_validate_view_badservice(self):
|
def test_validate_view_badservice(self):
|
||||||
|
"""test for a valid ticket but bad service"""
|
||||||
ticket = get_user_ticket_request(self.service)[1]
|
ticket = get_user_ticket_request(self.service)[1]
|
||||||
|
|
||||||
client = Client()
|
client = Client()
|
||||||
@ -850,6 +875,7 @@ class ValidateTestCase(TestCase):
|
|||||||
self.assertEqual(response.content, b'no\n')
|
self.assertEqual(response.content, b'no\n')
|
||||||
|
|
||||||
def test_validate_view_badticket(self):
|
def test_validate_view_badticket(self):
|
||||||
|
"""test for a bad ticket but valid service"""
|
||||||
get_user_ticket_request(self.service)
|
get_user_ticket_request(self.service)
|
||||||
|
|
||||||
client = Client()
|
client = Client()
|
||||||
@ -860,6 +886,33 @@ class ValidateTestCase(TestCase):
|
|||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertEqual(response.content, b'no\n')
|
self.assertEqual(response.content, b'no\n')
|
||||||
|
|
||||||
|
def test_validate_user_field_ok(self):
|
||||||
|
"""
|
||||||
|
test with a good user_field. A bad user_field (that evaluate to False)
|
||||||
|
wont happed cause it is filtered in the login view
|
||||||
|
"""
|
||||||
|
ticket = get_user_ticket_request(self.service_user_field)[1]
|
||||||
|
client = Client()
|
||||||
|
response = client.get(
|
||||||
|
'/validate',
|
||||||
|
{'ticket': ticket.value, 'service': self.service_user_field}
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertEqual(response.content, b'yes\ndemo1\n')
|
||||||
|
|
||||||
|
def test_validate_missing_parameter(self):
|
||||||
|
"""test with a missing GET parameter among [service, ticket]"""
|
||||||
|
ticket = get_user_ticket_request(self.service)[1]
|
||||||
|
|
||||||
|
client = Client()
|
||||||
|
params = {'ticket': ticket.value, 'service': self.service}
|
||||||
|
for key in ['ticket', 'service']:
|
||||||
|
send_params = params.copy()
|
||||||
|
del send_params[key]
|
||||||
|
response = client.get('/validate', send_params)
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertEqual(response.content, b'no\n')
|
||||||
|
|
||||||
|
|
||||||
class ValidateServiceTestCase(TestCase):
|
class ValidateServiceTestCase(TestCase):
|
||||||
|
|
||||||
|
@ -596,12 +596,9 @@ class Validate(View):
|
|||||||
ticket.service_pattern.user_field
|
ticket.service_pattern.user_field
|
||||||
)
|
)
|
||||||
if isinstance(username, list):
|
if isinstance(username, list):
|
||||||
try:
|
# the list not empty because we wont generate a ticket with a user_field
|
||||||
username = username[0]
|
# that evaluate to False
|
||||||
except IndexError:
|
username = username[0]
|
||||||
username = None
|
|
||||||
if not username:
|
|
||||||
username = ""
|
|
||||||
else:
|
else:
|
||||||
username = ticket.user.username
|
username = ticket.user.username
|
||||||
return HttpResponse("yes\n%s\n" % username, content_type="text/plain")
|
return HttpResponse("yes\n%s\n" % username, content_type="text/plain")
|
||||||
|
Loading…
Reference in New Issue
Block a user