mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-06 07:50:32 +00:00
* Add missing Telegram WebApp API classes and fields (#1424) * Implemented `WebAppChat` class with fields `id`, `type`, `title`, `username`, and `photo_url` as per Telegram documentation. * Modified `WebAppUser` class by adding `is_premium`, `added_to_attachment_menu`, and `allows_write_to_pm` fields. * Modified `WebAppInitData` class to include `chat`, `chat_type`, `chat_instance` fields for full API support. * fix changelog file name * fix line too long
88 lines
3.3 KiB
Python
88 lines
3.3 KiB
Python
import pytest
|
|
|
|
from aiogram.utils.web_app import (
|
|
WebAppInitData,
|
|
check_webapp_signature,
|
|
parse_webapp_init_data,
|
|
safe_parse_webapp_init_data,
|
|
)
|
|
|
|
|
|
class TestWebApp:
|
|
@pytest.mark.parametrize(
|
|
"token,case,result",
|
|
[
|
|
[
|
|
"42:TEST",
|
|
"auth_date=1650385342"
|
|
"&user=%7B%22id%22%3A42%2C%22first_name%22%3A%22Test%22%7D"
|
|
"&query_id=test"
|
|
"&hash=46d2ea5e32911ec8d30999b56247654460c0d20949b6277af519e76271182803",
|
|
True,
|
|
],
|
|
[
|
|
"42:TEST",
|
|
"auth_date=1650385342"
|
|
"&user=%7B%22id%22%3A+%22123456789%22%2C+%22first_name%22%3A+%22PlaceholderFirstName%22%2C+%22last_name%22%3A+%22PlaceholderLastName+%5Cud83c%5Cuddfa%5Cud83c%5Cudde6%22%2C+%22username%22%3A+%22Latand%22%2C+%22language_code%22%3A+%22en%22%2C+%22is_premium%22%3A+%22true%22%2C+%22allows_write_to_pm%22%3A+%22true%22%7D"
|
|
"&query_id=test"
|
|
"&hash=b3c8b293f14ad0f7f0abcf769aea1209a72295d30a87eb0e74df855d32e53bfe",
|
|
True,
|
|
],
|
|
[
|
|
"42:INVALID",
|
|
"auth_date=1650385342"
|
|
"&user=%7B%22id%22%3A42%2C%22first_name%22%3A%22Test%22%7D"
|
|
"&query_id=test"
|
|
"&hash=46d2ea5e32911ec8d30999b56247654460c0d20949b6277af519e76271182803",
|
|
False,
|
|
],
|
|
[
|
|
"42:TEST",
|
|
"user=%7B%22id%22%3A42%2C%22first_name%22%3A%22Test%22%7D&query_id=test&hash=test",
|
|
False,
|
|
],
|
|
[
|
|
"42:TEST",
|
|
"user=%7B%22id%22%3A42%2C%22first_name%22%3A%22Test%22%7D&query_id=test",
|
|
False,
|
|
],
|
|
["42:TEST", "", False],
|
|
["42:TEST", "test&foo=bar=baz", False],
|
|
],
|
|
)
|
|
def test_check_webapp_signature(self, token, case, result):
|
|
assert check_webapp_signature(token, case) is result
|
|
|
|
def test_parse_web_app_init_data(self):
|
|
parsed = parse_webapp_init_data(
|
|
"auth_date=1650385342"
|
|
"&user=%7B%22id%22%3A42%2C%22first_name%22%3A%22Test%22%7D"
|
|
"&query_id=test"
|
|
"&hash=46d2ea5e32911ec8d30999b56247654460c0d20949b6277af519e76271182803",
|
|
)
|
|
assert isinstance(parsed, WebAppInitData)
|
|
assert parsed.user
|
|
assert parsed.user.first_name == "Test"
|
|
assert parsed.user.id == 42
|
|
assert parsed.query_id == "test"
|
|
assert parsed.hash == "46d2ea5e32911ec8d30999b56247654460c0d20949b6277af519e76271182803"
|
|
assert parsed.auth_date.year == 2022
|
|
|
|
def test_valid_safe_parse_webapp_init_data(self):
|
|
assert safe_parse_webapp_init_data(
|
|
"42:TEST",
|
|
"auth_date=1650385342"
|
|
"&user=%7B%22id%22%3A42%2C%22first_name%22%3A%22Test%22%7D"
|
|
"&query_id=test"
|
|
"&hash=46d2ea5e32911ec8d30999b56247654460c0d20949b6277af519e76271182803",
|
|
)
|
|
|
|
def test_invalid_safe_parse_webapp_init_data(self):
|
|
with pytest.raises(ValueError):
|
|
safe_parse_webapp_init_data(
|
|
"42:TOKEN",
|
|
"auth_date=1650385342"
|
|
"&user=%7B%22id%22%3A42%2C%22first_name%22%3A%22Test%22%7D"
|
|
"&query_id=test"
|
|
"&hash=test",
|
|
)
|