Coverage for app/tests/test_models.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2026-06-04 22:29 +0000

1import pytest 

2import time_machine 

3from pydantic import ValidationError 

4 

5from app.models import PYPI_DOWNLOADS_MIN_DATE, TimeRange 

6 

7 

8def test_time_range_default_value() -> None: 

9 time_range = TimeRange() 

10 assert time_range.value == "3months" 

11 

12 

13def test_time_range_valid_values() -> None: 

14 valid_values = [ 

15 "1month", 

16 "3months", 

17 "6months", 

18 "1year", 

19 "2years", 

20 "5years", 

21 "allTime", 

22 "allTimeCumulative", 

23 "allTimeCumulativeAlignTimeline", 

24 ] 

25 for value in valid_values: 

26 time_range = TimeRange(value=value) # type: ignore 

27 assert time_range.value == value 

28 

29 

30def test_time_range_invalid_value() -> None: 

31 with pytest.raises(ValidationError): 

32 TimeRange(value="invalid") # type: ignore 

33 

34 

35@time_machine.travel("2024-01-15") 

36def test_time_range_date_str_calculation() -> None: 

37 test_cases = [ 

38 ("1month", "2023-12-15"), 

39 ("3months", "2023-10-15"), 

40 ("6months", "2023-07-15"), 

41 ("1year", "2023-01-15"), 

42 ("2years", "2022-01-15"), 

43 ("5years", "2019-01-15"), 

44 ] 

45 

46 for value, expected_date in test_cases: 

47 time_range = TimeRange(value=value) # type: ignore 

48 assert time_range.date_str == expected_date 

49 

50 

51@time_machine.travel("2024-01-15") 

52def test_time_range_all_time_values() -> None: 

53 all_time_values = ["allTime", "allTimeCumulative", "allTimeCumulativeAlignTimeline"] 

54 

55 for value in all_time_values: 

56 time_range = TimeRange(value=value) # type: ignore 

57 assert time_range.date_str == PYPI_DOWNLOADS_MIN_DATE