Remnawave_python-sdk/tests/test_hwid.py
Artem 3f0b5af2cf
Refactor tests for HWID, subscriptions, system, and users; add subscription request history functionality
- Restructured HWID tests into classes for better organization and clarity.
- Enhanced subscription tests to cover additional scenarios and improved assertions.
- Introduced new tests for system statistics and monitoring.
- Implemented CRUD operations for user management with comprehensive test coverage.
- Added new controllers and models for handling subscription request history.
- Created tests for subscription request history, including pagination and statistics.
- Improved error handling in tests to skip when exceptions occur.
2025-10-02 01:46:17 +02:00

169 lines
No EOL
7.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import random
import uuid
import pytest
from remnawave.models import (
CreateUserHwidDeviceRequestDto,
DeleteUserHwidDeviceRequestDto,
DeleteUserAllHwidDeviceRequestDto,
CreateUserHwidDeviceResponseDto,
DeleteUserHwidDeviceResponseDto,
GetUserHwidDevicesResponseDto,
GetHwidStatisticsResponseDto,
)
from tests.conftest import REMNAWAVE_USER_UUID
class TestHwidInfo:
"""Тесты для получения информации о HWID устройствах"""
@pytest.mark.asyncio
async def test_get_hwid_user(self, remnawave):
"""Тест получения HWID устройств конкретного пользователя"""
hwid = await remnawave.hwid.get_hwid_user(uuid=REMNAWAVE_USER_UUID)
assert isinstance(hwid, GetUserHwidDevicesResponseDto)
assert hasattr(hwid, "devices")
@pytest.mark.asyncio
async def test_get_hwid_users(self, remnawave):
"""Тест получения всех HWID устройств с пагинацией"""
response = await remnawave.hwid.get_hwid_users(size=10, start=0)
assert isinstance(response, GetUserHwidDevicesResponseDto)
assert hasattr(response, "total")
assert hasattr(response, "devices")
class TestHwidStatistics:
"""Тесты для статистики HWID устройств"""
@pytest.mark.asyncio
async def test_get_hwid_stats(self, remnawave):
"""Тест получения статистики по HWID устройствам"""
try:
response = await remnawave.hwid.get_hwid_stats()
assert isinstance(response, GetHwidStatisticsResponseDto)
# Проверяем структуру ответа
assert hasattr(response, "by_platform")
assert hasattr(response, "by_app")
assert hasattr(response, "stats")
# Проверяем поля статистики
assert hasattr(response.stats, "total_unique_devices")
assert hasattr(response.stats, "total_hwid_devices")
assert hasattr(response.stats, "average_hwid_devices_per_user")
# Проверяем типы данных в ответе
assert isinstance(response.stats.total_unique_devices, float)
assert isinstance(response.stats.total_hwid_devices, float)
assert isinstance(response.stats.average_hwid_devices_per_user, float)
# Проверяем данные по платформам
if len(response.by_platform) > 0:
platform = response.by_platform[0]
assert hasattr(platform, "platform")
assert hasattr(platform, "count")
# Проверяем данные по приложениям
if len(response.by_app) > 0:
app = response.by_app[0]
assert hasattr(app, "app")
assert hasattr(app, "count")
except Exception as e:
pytest.skip(f"Пропуск теста статистики HWID: {str(e)}")
class TestHwidCRUD:
"""Тесты для CRUD операций с HWID устройствами"""
@pytest.fixture
def test_hwid(self):
"""Фикстура для генерации тестового HWID"""
return str(uuid.uuid4())
@pytest.mark.asyncio
# @pytest.mark.xfail(reason="User hwid device limit может быть достигнут")
async def test_add_hwid_to_user(self, remnawave, test_hwid):
"""Тест добавления HWID устройства пользователю"""
# Создаем запрос на добавление HWID
create_request = CreateUserHwidDeviceRequestDto(
hwid=test_hwid,
user_uuid=REMNAWAVE_USER_UUID,
platform="Windows",
os_version="10.0.19042",
device_model="Surface Pro",
user_agent="Mozilla/5.0"
)
# Отправляем запрос
response = await remnawave.hwid.add_hwid_to_users(body=create_request)
# Проверяем результат
assert isinstance(response, CreateUserHwidDeviceResponseDto)
assert any(item.hwid == test_hwid for item in response.devices)
# Проверяем, что устройство действительно добавлено
hwid_check = await remnawave.hwid.get_hwid_user(uuid=REMNAWAVE_USER_UUID)
assert any(device.hwid == test_hwid for device in hwid_check.devices)
@pytest.mark.asyncio
async def test_delete_hwid_user(self, remnawave, test_hwid):
"""Тест удаления HWID устройства у пользователя"""
# Сначала добавляем устройство
create_request = CreateUserHwidDeviceRequestDto(
hwid=test_hwid,
user_uuid=REMNAWAVE_USER_UUID,
platform="Android",
os_version="12",
device_model="Pixel 6",
user_agent="Chrome Mobile"
)
await remnawave.hwid.add_hwid_to_users(body=create_request)
# Удаляем устройство
delete_request = DeleteUserHwidDeviceRequestDto(
hwid=test_hwid,
user_uuid=REMNAWAVE_USER_UUID
)
response = await remnawave.hwid.delete_hwid_to_user(body=delete_request)
# Проверяем результат
assert isinstance(response, DeleteUserHwidDeviceResponseDto)
assert not any(item.hwid == test_hwid for item in response.devices)
# Проверяем, что устройство действительно удалено
hwid_check = await remnawave.hwid.get_hwid_user(uuid=REMNAWAVE_USER_UUID)
assert not any(device.hwid == test_hwid for device in hwid_check.devices)
@pytest.mark.asyncio
async def test_delete_all_hwid_user(self, remnawave):
"""Тест удаления всех HWID устройств пользователя"""
# Сначала добавим новый HWID
random_hwid = str(uuid.uuid4())
create_request = CreateUserHwidDeviceRequestDto(
hwid=random_hwid,
user_uuid=REMNAWAVE_USER_UUID,
platform="iOS",
os_version="15.0",
device_model="iPhone 13",
user_agent="Safari/605.1.15"
)
await remnawave.hwid.add_hwid_to_users(body=create_request)
# Проверяем, что устройство добавлено
check_before = await remnawave.hwid.get_hwid_user(uuid=REMNAWAVE_USER_UUID)
assert any(device.hwid == random_hwid for device in check_before.devices)
# Теперь удалим все HWID устройства пользователя
delete_all_request = DeleteUserAllHwidDeviceRequestDto(
user_uuid=REMNAWAVE_USER_UUID
)
response = await remnawave.hwid.delete_all_hwid_user(body=delete_all_request)
# Проверяем результат
assert isinstance(response, DeleteUserHwidDeviceResponseDto)
# Проверяем, что устройства действительно удалены
hwid_check = await remnawave.hwid.get_hwid_user(uuid=REMNAWAVE_USER_UUID)
assert not any(device.hwid == random_hwid for device in hwid_check.devices)