fix: round website rates to two decimals
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
from decimal import Decimal
|
||||
|
||||
import httpx
|
||||
import pytest
|
||||
|
||||
@@ -5,6 +7,7 @@ from app.services.website_client import (
|
||||
WebsiteError,
|
||||
_friendly_connection_error,
|
||||
_friendly_http_error,
|
||||
calculate_target_rate,
|
||||
normalize_groups,
|
||||
)
|
||||
|
||||
@@ -28,8 +31,8 @@ def test_normalize_groups_unwraps_sub2api_paginated_response():
|
||||
})
|
||||
|
||||
assert [group["id"] for group in groups] == ["codex-free", "my-plus", "deepseek"]
|
||||
assert groups[0]["rate_multiplier"] == "1"
|
||||
assert groups[1]["rate_multiplier"] == "1.5"
|
||||
assert groups[0]["rate_multiplier"] == "1.00"
|
||||
assert groups[1]["rate_multiplier"] == "1.50"
|
||||
assert groups[2]["rate_multiplier"] is None
|
||||
|
||||
|
||||
@@ -45,7 +48,7 @@ def test_normalize_groups_unwraps_wrapped_list_response():
|
||||
assert groups == [{
|
||||
"id": "default",
|
||||
"name": "Default",
|
||||
"rate_multiplier": "2",
|
||||
"rate_multiplier": "2.00",
|
||||
"raw": {"id": "default", "name": "Default", "rateMultiplier": "2.0"},
|
||||
}]
|
||||
|
||||
@@ -78,7 +81,43 @@ def test_normalize_groups_keeps_plain_dict_mapping_compatibility():
|
||||
})
|
||||
|
||||
assert [group["id"] for group in groups] == ["free", "paid"]
|
||||
assert groups[0]["rate_multiplier"] == "1"
|
||||
assert groups[0]["rate_multiplier"] == "1.00"
|
||||
|
||||
|
||||
def test_update_group_rate_writes_rounded_two_decimal_number():
|
||||
from app.services.website_client import Sub2ApiWebsiteClient
|
||||
|
||||
requests = []
|
||||
|
||||
def handler(req: httpx.Request) -> httpx.Response:
|
||||
requests.append(req)
|
||||
return httpx.Response(200, json={"ok": True}, request=req)
|
||||
|
||||
client = Sub2ApiWebsiteClient(
|
||||
base_url="https://target.example",
|
||||
api_prefix="/api/v1/admin",
|
||||
auth_type="api_key",
|
||||
auth_config={"key": "admin-key"},
|
||||
)
|
||||
client._client = httpx.Client(transport=httpx.MockTransport(handler))
|
||||
|
||||
try:
|
||||
client.update_group_rate("/groups/{id}", "vip", Decimal("2.2"))
|
||||
client.update_group_rate("/groups/{id}", "free", Decimal("1"))
|
||||
client.update_group_rate("/groups/{id}", "small", Decimal("0.1275"))
|
||||
finally:
|
||||
client.close()
|
||||
|
||||
assert requests[0].url.path == "/api/v1/admin/groups/vip"
|
||||
assert requests[0].read() == b'{"rate_multiplier":2.2}'
|
||||
assert requests[1].url.path == "/api/v1/admin/groups/free"
|
||||
assert requests[1].read() == b'{"rate_multiplier":1.0}'
|
||||
assert requests[2].url.path == "/api/v1/admin/groups/small"
|
||||
assert requests[2].read() == b'{"rate_multiplier":0.13}'
|
||||
|
||||
|
||||
def test_calculate_target_rate_rounds_to_two_decimal_places():
|
||||
assert calculate_target_rate(["0.1275"], 0, "max_plus_percent") == Decimal("0.13")
|
||||
|
||||
|
||||
# ——— _get_account_ids / account_exists ———
|
||||
|
||||
Reference in New Issue
Block a user