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

1from __future__ import annotations 

2 

3import json 

4 

5from voice_prices.data import providers 

6 

7 

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 

14 

15 

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 

22 

23 

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 

27 

28 data_json_path = package_dir / 'data.json' 

29 data = json.loads(data_json_path.read_bytes()) 

30 

31 deprecated_found = False 

32 non_deprecated_with_flag = False 

33 

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 

40 

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' 

43 

44 

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 

48 

49 data_json_path = package_dir / 'data.json' 

50 data = json.loads(data_json_path.read_bytes()) 

51 

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"]}' 

55 

56 

57def test_remote_payloads_remain_provider_arrays(): 

58 """Remote JSON payloads stay provider arrays.""" 

59 from prices.utils import package_dir 

60 

61 for filename in ('data.json', 'data_slim.json'): 

62 payload: list[object] = json.loads((package_dir / filename).read_bytes()) 

63 

64 assert isinstance(payload, list) 

65 assert payload 

66 assert all(isinstance(provider, dict) for provider in payload)