skillbox/server/users/tests/test_password_update.py

120 lines
4.1 KiB
Python

from unittest.mock import MagicMock
from django.contrib.sessions.middleware import SessionMiddleware
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):
get_response = MagicMock()
self.user = UserFactory(username="aschi")
request = RequestFactory().get("/")
request.user = self.user
# adding session
middleware = SessionMiddleware(get_response)
middleware.process_request(request)
request.session.save()
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.assertEqual(
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.assertEqual(
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.assertEqual(
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.assertEqual(
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.assertEqual(
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.assertEqual(
result.get("data").get("updatePassword").get("errors")[0],
{"field": "old_password", "errors": [{"code": "invalid"}]},
)