Add login tests

This commit is contained in:
Christian Cueni 2019-10-02 13:29:06 +02:00
parent 7e92753977
commit fb225b926d
3 changed files with 73 additions and 10 deletions

View File

@ -10,7 +10,7 @@
import re import re
import graphene import graphene
from django.contrib.auth import authenticate, login from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.forms import PasswordResetForm from django.contrib.auth.forms import PasswordResetForm
from django.contrib.auth.views import PasswordResetView, PasswordResetConfirmView, INTERNAL_RESET_URL_TOKEN from django.contrib.auth.views import PasswordResetView, PasswordResetConfirmView, INTERNAL_RESET_URL_TOKEN
from graphene import relay from graphene import relay

View File

@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
#
# ITerativ GmbH
# http://www.iterativ.ch/
#
# Copyright (c) 2019 ITerativ GmbH. All rights reserved.
#
# Created on 2019-10-02
# @author: chrigu <christian.cueni@iterativ.ch>
from django.contrib.sessions.middleware import SessionMiddleware
from django.test import TestCase, RequestFactory
from graphene.test import Client
from api.schema_public import schema
from core.factories import UserFactory
class PasswordResetTests(TestCase):
def setUp(self):
self.user = UserFactory(username='aschi@iterativ.ch', email='aschi@iterativ.ch')
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, username, password):
mutation = '''
mutation Login($input: LoginInput!){
login(input: $input) {
success
errors {
field
}
}
}
'''
return self.client.execute(mutation, variables={
'input': {
'usernameInput': username,
'passwordInput': password
}
})
def test_user_can_login(self):
password = 'test123'
self.user.set_password(password)
self.user.save()
result = self.make_login_mutation(self.user.email, password)
self.assertTrue(result.get('data').get('login').get('success'))
self.assertTrue(self.user.is_authenticated)
def test_user_cannot_login_with_invalid_password(self):
password = 'test123'
self.user.set_password(password)
self.user.save()
result = self.make_login_mutation(self.user.email, 'test1234')
self.assertFalse(result.get('data').get('login').get('success'))

View File

@ -91,8 +91,8 @@ class PasswordResetTests(TestCase):
def test_user_can_initiate_password(self): def test_user_can_initiate_password(self):
result = self.make_reset_mutation(self.user.email) result = self.make_reset_mutation(self.user.email)
self.assertEqual(len(mail.outbox), 1) self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].subject.startswith('Passwort auf'), True) self.assertTrue(mail.outbox[0].subject.startswith('Passwort auf'))
self.assertEqual(result.get('data').get('passwordReset').get('success'), True) self.assertTrue(result.get('data').get('passwordReset').get('success'))
def test_user_can_verify_and_set_password(self): def test_user_can_verify_and_set_password(self):
token_generator = PasswordResetTokenGenerator() token_generator = PasswordResetTokenGenerator()
@ -100,13 +100,12 @@ class PasswordResetTests(TestCase):
uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)).decode() uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)).decode()
result = self.make_set_verify_mutation(uidb64, token) result = self.make_set_verify_mutation(uidb64, token)
self.assertEqual(result.get('data').get('passwordResetVerify').get('success'), True) self.assertTrue(result.get('data').get('passwordResetVerify').get('success'))
new_password = 'Abcd1234!' new_password = 'Abcd1234!'
set_result = self.make_set_password_mutation(uidb64, new_password, new_password) set_result = self.make_set_password_mutation(uidb64, new_password, new_password)
print(set_result) self.assertTrue(set_result.get('data').get('passwordResetSetPassword').get('success'))
self.assertEqual(set_result.get('data').get('passwordResetSetPassword').get('success'), True)
def test_user_cannot_use_unsafe_password(self): def test_user_cannot_use_unsafe_password(self):
token_generator = PasswordResetTokenGenerator() token_generator = PasswordResetTokenGenerator()
@ -114,12 +113,12 @@ class PasswordResetTests(TestCase):
uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)).decode() uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)).decode()
result = self.make_set_verify_mutation(uidb64, token) result = self.make_set_verify_mutation(uidb64, token)
self.assertEqual(result.get('data').get('passwordResetVerify').get('success'), True) self.assertTrue(result.get('data').get('passwordResetVerify').get('success'))
new_password = 'test' new_password = 'test'
set_result = self.make_set_password_mutation(uidb64, new_password, new_password) set_result = self.make_set_password_mutation(uidb64, new_password, new_password)
self.assertEqual(set_result.get('data').get('passwordResetSetPassword').get('success'), False) self.assertFalse(set_result.get('data').get('passwordResetSetPassword').get('success'),)
def test_new_passwords_must_match(self): def test_new_passwords_must_match(self):
token_generator = PasswordResetTokenGenerator() token_generator = PasswordResetTokenGenerator()
@ -127,10 +126,10 @@ class PasswordResetTests(TestCase):
uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)).decode() uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)).decode()
result = self.make_set_verify_mutation(uidb64, token) result = self.make_set_verify_mutation(uidb64, token)
self.assertEqual(result.get('data').get('passwordResetVerify').get('success'), True) self.assertTrue(result.get('data').get('passwordResetVerify').get('success'))
new_password = 'Abcd1234!' new_password = 'Abcd1234!'
new_password_confirm = 'Abcd1234!1' new_password_confirm = 'Abcd1234!1'
set_result = self.make_set_password_mutation(uidb64, new_password, new_password_confirm) set_result = self.make_set_password_mutation(uidb64, new_password, new_password_confirm)
self.assertEqual(set_result.get('data').get('passwordResetSetPassword').get('success'), False) self.assertFalse(set_result.get('data').get('passwordResetSetPassword').get('success'))