Projet

Général

Profil

0003-tests-initial-adapter-tests.patch

Frédéric Péters, 07 mai 2015 11:33

Télécharger (3,88 ko)

Voir les différences:

Subject: [PATCH 3/5] tests: initial adapter tests

 README                        |  8 +++++
 mellon/tests.py               |  7 ----
 tests/test_default_adapter.py | 79 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 87 insertions(+), 7 deletions(-)
 delete mode 100644 mellon/tests.py
 create mode 100644 tests/test_default_adapter.py
README
249 249

  
250 250
Timeout in seconds before automatically redirecting the user to the
251 251
continue URL when authentication has failed. Default is 120 seconds.
252

  
253

  
254
Tests
255
=====
256

  
257
Unit tests are written using pytest, and can be run with:
258

  
259
   DJANGO_SETTINGS_MODULE=testsettings py.test
mellon/tests.py
1
from django.test import TestCase
2

  
3
# Create your tests here.
4

  
5
class MellonTestCase(TestCase):
6
    def test_coin(self):
7
        pass
tests/test_default_adapter.py
1
import pytest
2

  
3
from django.conf import settings
4
from django.contrib import auth
5

  
6
from mellon.adapters import DefaultAdapter
7

  
8
pytestmark = pytest.mark.django_db
9

  
10
idp = {}
11
saml_attributes = {
12
    'name_id_content': 'x'*32,
13
    'issuer': 'https://idp.example.net/saml/metadata',
14
    'username': ['foobar'],
15
    'email': ['test@example.net'],
16
    'first_name': ['Foo'],
17
    'last_name': ['Bar'],
18
    'is_superuser': ['true'],
19
}
20

  
21
def test_format_username(settings):
22
    adapter = DefaultAdapter()
23
    assert adapter.format_username(idp, {}) == None
24
    assert adapter.format_username(idp, saml_attributes) == 'x'*32 + '@saml'
25
    settings.MELLON_USERNAME_TEMPLATE = '{attributes[name_id_content]}'
26
    assert adapter.format_username(idp, saml_attributes) == 'x'*32
27
    settings.MELLON_USERNAME_TEMPLATE = '{attributes[username][0]}'
28
    assert adapter.format_username(idp, saml_attributes) == 'foobar'
29

  
30
def test_lookup_user(settings):
31
    User = auth.get_user_model()
32
    adapter = DefaultAdapter()
33
    user = adapter.lookup_user(idp, saml_attributes)
34
    assert user is not None
35

  
36
    user2 = adapter.lookup_user(idp, saml_attributes)
37
    assert user.id == user2.id
38

  
39
    User.objects.all().delete()
40
    assert User.objects.count() == 0
41

  
42
    settings.MELLON_PROVISION = False
43
    user = adapter.lookup_user(idp, saml_attributes)
44
    assert user is None
45
    assert User.objects.count() == 0
46

  
47
def test_provision(settings):
48
    User = auth.get_user_model()
49
    adapter = DefaultAdapter()
50
    settings.MELLON_ATTRIBUTE_MAPPING = {
51
        'email': '{attributes[email][0]}',
52
        'first_name': '{attributes[first_name][0]}',
53
        'last_name': '{attributes[last_name][0]}',
54
    }
55
    user = User(username='xx')
56
    user.save()
57
    adapter.provision(user, idp, saml_attributes)
58
    assert user.first_name == 'Foo'
59
    assert user.last_name == 'Bar'
60
    assert user.email == 'test@example.net'
61
    assert user.is_superuser == False
62
    User.objects.all().delete()
63

  
64
    settings.MELLON_SUPERUSER_MAPPING = {
65
        'is_superuser': 'true',
66
    }
67
    user = User(username='xx')
68
    user.save()
69
    adapter.provision(user, idp, saml_attributes)
70
    assert user.is_superuser == True
71
    User.objects.all().delete()
72

  
73
    local_saml_attributes = saml_attributes.copy()
74
    del local_saml_attributes['email']
75
    user = User(username='xx')
76
    user.save()
77
    adapter.provision(user, idp, local_saml_attributes)
78
    assert not user.email
79
    User.objects.all().delete()
0
-