File size: 2,213 Bytes
2d9b352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Test module for authentication functionality"""
from fastapi import status


def test_login_success(client, test_user):
    """Test successful login"""
    response = client.post(
        "/login",
        data=test_user,
        follow_redirects=False
    )
    assert response.status_code == status.HTTP_302_FOUND
    assert response.headers["location"] == "/compare"

    # Verify session is set
    response = client.get("/compare")
    assert response.status_code == status.HTTP_200_OK


def test_login_failure(client):
    """Test login with invalid credentials"""
    response = client.post(
        "/login",
        data={"username": "invalid", "password": "wrong"},
        follow_redirects=False
    )
    assert response.status_code == status.HTTP_401_UNAUTHORIZED
    assert "Invalid credentials" in response.text


def test_session_timeout(client, test_user):
    """Test session timeout behavior"""
    # First login
    client.post("/login", data=test_user)

    # Access protected route should succeed
    response = client.get("/compare")
    assert response.status_code == status.HTTP_200_OK

    # Clear session cookie to simulate timeout
    client.cookies.clear()

    # Access should redirect to login
    response = client.get("/compare", follow_redirects=False)
    assert response.status_code == status.HTTP_302_FOUND
    assert response.headers["location"] == "/login"


def test_session_timeout_page(client):
    """Test session timeout page content"""
    # When session times out, user is redirected to login
    response = client.get("/login")
    assert response.status_code == status.HTTP_200_OK
    assert "Login" in response.text


def test_logout(client, test_user):
    """Test logout functionality"""
    # First login
    client.post("/login", data=test_user)

    # Then logout
    response = client.get("/logout", follow_redirects=False)
    assert response.status_code == status.HTTP_302_FOUND
    assert response.headers["location"] == "/login"

    # Verify can't access protected route anymore
    response = client.get("/compare", follow_redirects=False)
    assert response.status_code == status.HTTP_302_FOUND
    assert response.headers["location"] == "/login"