combo/tests/test_utils.py

99 lines
3.9 KiB
Python

import pytest
from combo.utils import (aes_hex_decrypt, aes_hex_encrypt, get_templated_url,
UnknownTemplateVariableError)
from django.conf import settings
from django.test import override_settings
from django.template import Context
from django.test.client import RequestFactory
from django.contrib.auth.models import AnonymousUser
class MockSAMLUser(object):
name_id = 'r2&d2'
class MockUser(object):
email = 'foo=3@example.net'
def is_authenticated(self):
return True
def __init__(self, samlized=True):
class MockSAMLUsers(object):
def exists(self):
return True
def first(self):
return MockSAMLUser()
if samlized:
self.saml_identifiers = MockSAMLUsers()
def test_crypto_url():
invoice_id = '12-1234'
key = settings.SECRET_KEY
assert aes_hex_decrypt(key, aes_hex_encrypt(key, invoice_id)) == invoice_id
def test_templated_url():
assert get_templated_url('foobar') == 'foobar'
assert get_templated_url('foo[]bar') == 'foo[]bar'
assert get_templated_url('foo[bar') == 'foo[bar'
assert get_templated_url('foo]bar') == 'foo]bar'
assert get_templated_url('foo]bar[') == 'foo]bar['
assert get_templated_url('foo]bar]') == 'foo]bar]'
assert get_templated_url('foobar[[]') == 'foobar['
assert get_templated_url('foobar[[]]') == 'foobar[]'
assert get_templated_url('foobar[[]test]') == 'foobar[test]'
with pytest.raises(UnknownTemplateVariableError):
get_templated_url('[test_url]')
with override_settings(TEMPLATE_VARS={'test_url': 'http://www.example.net'}):
assert get_templated_url('[test_url]') == 'http://www.example.net'
assert get_templated_url('[test_url]/hello') == 'http://www.example.net/hello'
# contexts without users
request = RequestFactory().get('/')
request.user = None
for context in (None, Context({}), Context({'request': None}),
Context({'request': request})):
with pytest.raises(UnknownTemplateVariableError) as e:
get_templated_url('NameID=[user_nameid]', context=context)
with pytest.raises(UnknownTemplateVariableError):
get_templated_url('email=[user_email]', context=context)
if context:
context['foobar'] = 'barfoo'
assert get_templated_url('[foobar]', context=context) == 'barfoo'
# contexts with users
request = RequestFactory().get('/')
request.user = MockUser(samlized=False)
context = Context({'request': request})
assert get_templated_url('email=[user_email]', context=context) == \
'email=foo%3D3%40example.net'
request.user = MockUser(samlized=True)
assert get_templated_url('email=[user_email]&NameID=[user_nameid]', context=context) == \
'email=foo%3D3%40example.net&NameID=r2%26d2'
# mixed sources
request = RequestFactory().get('/')
request.user = MockUser(samlized=True)
context = Context({'request': request})
context['foobar'] = 'barfoo'
assert get_templated_url('[foobar]/email=[user_email]&NameID=[user_nameid]',
context=context) == 'barfoo/email=foo%3D3%40example.net&NameID=r2%26d2'
with override_settings(TEMPLATE_VARS={'test_url': 'http://www.example.net'}):
request = RequestFactory().get('/')
request.user = MockUser(samlized=True)
context = Context({'foobar': 'barfoo', 'request': request})
assert get_templated_url('[test_url]/[foobar]/?NameID=[user_nameid]&email=[user_email]',
context=context) == \
'http://www.example.net/barfoo/?NameID=r2%26d2&email=foo%3D3%40example.net'
# packed contexts
request = RequestFactory().get('/')
request.user = None
context = Context({'request': request})
context.update({'foo': 'bar'})
ctx = Context()
ctx.update(context)
assert get_templated_url('[foo]', context=ctx) == 'bar'