Remnawave_python-sdk/tests/test_sub_page.py
Artem ba1a221593
feat: Update Remnawave SDK to version 2.4.4 with new subscription page management features
- Bump version to 2.4.4 and update description in pyproject.toml
- Refactor RemnawaveSDK to include SubscriptionPageConfigController
- Introduce new subscription page management endpoints:
  - Get, create, update, delete, reorder, and clone subscription page configs
- Remove deprecated NodesUsageHistoryController and UsersStatsController
- Add new bandwidth stats models and endpoints for legacy and new stats
- Enhance tests for bandwidth stats and subscription page management
- Ensure backward compatibility with legacy endpoints while introducing new stats models
2025-12-25 22:30:53 +01:00

96 lines
No EOL
3.6 KiB
Python

import pytest
from remnawave.models import (
CloneSubscriptionPageConfigRequestDto,
CloneSubscriptionPageConfigResponseDto,
CreateSubscriptionPageConfigRequestDto,
CreateSubscriptionPageConfigResponseDto,
DeleteSubscriptionPageConfigResponseDto,
GetSubscriptionPageConfigResponseDto,
GetSubscriptionPageConfigsResponseDto,
ReorderSubscriptionPageConfigItem,
ReorderSubscriptionPageConfigsRequestDto,
ReorderSubscriptionPageConfigsResponseDto,
UpdateSubscriptionPageConfigRequestDto,
UpdateSubscriptionPageConfigResponseDto,
)
def random_string(length=10):
import random
import string
return ''.join(random.choices(string.ascii_letters + string.digits, k=length))
@pytest.mark.asyncio
async def test_get_all_configs(remnawave):
"""Test getting all subscription page configs"""
configs = await remnawave.subscription_page_config.get_all_configs()
assert isinstance(configs, GetSubscriptionPageConfigsResponseDto)
assert configs.total >= 0
assert isinstance(configs.configs, list)
@pytest.mark.asyncio
async def test_subscription_page_config_full_workflow(remnawave):
"""Test full workflow: create, get, update, reorder, clone, delete"""
# Create config
config_name = f"test_config_{random_string()}"
create_request = CreateSubscriptionPageConfigRequestDto(name=config_name)
created_config = await remnawave.subscription_page_config.create_config(create_request)
assert isinstance(created_config, CreateSubscriptionPageConfigResponseDto)
assert created_config.name == config_name
config_uuid = str(created_config.uuid)
# Get config by UUID
config = await remnawave.subscription_page_config.get_config_by_uuid(config_uuid)
assert isinstance(config, GetSubscriptionPageConfigResponseDto)
assert config.name == config_name
# Update config
updated_name = f"updated_{config_name}"
update_request = UpdateSubscriptionPageConfigRequestDto(
uuid=created_config.uuid,
name=updated_name,
config=config.config
)
updated_config = await remnawave.subscription_page_config.update_config(update_request)
assert isinstance(updated_config, UpdateSubscriptionPageConfigResponseDto)
assert updated_config.name == updated_name
# Clone config
clone_request = CloneSubscriptionPageConfigRequestDto(
clone_from_uuid=created_config.uuid
)
cloned_config = await remnawave.subscription_page_config.clone_config(clone_request)
assert isinstance(cloned_config, CloneSubscriptionPageConfigResponseDto)
# Reorder configs
reorder_request = ReorderSubscriptionPageConfigsRequestDto(
items=[
ReorderSubscriptionPageConfigItem(
uuid=created_config.uuid,
view_position=1
),
ReorderSubscriptionPageConfigItem(
uuid=cloned_config.uuid,
view_position=2
)
]
)
reordered = await remnawave.subscription_page_config.reorder_configs(reorder_request)
assert isinstance(reordered, ReorderSubscriptionPageConfigsResponseDto)
# Delete cloned config
delete_response = await remnawave.subscription_page_config.delete_config(
str(cloned_config.uuid)
)
assert isinstance(delete_response, DeleteSubscriptionPageConfigResponseDto)
assert delete_response.is_deleted is True
# Delete original config
delete_response = await remnawave.subscription_page_config.delete_config(config_uuid)
assert isinstance(delete_response, DeleteSubscriptionPageConfigResponseDto)
assert delete_response.is_deleted is True