116 lines
4.1 KiB
Python
116 lines
4.1 KiB
Python
from datetime import timedelta
|
|
from unittest.mock import patch
|
|
|
|
import requests
|
|
from django.conf import settings
|
|
from django.contrib.sessions.middleware import SessionMiddleware
|
|
from django.test import TestCase, RequestFactory
|
|
from django.utils import timezone
|
|
from graphene.test import Client
|
|
|
|
from api.schema_public import schema
|
|
from core.factories import UserFactory
|
|
from core.tests.mock_hep_data_factory import MockResponse, ME_DATA, VALID_STUDENT_ORDERS, VALID_TEACHERS_ORDERS, \
|
|
NOT_CONFIRMED_ME
|
|
from users.factories import LicenseFactory
|
|
from users.models import Role, User, SchoolClass, License, UserData
|
|
|
|
TOKEN = 'abcd12345!'
|
|
|
|
MYSKILLBOX_GROUP_ID_ME_DATA = ME_DATA.copy()
|
|
MYSKILLBOX_GROUP_ID_ME_DATA['group_id'] = settings.HEP_MYSKILLBOX_GROUP_ID
|
|
|
|
|
|
class LoginTests(TestCase):
|
|
def setUp(self):
|
|
self.user = UserFactory(username=ME_DATA['id'], email=ME_DATA['id'])
|
|
Role.objects.create_default_roles()
|
|
self.teacher_role = Role.objects.get_default_teacher_role()
|
|
|
|
request = RequestFactory().post('/')
|
|
|
|
# adding session
|
|
middleware = SessionMiddleware()
|
|
middleware.process_request(request)
|
|
request.session.save()
|
|
self.client = Client(schema=schema, context_value=request)
|
|
|
|
def make_login_mutation(self, token):
|
|
mutation = '''
|
|
mutation Login($input: LoginInput!){
|
|
login(input: $input) {
|
|
success
|
|
message
|
|
}
|
|
}
|
|
'''
|
|
|
|
return self.client.execute(mutation, variables={
|
|
'input': {
|
|
'tokenInput': token
|
|
}
|
|
})
|
|
|
|
@patch.object(HepClient, 'customer_me', return_value=ME_DATA)
|
|
def test_user_can_login_with_local_user_and_valid_local_license(self, me_mock):
|
|
|
|
self.user.hep_id = ME_DATA['id']
|
|
self.user.save()
|
|
|
|
now = timezone.now()
|
|
expiry_date = now + timedelta(100)
|
|
LicenseFactory(expire_date=expiry_date, licensee=self.user, for_role=self.teacher_role).save()
|
|
|
|
result = self.make_login_mutation(TOKEN)
|
|
|
|
self.assertTrue(result.get('data').get('login').get('success'))
|
|
self.assertTrue(self.user.is_authenticated)
|
|
|
|
reloaded_user = User.objects.get(pk=self.user.id)
|
|
self.assertEqual(reloaded_user.license_expiry_date, expiry_date.date())
|
|
|
|
@patch.object(HepClient, 'customer_me', return_value=ME_DATA)
|
|
def test_user_can_login_with_local_user_and_valid_local_licenses(self, me_mock):
|
|
|
|
self.user.hep_id = ME_DATA['id']
|
|
self.user.save()
|
|
|
|
now = timezone.now()
|
|
expiry_date1 = now + timedelta(100)
|
|
expiry_date2 = now + timedelta(110)
|
|
|
|
LicenseFactory(expire_date=expiry_date1, licensee=self.user, for_role=self.teacher_role).save()
|
|
LicenseFactory(expire_date=expiry_date2, licensee=self.user, for_role=self.teacher_role).save()
|
|
|
|
result = self.make_login_mutation(TOKEN)
|
|
|
|
self.assertTrue(result.get('data').get('login').get('success'))
|
|
self.assertTrue(self.user.is_authenticated)
|
|
|
|
reloaded_user = User.objects.get(pk=self.user.id)
|
|
self.assertEqual(reloaded_user.license_expiry_date, expiry_date2.date())
|
|
|
|
@patch.object(HepClient, 'customer_me', return_value=ME_DATA)
|
|
def test_user_can_login_with_local_user_and_valid_local_licenses(self, me_mock):
|
|
|
|
self.user.hep_id = ME_DATA['id']
|
|
self.user.save()
|
|
|
|
now = timezone.now()
|
|
expiry_date1 = now + timedelta(365)
|
|
expiry_date2 = now + timedelta(366)
|
|
|
|
LicenseFactory(expire_date=expiry_date1, licensee=self.user, for_role=self.teacher_role).save()
|
|
LicenseFactory(expire_date=expiry_date2, licensee=self.user, for_role=self.teacher_role).save()
|
|
|
|
result = self.make_login_mutation(TOKEN)
|
|
|
|
self.assertTrue(result.get('data').get('login').get('success'))
|
|
self.assertTrue(self.user.is_authenticated)
|
|
|
|
@patch.object(requests, 'post', return_value=MockResponse(401))
|
|
def test_user_with_no_login_cannot_login(self, post_mock):
|
|
result = self.make_login_mutation('some')
|
|
|
|
self.assertEqual(result.get('errors')[0].get('message'), 'invalid_credentials')
|