-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Includes all the leg work for creating factories for the entire user object graph structure. A lot of django-allauth dependencies...
- Loading branch information
Showing
3 changed files
with
86 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
from django.contrib.auth.models import User | ||
from allauth.socialaccount.models import SocialAccount, SocialApp, SocialToken | ||
import factory | ||
|
||
from ..models import DataportenUser | ||
|
||
# See the direct inspiration of these factories here: | ||
# https://factoryboy.readthedocs.io/en/latest/recipes.html#example-django-s-profile | ||
|
||
|
||
class SocialAccountFactory(factory.django.DjangoModelFactory): | ||
|
||
user = factory.SubFactory( | ||
'dataporten.tests.factories.DataportenUserFactory', | ||
social_account=None, | ||
) | ||
social_token = factory.RelatedFactory( | ||
'dataporten.tests.factories.SocialTokenFactory', | ||
'account', | ||
) | ||
provider = 'dataporten' | ||
|
||
class Meta: | ||
model = SocialAccount | ||
|
||
|
||
class SocialAppFactory(factory.django.DjangoModelFactory): | ||
class Meta: | ||
model = SocialApp | ||
|
||
|
||
class SocialTokenFactory(factory.django.DjangoModelFactory): | ||
token = 'dummy_token' | ||
account = factory.SubFactory(SocialAccountFactory, social_token=None) | ||
app = factory.SubFactory(SocialAppFactory) | ||
|
||
class Meta: | ||
model = SocialToken | ||
|
||
|
||
class UserFactory(factory.django.DjangoModelFactory): | ||
class Meta: | ||
model = User | ||
|
||
|
||
class DataportenUserFactory(factory.django.DjangoModelFactory): | ||
social_account = factory.RelatedFactory(SocialAccountFactory, 'user') | ||
|
||
class Meta: | ||
model = DataportenUser |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,52 @@ | ||
import pytest | ||
|
||
from .factories import DataportenUserFactory | ||
from .utils import mock_usergroups_request | ||
from ..models import DataportenGroupManager | ||
from ..models import DataportenGroupManager, DataportenUser | ||
from ..tests.test_api import responses | ||
|
||
#== FIXTURES ==# | ||
|
||
@pytest.fixture | ||
@responses.activate | ||
def dataporten(): | ||
group_json = mock_usergroups_request() | ||
return DataportenGroupManager('dummy_token') | ||
|
||
@pytest.fixture | ||
@pytest.mark.django_db | ||
def dataporten_user(): | ||
return DataportenUserFactory() | ||
|
||
@pytest.fixture | ||
@pytest.mark.django_db | ||
def user(): | ||
return DataportenUserFactory.build() | ||
|
||
|
||
#== TESTS ==# | ||
|
||
def test_dataporten_courses(dataporten): | ||
assert 'EXPH0004' in dataporten.inactive_courses | ||
assert 'EXPH0004' not in dataporten.active_courses | ||
|
||
assert 'TMA4180' not in dataporten.inactive_courses | ||
assert 'TMA4180' in dataporten.active_courses | ||
|
||
|
||
@pytest.mark.django_db | ||
def test_dataporten_user(dataporten_user): | ||
assert dataporten_user.token == 'dummy_token' | ||
|
||
|
||
@pytest.mark.django_db | ||
def test_dataporten_user_validation(rf, user, dataporten_user): | ||
# pytest-django provides a RequestFactory fixture named rf | ||
request = rf.get('') | ||
assert DataportenUser.valid_request(request) == False | ||
|
||
request.user = user | ||
assert DataportenUser.valid_request(request) == False | ||
|
||
request.user = dataporten_user | ||
assert DataportenUser.valid_request(request) == True |