prop_test.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import datetime
  2. import typing
  3. import pytest
  4. from icalendar.prop import vCalAddress, vDDDLists, vDDDTypes, vInt, vRecur, vText
  5. from ics2vdir import _event_prop_equal
  6. _CEST = datetime.timezone(datetime.timedelta(hours=+2))
  7. def _parametrize(obj: typing.Any, params: dict) -> typing.Any:
  8. for key, value in params.items():
  9. obj.params.__setitem__(key, value)
  10. return obj
  11. @pytest.mark.parametrize(
  12. ("prop_a", "prop_b", "expected_result"),
  13. [
  14. (vText("CONFIRMED"), vText("CONFIRMED"), True),
  15. (vText("TENTATIVE"), vText("TENTATIVE"), True),
  16. (vText("CONFIRMED"), vText("TENTATIVE"), False),
  17. (vText("CONFIRMED"), vInt(0), False),
  18. (vInt(0), vInt(0), True),
  19. (vInt(0), vInt(21), False),
  20. (
  21. vCalAddress("mailto:someone@somewhere.com"),
  22. vCalAddress("mailto:someone@somewhere.com"),
  23. True,
  24. ),
  25. (
  26. vCalAddress("mailto:someone@somewhere.com"),
  27. vCalAddress("mailto:someelse@somewhere.com"),
  28. False,
  29. ),
  30. (vRecur(FREQ="WEEKLY", COUNT=21), vRecur(FREQ="WEEKLY", COUNT=21), True,),
  31. (vRecur(FREQ="WEEKLY", COUNT=21), vRecur(FREQ="WEEKLY", COUNT=42), False,),
  32. (
  33. vDDDTypes(
  34. datetime.datetime(2012, 7, 3, 16, 39, 2, tzinfo=datetime.timezone.utc)
  35. ),
  36. vDDDTypes(
  37. datetime.datetime(2012, 7, 3, 16, 39, 2, tzinfo=datetime.timezone.utc)
  38. ),
  39. True,
  40. ),
  41. (
  42. vDDDTypes(
  43. datetime.datetime(2012, 7, 3, 16, 39, 2, tzinfo=datetime.timezone.utc)
  44. ),
  45. vDDDTypes(datetime.datetime(2012, 7, 3, 18, 39, 2, tzinfo=_CEST)),
  46. # logically that should be True
  47. # but shouldn't hurt to update the ics file
  48. False,
  49. ),
  50. (
  51. vDDDTypes(
  52. datetime.datetime(2012, 7, 3, 16, 39, 3, tzinfo=datetime.timezone.utc)
  53. ),
  54. vDDDTypes(
  55. datetime.datetime(2012, 7, 3, 16, 39, 2, tzinfo=datetime.timezone.utc)
  56. ),
  57. False,
  58. ),
  59. (
  60. vDDDLists(
  61. [datetime.datetime(2020, 2, 5, 20, 0, tzinfo=datetime.timezone.utc)]
  62. ),
  63. vDDDLists(
  64. [datetime.datetime(2020, 2, 5, 20, 0, tzinfo=datetime.timezone.utc)]
  65. ),
  66. True,
  67. ),
  68. (
  69. vDDDLists(
  70. [
  71. datetime.datetime(2020, 2, 5, 20, 0, tzinfo=datetime.timezone.utc),
  72. datetime.datetime(2020, 2, 5, 20, 5, tzinfo=datetime.timezone.utc),
  73. ]
  74. ),
  75. vDDDLists(
  76. [
  77. datetime.datetime(2020, 2, 5, 20, 0, tzinfo=datetime.timezone.utc),
  78. datetime.datetime(2020, 2, 5, 20, 5, tzinfo=datetime.timezone.utc),
  79. ]
  80. ),
  81. True,
  82. ),
  83. (
  84. vDDDLists(
  85. [
  86. datetime.datetime(2020, 2, 5, 20, 0, tzinfo=datetime.timezone.utc),
  87. datetime.datetime(2020, 2, 5, 20, 5, tzinfo=datetime.timezone.utc),
  88. ]
  89. ),
  90. vDDDLists(
  91. [
  92. datetime.datetime(2020, 2, 5, 20, 0, tzinfo=datetime.timezone.utc),
  93. datetime.datetime(2020, 2, 5, 20, 7, tzinfo=datetime.timezone.utc),
  94. ]
  95. ),
  96. False,
  97. ),
  98. (
  99. vDDDLists(
  100. [
  101. datetime.datetime(2020, 2, 5, 20, 0, tzinfo=datetime.timezone.utc),
  102. datetime.datetime(2020, 2, 5, 20, 5, tzinfo=datetime.timezone.utc),
  103. ]
  104. ),
  105. vDDDLists(
  106. [
  107. datetime.datetime(2020, 2, 5, 20, 0, tzinfo=datetime.timezone.utc),
  108. datetime.datetime(2020, 2, 5, 20, 5, tzinfo=datetime.timezone.utc),
  109. datetime.datetime(2020, 2, 5, 20, 7, tzinfo=datetime.timezone.utc),
  110. ]
  111. ),
  112. False,
  113. ),
  114. (
  115. vCalAddress("someelse@somewhere.com"),
  116. _parametrize(
  117. vCalAddress("someelse@somewhere.com"),
  118. dict(UTYPE="INDIVIDUAL", PARTSTAT="ACCEPTED"),
  119. ),
  120. False,
  121. ),
  122. (
  123. _parametrize(
  124. vCalAddress("someelse@somewhere.com"),
  125. dict(UTYPE="INDIVIDUAL", PARTSTAT="ACCEPTED"),
  126. ),
  127. _parametrize(
  128. vCalAddress("someelse@somewhere.com"),
  129. dict(UTYPE="INDIVIDUAL", PARTSTAT="ACCEPTED"),
  130. ),
  131. True,
  132. ),
  133. (
  134. [
  135. vCalAddress("someone@somewhere.com",),
  136. vCalAddress("someelse@somewhere.com"),
  137. ],
  138. [
  139. vCalAddress("someone@somewhere.com",),
  140. _parametrize(
  141. vCalAddress("someelse@somewhere.com"),
  142. dict(UTYPE="INDIVIDUAL", PARTSTAT="ACCEPTED"),
  143. ),
  144. ],
  145. False,
  146. ),
  147. (
  148. [
  149. vCalAddress("someone@somewhere.com",),
  150. _parametrize(
  151. vCalAddress("someelse@somewhere.com"),
  152. dict(UTYPE="INDIVIDUAL", PARTSTAT="ACCEPTED"),
  153. ),
  154. ],
  155. [
  156. vCalAddress("someone@somewhere.com",),
  157. _parametrize(
  158. vCalAddress("someelse@somewhere.com"),
  159. dict(UTYPE="INDIVIDUAL", PARTSTAT="ACCEPTED"),
  160. ),
  161. ],
  162. True,
  163. ),
  164. ],
  165. )
  166. def test__event_prop_equal(prop_a, prop_b, expected_result):
  167. assert _event_prop_equal(prop_a, prop_b) == expected_result