File: test_middleware.py

package info (click to toggle)
django-allauth 65.0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,672 kB
  • sloc: python: 34,411; javascript: 3,070; xml: 849; makefile: 235; sh: 8
file content (93 lines) | stat: -rw-r--r-- 3,050 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from unittest.mock import Mock

from django.contrib.auth.models import AnonymousUser
from django.test.utils import override_settings

import pytest

from allauth.usersessions.middleware import UserSessionsMiddleware
from allauth.usersessions.models import UserSession
from allauth.usersessions.signals import session_client_changed


def test_mw_without_request_user(rf, db, settings):
    settings.USERSESSIONS_TRACK_ACTIVITY = True
    mw = UserSessionsMiddleware(lambda request: None)
    request = rf.get("/")
    mw(request)
    assert UserSession.objects.count() == 0


@pytest.mark.parametrize("track_activity", [False, True])
def test_mw_with_request_user(rf, db, settings, user, track_activity):
    settings.USERSESSIONS_TRACK_ACTIVITY = track_activity
    mw = UserSessionsMiddleware(lambda request: None)
    request = rf.get("/")
    request.user = user
    request.session = Mock()
    request.session.session_key = "sess-123"
    mw(request)
    assert (
        UserSession.objects.filter(session_key="sess-123", user=user).exists()
        is track_activity
    )


def test_mw_with_anonymous_request_user(rf, db, settings):
    settings.USERSESSIONS_TRACK_ACTIVITY = True
    mw = UserSessionsMiddleware(lambda request: None)
    request = rf.get("/")
    request.user = AnonymousUser()
    request.session = Mock()
    request.session.session_key = "sess-123"
    mw(request)
    assert not UserSession.objects.exists()


@override_settings(USERSESSIONS_TRACK_ACTIVITY=True)
def test_mw_change_ip_and_useragent(rf, db, user):
    mw = UserSessionsMiddleware(lambda request: None)

    # First request
    request1 = rf.get("/")
    request1.user = user
    request1.session = Mock()
    request1.session.session_key = "sess-123"
    request1.META["HTTP_USER_AGENT"] = "Old User Agent"
    request1.META["REMOTE_ADDR"] = "1.1.1.1"
    mw(request1)

    # Second request with changed IP and User Agent
    request2 = rf.get("/")
    request2.user = user
    request2.session = Mock()
    request2.session.session_key = "sess-123"
    request2.META["HTTP_USER_AGENT"] = "New User Agent"
    request2.META["REMOTE_ADDR"] = "2.2.2.2"

    # Set up signal receiver
    signal_received = []

    def signal_handler(sender, request, from_session, to_session, **kwargs):
        signal_received.append((from_session, to_session))

    session_client_changed.connect(signal_handler)

    # Process second request
    mw(request2)

    # Check if UserSession was updated
    user_session = UserSession.objects.get(session_key="sess-123", user=user)
    assert user_session.ip == "2.2.2.2"
    assert user_session.user_agent == "New User Agent"

    # Check if signal was triggered
    assert len(signal_received) == 1
    from_session, to_session = signal_received[0]
    assert from_session.ip == "1.1.1.1"
    assert from_session.user_agent == "Old User Agent"
    assert to_session.ip == "2.2.2.2"
    assert to_session.user_agent == "New User Agent"

    # Clean up signal connection
    session_client_changed.disconnect(signal_handler)