skillbox/server/users/tests/test_password_update.py

129 lines
3.9 KiB
Python

from django.test import TestCase, RequestFactory
from graphene.test import Client
from api.schema import schema
from core.factories import UserFactory
from django.contrib.auth import authenticate
class PasswordUpdate(TestCase):
def setUp(self):
self.user = UserFactory(username='aschi')
request = RequestFactory().get('/')
request.user = self.user
self.client = Client(schema=schema, context_value=request)
def make_request(self, new_password, old_password='test'):
mutation = '''
mutation UpdatePassword($input: UpdatePasswordInput!) {
updatePassword(input: $input) {
success
errors {
field
errors {
code
}
}
}
}
'''
return self.client.execute(mutation, variables={
'input': {
'passwordInput': {
'oldPassword': old_password,
'newPassword': new_password
}
}
})
def test_update_password(self):
new_password = 'Abcd123!'
result = self.make_request(new_password)
self.assertTrue(result.get('data').get('updatePassword').get('success'))
user = authenticate(username=self.user.username, password=new_password)
self.assertIsNotNone(user)
def test_update_fails_with_short_password(self):
new_password = 'Ab!d123'
result = self.make_request(new_password)
self.assertFalse(result.get('data').get('updatePassword').get('success'))
self.assertEquals(result.get('data').get('updatePassword').get('errors')[0], {
'field': 'new_password',
'errors': [
{'code': 'min_length'}
]
})
def test_update_fails_with_no_special_character(self):
new_password = 'Abcd1239'
result = self.make_request(new_password)
self.assertFalse(result.get('data').get('updatePassword').get('success'))
self.assertEquals(result.get('data').get('updatePassword').get('errors')[0], {
'field': 'new_password',
'errors': [
{'code': 'invalid'}
]
})
def test_update_fails_with_no_digit(self):
new_password = 'Abcd!asddfg'
result = self.make_request(new_password)
self.assertFalse(result.get('data').get('updatePassword').get('success'))
self.assertEquals(result.get('data').get('updatePassword').get('errors')[0], {
'field': 'new_password',
'errors': [
{'code': 'invalid'}
]
})
def test_update_fails_with_no_lowercase_char(self):
new_password = '45ABDC!AWSWS'
result = self.make_request(new_password)
self.assertFalse(result.get('data').get('updatePassword').get('success'))
self.assertEquals(result.get('data').get('updatePassword').get('errors')[0], {
'field': 'new_password',
'errors': [
{'code': 'invalid'}
]
})
def test_update_fails_with_no_uppercase_char(self):
new_password = '45aswed!aswdef'
result = self.make_request(new_password)
self.assertFalse(result.get('data').get('updatePassword').get('success'))
self.assertEquals(result.get('data').get('updatePassword').get('errors')[0], {
'field': 'new_password',
'errors': [
{'code': 'invalid'}
]
})
def test_update_fails_with_wrong_old_password(self):
new_password = 'Abcd123!'
result = self.make_request(new_password, 'testttt')
self.assertFalse(result.get('data').get('updatePassword').get('success'))
self.assertEquals(result.get('data').get('updatePassword').get('errors')[0], {
'field': 'old_password',
'errors': [
{'code': 'invalid'}
]
})