From fb225b926d134c5a211062d8b08c3d83603deda3 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Wed, 2 Oct 2019 13:29:06 +0200 Subject: [PATCH] Add login tests --- server/users/mutations_public.py | 2 +- server/users/tests/test_login.py | 64 +++++++++++++++++++++++ server/users/tests/test_password_reset.py | 17 +++--- 3 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 server/users/tests/test_login.py diff --git a/server/users/mutations_public.py b/server/users/mutations_public.py index 2e43b0b5..d02b6bc8 100644 --- a/server/users/mutations_public.py +++ b/server/users/mutations_public.py @@ -10,7 +10,7 @@ import re 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.views import PasswordResetView, PasswordResetConfirmView, INTERNAL_RESET_URL_TOKEN from graphene import relay diff --git a/server/users/tests/test_login.py b/server/users/tests/test_login.py new file mode 100644 index 00000000..c24dbe4a --- /dev/null +++ b/server/users/tests/test_login.py @@ -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 +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')) diff --git a/server/users/tests/test_password_reset.py b/server/users/tests/test_password_reset.py index f9227177..4bd9f1ee 100644 --- a/server/users/tests/test_password_reset.py +++ b/server/users/tests/test_password_reset.py @@ -91,8 +91,8 @@ class PasswordResetTests(TestCase): def test_user_can_initiate_password(self): result = self.make_reset_mutation(self.user.email) self.assertEqual(len(mail.outbox), 1) - self.assertEqual(mail.outbox[0].subject.startswith('Passwort auf'), True) - self.assertEqual(result.get('data').get('passwordReset').get('success'), True) + self.assertTrue(mail.outbox[0].subject.startswith('Passwort auf')) + self.assertTrue(result.get('data').get('passwordReset').get('success')) def test_user_can_verify_and_set_password(self): token_generator = PasswordResetTokenGenerator() @@ -100,13 +100,12 @@ class PasswordResetTests(TestCase): uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)).decode() 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!' set_result = self.make_set_password_mutation(uidb64, new_password, new_password) - print(set_result) - self.assertEqual(set_result.get('data').get('passwordResetSetPassword').get('success'), True) + self.assertTrue(set_result.get('data').get('passwordResetSetPassword').get('success')) def test_user_cannot_use_unsafe_password(self): token_generator = PasswordResetTokenGenerator() @@ -114,12 +113,12 @@ class PasswordResetTests(TestCase): uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)).decode() 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' 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): token_generator = PasswordResetTokenGenerator() @@ -127,10 +126,10 @@ class PasswordResetTests(TestCase): uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)).decode() 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_confirm = 'Abcd1234!1' 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'))