|
1 | 1 | import json |
2 | 2 | import typing |
| 3 | +from datetime import datetime |
3 | 4 |
|
4 | 5 | import pytest |
5 | 6 | from dateutil.relativedelta import relativedelta |
|
12 | 13 | from django.utils import timezone |
13 | 14 | from djoser import utils # type: ignore[import-untyped] |
14 | 15 | from djoser.email import PasswordResetEmail # type: ignore[import-untyped] |
| 16 | +from freezegun import freeze_time |
15 | 17 | from pytest_django import DjangoAssertNumQueries |
16 | 18 | from rest_framework import status |
17 | 19 | from rest_framework.test import APIClient |
@@ -921,3 +923,44 @@ def test_list_user_groups( |
921 | 923 | (user1.pk, False), |
922 | 924 | (user2.pk, True), |
923 | 925 | } |
| 926 | + |
| 927 | + |
| 928 | +@freeze_time("2024-01-01T10:00:00Z") |
| 929 | +@pytest.mark.parametrize( |
| 930 | + "last_login,expected_last_login", |
| 931 | + [ |
| 932 | + (None, datetime.fromisoformat("2024-01-01T10:00:00Z")), |
| 933 | + ( |
| 934 | + datetime.fromisoformat("2023-01-01T10:00:00Z"), |
| 935 | + datetime.fromisoformat("2024-01-01T10:00:00Z"), |
| 936 | + ), |
| 937 | + ( |
| 938 | + datetime.fromisoformat("2024-01-01T09:59:00Z"), |
| 939 | + datetime.fromisoformat("2024-01-01T09:59:00Z"), |
| 940 | + ), |
| 941 | + ], |
| 942 | +) |
| 943 | +def test_get_me_view_updates_last_login( |
| 944 | + api_client: APIClient, |
| 945 | + test_user: FFAdminUser, |
| 946 | + last_login: datetime | None, |
| 947 | + expected_last_login: datetime, |
| 948 | +) -> None: |
| 949 | + # Given |
| 950 | + test_user.last_login = last_login |
| 951 | + test_user.save(update_fields=["last_login"]) |
| 952 | + test_user.refresh_from_db() |
| 953 | + |
| 954 | + api_client.force_authenticate(test_user) |
| 955 | + assert test_user.last_login is None or test_user.last_login < timezone.now() |
| 956 | + |
| 957 | + url = reverse("api-v1:custom_auth:ffadminuser-me") |
| 958 | + |
| 959 | + # When |
| 960 | + response = api_client.get(url) |
| 961 | + |
| 962 | + # Then |
| 963 | + assert response.status_code == status.HTTP_200_OK |
| 964 | + test_user.refresh_from_db() |
| 965 | + |
| 966 | + assert test_user.last_login == expected_last_login |
0 commit comments