File: test_auth.py

package info (click to toggle)
python-xbox-webapi 2.1.0-1.2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 2,900 kB
  • sloc: python: 4,973; makefile: 79
file content (99 lines) | stat: -rw-r--r-- 3,567 bytes parent folder | download
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
94
95
96
97
98
99
from datetime import datetime, timedelta, timezone

from httpx import Response
import pytest

from tests.common import get_response_json


@pytest.mark.asyncio
async def test_generate_auth_url(auth_mgr):
    url = auth_mgr.generate_authorization_url()
    assert url.startswith("https://login.live.com/oauth20_authorize.srf?")
    assert "client_id=abc" in url
    assert "response_type=code" in url


@pytest.mark.asyncio
async def test_generate_auth_url_with_state(auth_mgr):
    state = "test_state"
    url = auth_mgr.generate_authorization_url(state)
    assert f"state={state}" in url


@pytest.mark.asyncio
async def test_request_tokens(respx_mock, auth_mgr):
    route1 = respx_mock.post("https://login.live.com").mock(
        return_value=Response(200, json=get_response_json("auth_oauth2_token"))
    )
    route2 = respx_mock.post("https://user.auth.xboxlive.com/user/authenticate").mock(
        return_value=Response(200, json=get_response_json("auth_user_token"))
    )
    route3 = respx_mock.post("https://xsts.auth.xboxlive.com/xsts/authorize").mock(
        return_value=Response(200, json=get_response_json("auth_xsts_token"))
    )
    await auth_mgr.request_tokens("CODE")
    assert route1.called
    assert route2.called
    assert route3.called


@pytest.mark.asyncio
async def test_refresh_tokens(respx_mock, auth_mgr):
    # Expire Tokens
    expired = datetime.now(timezone.utc) - timedelta(days=10)
    auth_mgr.oauth.issued = expired
    auth_mgr.user_token.not_after = expired
    auth_mgr.xsts_token.not_after = expired

    route1 = respx_mock.post("https://login.live.com").mock(
        return_value=Response(200, json=get_response_json("auth_oauth2_token"))
    )
    route2 = respx_mock.post("https://user.auth.xboxlive.com/user/authenticate").mock(
        return_value=Response(200, json=get_response_json("auth_user_token"))
    )
    route3 = respx_mock.post("https://xsts.auth.xboxlive.com/xsts/authorize").mock(
        return_value=Response(200, json=get_response_json("auth_xsts_token"))
    )
    await auth_mgr.refresh_tokens()
    assert route1.called
    assert route2.called
    assert route3.called


@pytest.mark.asyncio
async def test_refresh_tokens_still_valid(auth_mgr):
    now = datetime.now(timezone.utc)
    auth_mgr.oauth.issued = now
    auth_mgr.user_token.not_after = now + timedelta(days=1)
    auth_mgr.xsts_token.not_after = now + timedelta(days=1)
    await auth_mgr.refresh_tokens()


@pytest.mark.asyncio
async def test_refresh_tokens_user_still_valid(respx_mock, auth_mgr):
    # Expire Tokens
    expired = datetime.now(timezone.utc) - timedelta(days=10)
    auth_mgr.oauth.issued = expired
    auth_mgr.xsts_token.not_after = expired

    auth_mgr.user_token.not_after = datetime.now(timezone.utc) + timedelta(days=1)
    route1 = respx_mock.post("https://login.live.com").mock(
        return_value=Response(200, json=get_response_json("auth_oauth2_token"))
    )
    route2 = respx_mock.post("https://xsts.auth.xboxlive.com/xsts/authorize").mock(
        return_value=Response(200, json=get_response_json("auth_xsts_token"))
    )
    await auth_mgr.refresh_tokens()
    assert route1.called
    assert route2.called


@pytest.mark.asyncio
async def test_xsts_properties(auth_mgr):
    assert auth_mgr.xsts_token.xuid == "2669321029139235"
    assert auth_mgr.xsts_token.gamertag == "e"
    assert auth_mgr.xsts_token.userhash == "abcdefg"
    assert auth_mgr.xsts_token.age_group == "Adult"
    assert auth_mgr.xsts_token.privileges == ""
    assert auth_mgr.xsts_token.user_privileges == ""