test_observance.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from datetime import datetime
  2. import pytest
  3. from pandas.tseries.holiday import (
  4. after_nearest_workday,
  5. before_nearest_workday,
  6. nearest_workday,
  7. next_monday,
  8. next_monday_or_tuesday,
  9. next_workday,
  10. previous_friday,
  11. previous_workday,
  12. sunday_to_monday,
  13. weekend_to_monday,
  14. )
  15. _WEDNESDAY = datetime(2014, 4, 9)
  16. _THURSDAY = datetime(2014, 4, 10)
  17. _FRIDAY = datetime(2014, 4, 11)
  18. _SATURDAY = datetime(2014, 4, 12)
  19. _SUNDAY = datetime(2014, 4, 13)
  20. _MONDAY = datetime(2014, 4, 14)
  21. _TUESDAY = datetime(2014, 4, 15)
  22. _NEXT_WEDNESDAY = datetime(2014, 4, 16)
  23. @pytest.mark.parametrize("day", [_SATURDAY, _SUNDAY])
  24. def test_next_monday(day):
  25. assert next_monday(day) == _MONDAY
  26. @pytest.mark.parametrize(
  27. "day,expected", [(_SATURDAY, _MONDAY), (_SUNDAY, _TUESDAY), (_MONDAY, _TUESDAY)]
  28. )
  29. def test_next_monday_or_tuesday(day, expected):
  30. assert next_monday_or_tuesday(day) == expected
  31. @pytest.mark.parametrize("day", [_SATURDAY, _SUNDAY])
  32. def test_previous_friday(day):
  33. assert previous_friday(day) == _FRIDAY
  34. def test_sunday_to_monday():
  35. assert sunday_to_monday(_SUNDAY) == _MONDAY
  36. @pytest.mark.parametrize(
  37. "day,expected", [(_SATURDAY, _FRIDAY), (_SUNDAY, _MONDAY), (_MONDAY, _MONDAY)]
  38. )
  39. def test_nearest_workday(day, expected):
  40. assert nearest_workday(day) == expected
  41. @pytest.mark.parametrize(
  42. "day,expected", [(_SATURDAY, _MONDAY), (_SUNDAY, _MONDAY), (_MONDAY, _MONDAY)]
  43. )
  44. def test_weekend_to_monday(day, expected):
  45. assert weekend_to_monday(day) == expected
  46. @pytest.mark.parametrize(
  47. "day,expected",
  48. [
  49. (_WEDNESDAY, _THURSDAY),
  50. (_THURSDAY, _FRIDAY),
  51. (_SATURDAY, _MONDAY),
  52. (_SUNDAY, _MONDAY),
  53. (_MONDAY, _TUESDAY),
  54. (_TUESDAY, _NEXT_WEDNESDAY), # WED is same week as TUE
  55. ],
  56. )
  57. def test_next_workday(day, expected):
  58. assert next_workday(day) == expected
  59. @pytest.mark.parametrize(
  60. "day,expected", [(_SATURDAY, _FRIDAY), (_SUNDAY, _FRIDAY), (_TUESDAY, _MONDAY)]
  61. )
  62. def test_previous_workday(day, expected):
  63. assert previous_workday(day) == expected
  64. @pytest.mark.parametrize(
  65. "day,expected",
  66. [
  67. (_THURSDAY, _WEDNESDAY),
  68. (_FRIDAY, _THURSDAY),
  69. (_SATURDAY, _THURSDAY),
  70. (_SUNDAY, _FRIDAY),
  71. (_MONDAY, _FRIDAY), # last week Friday
  72. (_TUESDAY, _MONDAY),
  73. (_NEXT_WEDNESDAY, _TUESDAY), # WED is same week as TUE
  74. ],
  75. )
  76. def test_before_nearest_workday(day, expected):
  77. assert before_nearest_workday(day) == expected
  78. @pytest.mark.parametrize(
  79. "day,expected", [(_SATURDAY, _MONDAY), (_SUNDAY, _TUESDAY), (_FRIDAY, _MONDAY)]
  80. )
  81. def test_after_nearest_workday(day, expected):
  82. assert after_nearest_workday(day) == expected