37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
from django.test import RequestFactory, TestCase
|
|
|
|
from apps.users.models import LoginAttempt, User
|
|
from apps.users.utils import _get_ip, record_login_attempt
|
|
|
|
|
|
class UserUtilsTests(TestCase):
|
|
@classmethod
|
|
def setUpTestData(cls):
|
|
cls.user = User.objects.create_user(mobile="09120000051", password="secret123")
|
|
|
|
def setUp(self):
|
|
self.factory = RequestFactory()
|
|
|
|
def test_get_ip_returns_none_without_request(self):
|
|
self.assertIsNone(_get_ip(None))
|
|
|
|
def test_get_ip_prefers_forwarded_header(self):
|
|
request = self.factory.get("/", HTTP_X_FORWARDED_FOR="1.1.1.1, 2.2.2.2")
|
|
|
|
self.assertEqual(_get_ip(request), "1.1.1.1")
|
|
|
|
def test_get_ip_falls_back_to_remote_addr(self):
|
|
request = self.factory.get("/", REMOTE_ADDR="3.3.3.3")
|
|
|
|
self.assertEqual(_get_ip(request), "3.3.3.3")
|
|
|
|
def test_record_login_attempt_persists_attempt(self):
|
|
request = self.factory.get("/", REMOTE_ADDR="4.4.4.4")
|
|
|
|
record_login_attempt(request, user=self.user, status=LoginAttempt.StatusType.SUCCESS)
|
|
|
|
attempt = LoginAttempt.objects.get()
|
|
self.assertEqual(attempt.user, self.user)
|
|
self.assertEqual(attempt.status, LoginAttempt.StatusType.SUCCESS)
|
|
self.assertEqual(attempt.ip_address, "4.4.4.4")
|