authentic/tests/conftest.py

87 lines
2.3 KiB
Python

import json
import pytest
import django_webtest
from django.contrib.auth import get_user_model
from django_rbac.utils import get_ou_model
from authentic2_auth_fc.models import FcAccount
CARTMAN_FC_INFO = {
"token": {
"access_token": "cartmane_access_token",
"token_type": "Bearer",
"expires_in": 1200,
"id_token": "cartman_token_id"
},
"sub": "c11661ed00014db58149c8a886c8180d",
"user_info": {
"birthcountry": "99404",
"birthdate": "2006-06-06",
"birthplace": "southpark",
"email": "ecartman@ou_southpark.org",
"family_name": "CARTMAN",
"gender": "male",
"given_name": "Eric",
"preferred_username": "CARTMAN",
"sub": "c11661ed00014db58149c8a886c8180d"
}
}
def create_user(**kwargs):
User = get_user_model()
password = kwargs.pop('password', None) or kwargs['username']
federation = kwargs.pop('federation', None)
user, created = User.objects.get_or_create(**kwargs)
if password:
user.set_password(password)
user.save()
if federation:
create_fc_federation(user, federation)
return user
def create_fc_federation(user, info):
kwargs = {
'user': user,
'token': json.dumps(info['token']),
'user_info': json.dumps(info['user_info']),
'sub': info['sub']
}
return FcAccount.objects.create(**kwargs)
@pytest.fixture
def app(request, db):
wtm = django_webtest.WebTestMixin()
wtm._patch_settings()
request.addfinalizer(wtm._unpatch_settings)
return django_webtest.DjangoTestApp(extra_environ={'HTTP_HOST': 'localhost'})
@pytest.fixture
def fc_settings(settings):
settings.A2_FC_ENABLE = True
settings.A2_FC_CLIENT_ID = 'xxx'
settings.A2_FC_CLIENT_SECRET = 'yyy'
return settings
@pytest.fixture
def ou_southpark(db):
OU = get_ou_model()
return OU.objects.create(name='southpark', slug='southpark')
@pytest.fixture
def admin(db):
return create_user(username='admin', is_superuser=True, is_staff=True)
@pytest.fixture
def user_cartman(db, ou_southpark):
return create_user(username='ecartman', first_name='eric', last_name='cartman',
email='ecartman@southpark.org', ou=ou_southpark, federation=CARTMAN_FC_INFO)