Coverage for tests/test_lifecycle.py: 96.49%
41 statements
« prev ^ index » next coverage.py v7.9.2, created at 2026-09-27 04:08 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2026-09-27 04:08 +0000
1from __future__ import annotations
3import json
5from voice_prices.data import providers
8def test_deprecated_models_present_with_flag():
9 """Deprecated models should be present in built data with the deprecated flag set to True."""
10 deprecated_models = [(p.id, m.id, m.deprecated) for p in providers for m in p.models if m.deprecated]
11 assert len(deprecated_models) > 0, 'Expected at least one deprecated model in built data'
12 for _, _, deprecated in deprecated_models:
13 assert deprecated is True
16def test_removed_models_absent():
17 """Removed models (claude-instant-1, claude-instant-1.2) should not appear in the built provider data."""
18 anthropic = next(p for p in providers if p.id == 'anthropic')
19 model_ids = {m.id for m in anthropic.models}
20 assert 'claude-instant-1' not in model_ids
21 assert 'claude-instant-1.2' not in model_ids
24def test_deprecated_flag_in_data_json():
25 """The deprecated flag should appear in data.json for deprecated models and be absent for normal models."""
26 from prices.utils import package_dir
28 data_json_path = package_dir / 'data.json'
29 data = json.loads(data_json_path.read_bytes())
31 deprecated_found = False
32 non_deprecated_with_flag = False
34 for provider in data:
35 for model in provider['models']:
36 if model.get('deprecated') is True:
37 deprecated_found = True
38 elif 'deprecated' in model: 38 ↛ 39line 38 didn't jump to line 39 because the condition on line 38 was never true
39 non_deprecated_with_flag = True
41 assert deprecated_found, 'Expected at least one model with deprecated=true in data.json'
42 assert not non_deprecated_with_flag, 'Non-deprecated models should not have the deprecated key in data.json'
45def test_removed_field_not_in_data_json():
46 """The removed field should never appear in data.json."""
47 from prices.utils import package_dir
49 data_json_path = package_dir / 'data.json'
50 data = json.loads(data_json_path.read_bytes())
52 for provider in data:
53 for model in provider['models']:
54 assert 'removed' not in model, f'removed field found in data.json for model {model["id"]}'
57def test_remote_payloads_remain_provider_arrays():
58 """Remote JSON payloads stay provider arrays."""
59 from prices.utils import package_dir
61 for filename in ('data.json', 'data_slim.json'):
62 payload: list[object] = json.loads((package_dir / filename).read_bytes())
64 assert isinstance(payload, list)
65 assert payload
66 assert all(isinstance(provider, dict) for provider in payload)