45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
|
|
# ruff: noqa: INP001
|
||
|
|
"""Unit tests for provider usage parsing and normalization helpers."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from app.services.provider_usage import (
|
||
|
|
_extract_openai_usage,
|
||
|
|
_normalize_base,
|
||
|
|
_parse_openai_reset,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def test_normalize_base_strips_known_suffixes() -> None:
|
||
|
|
assert (
|
||
|
|
_normalize_base(
|
||
|
|
"https://api.openai.com/v1/",
|
||
|
|
"https://api.openai.com",
|
||
|
|
strip_suffixes=("/v1",),
|
||
|
|
)
|
||
|
|
== "https://api.openai.com"
|
||
|
|
)
|
||
|
|
assert (
|
||
|
|
_normalize_base(
|
||
|
|
"https://ollama.com/api/",
|
||
|
|
"http://localhost:11434",
|
||
|
|
strip_suffixes=("/api",),
|
||
|
|
)
|
||
|
|
== "https://ollama.com"
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def test_extract_openai_usage_supports_responses_shape() -> None:
|
||
|
|
payload = {"usage": {"input_tokens": 12, "output_tokens": 3}}
|
||
|
|
assert _extract_openai_usage(payload) == (12, 3)
|
||
|
|
|
||
|
|
|
||
|
|
def test_extract_openai_usage_supports_chat_completions_shape() -> None:
|
||
|
|
payload = {"usage": {"prompt_tokens": 9, "completion_tokens": 1}}
|
||
|
|
assert _extract_openai_usage(payload) == (9, 1)
|
||
|
|
|
||
|
|
|
||
|
|
def test_parse_openai_reset_duration_format() -> None:
|
||
|
|
reset_at = _parse_openai_reset("6m0s")
|
||
|
|
assert reset_at is not None
|