選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 

195 行
10 KiB

  1. import unittest
  2. from datetime import date, datetime
  3. from kosmorrolib.data import AsterEphemerides, Planet, MoonPhase, Event
  4. from kosmorrolib.dumper import JsonDumper, TextDumper, _LatexDumper
  5. class DumperTestCase(unittest.TestCase):
  6. def setUp(self) -> None:
  7. self.maxDiff = None
  8. def test_json_dumper_returns_correct_json(self):
  9. self.assertEqual('{\n'
  10. ' "moon_phase": {\n'
  11. ' "next_phase_date": "2019-10-21T00:00:00",\n'
  12. ' "phase": "FULL_MOON",\n'
  13. ' "date": "2019-10-14T00:00:00"\n'
  14. ' },\n'
  15. ' "events": [\n'
  16. ' {\n'
  17. ' "event_type": "OPPOSITION",\n'
  18. ' "objects": [\n'
  19. ' "Mars"\n'
  20. ' ],\n'
  21. ' "start_time": "2019-10-14T23:00:00",\n'
  22. ' "end_time": null\n'
  23. ' }\n'
  24. ' ],\n'
  25. ' "ephemerides": [\n'
  26. ' {\n'
  27. ' "object": "Mars",\n'
  28. ' "details": {\n'
  29. ' "rise_time": null,\n'
  30. ' "culmination_time": null,\n'
  31. ' "set_time": null\n'
  32. ' }\n'
  33. ' }\n'
  34. ' ]\n'
  35. '}', JsonDumper(self._get_data(), self._get_events()).to_string())
  36. data = self._get_data(aster_rise_set=True)
  37. self.assertEqual('{\n'
  38. ' "moon_phase": {\n'
  39. ' "next_phase_date": "2019-10-21T00:00:00",\n'
  40. ' "phase": "FULL_MOON",\n'
  41. ' "date": "2019-10-14T00:00:00"\n'
  42. ' },\n'
  43. ' "events": [\n'
  44. ' {\n'
  45. ' "event_type": "OPPOSITION",\n'
  46. ' "objects": [\n'
  47. ' "Mars"\n'
  48. ' ],\n'
  49. ' "start_time": "2019-10-14T23:00:00",\n'
  50. ' "end_time": null\n'
  51. ' }\n'
  52. ' ],\n'
  53. ' "ephemerides": [\n'
  54. ' {\n'
  55. ' "object": "Mars",\n'
  56. ' "details": {\n'
  57. ' "rise_time": "2019-10-14T08:00:00",\n'
  58. ' "culmination_time": "2019-10-14T13:00:00",\n'
  59. ' "set_time": "2019-10-14T23:00:00"\n'
  60. ' }\n'
  61. ' }\n'
  62. ' ]\n'
  63. '}', JsonDumper(data,
  64. self._get_events()
  65. ).to_string())
  66. def test_text_dumper_without_events(self):
  67. ephemerides = self._get_data()
  68. self.assertEqual('Monday October 14, 2019\n\n'
  69. 'Object Rise time Culmination time Set time\n'
  70. '-------- ----------- ------------------ ----------\n'
  71. 'Mars - - -\n\n'
  72. 'Moon phase: Full Moon\n'
  73. 'Last Quarter on Monday October 21, 2019 at 00:00\n\n'
  74. 'Note: All the hours are given in UTC.',
  75. TextDumper(ephemerides, [], date=date(2019, 10, 14), with_colors=False).to_string())
  76. ephemerides = self._get_data(aster_rise_set=True)
  77. self.assertEqual('Monday October 14, 2019\n\n'
  78. 'Object Rise time Culmination time Set time\n'
  79. '-------- ----------- ------------------ ----------\n'
  80. 'Mars 08:00 13:00 23:00\n\n'
  81. 'Moon phase: Full Moon\n'
  82. 'Last Quarter on Monday October 21, 2019 at 00:00\n\n'
  83. 'Note: All the hours are given in UTC.',
  84. TextDumper(ephemerides, [], date=date(2019, 10, 14), with_colors=False).to_string())
  85. def test_text_dumper_with_events(self):
  86. ephemerides = self._get_data()
  87. self.assertEqual('Monday October 14, 2019\n\n'
  88. 'Object Rise time Culmination time Set time\n'
  89. '-------- ----------- ------------------ ----------\n'
  90. 'Mars - - -\n\n'
  91. 'Moon phase: Full Moon\n'
  92. 'Last Quarter on Monday October 21, 2019 at 00:00\n\n'
  93. 'Expected events:\n'
  94. '23:00 Mars is in opposition\n\n'
  95. 'Note: All the hours are given in UTC.',
  96. TextDumper(ephemerides, self._get_events(), date=date(2019, 10, 14), with_colors=False).to_string())
  97. def test_text_dumper_without_ephemerides_and_with_events(self):
  98. ephemerides = self._get_data(False)
  99. self.assertEqual('Monday October 14, 2019\n\n'
  100. 'Moon phase: Full Moon\n'
  101. 'Last Quarter on Monday October 21, 2019 at 00:00\n\n'
  102. 'Expected events:\n'
  103. '23:00 Mars is in opposition\n\n'
  104. 'Note: All the hours are given in UTC.',
  105. TextDumper(ephemerides, self._get_events(), date=date(2019, 10, 14), with_colors=False).to_string())
  106. def test_timezone_is_taken_in_account(self):
  107. ephemerides = self._get_data(aster_rise_set=True)
  108. self.assertEqual('Monday October 14, 2019\n\n'
  109. 'Object Rise time Culmination time Set time\n'
  110. '-------- ----------- ------------------ -------------\n'
  111. 'Mars 09:00 14:00 Oct 15, 00:00\n\n'
  112. 'Moon phase: Full Moon\n'
  113. 'Last Quarter on Monday October 21, 2019 at 01:00\n\n'
  114. 'Expected events:\n'
  115. 'Oct 15, 00:00 Mars is in opposition\n\n'
  116. 'Note: All the hours are given in the UTC+1 timezone.',
  117. TextDumper(ephemerides, self._get_events(), date=date(2019, 10, 14), with_colors=False, timezone=1).to_string())
  118. ephemerides = self._get_data(aster_rise_set=True)
  119. self.assertEqual('Monday October 14, 2019\n\n'
  120. 'Object Rise time Culmination time Set time\n'
  121. '-------- ----------- ------------------ ----------\n'
  122. 'Mars 07:00 12:00 22:00\n\n'
  123. 'Moon phase: Full Moon\n'
  124. 'Last Quarter on Sunday October 20, 2019 at 23:00\n\n'
  125. 'Expected events:\n'
  126. '22:00 Mars is in opposition\n\n'
  127. 'Note: All the hours are given in the UTC-1 timezone.',
  128. TextDumper(ephemerides, self._get_events(), date=date(2019, 10, 14), with_colors=False, timezone=-1).to_string())
  129. def test_latex_dumper(self):
  130. latex = _LatexDumper(self._get_data(), self._get_events(), date=date(2019, 10, 14)).to_string()
  131. self.assertRegex(latex, 'Monday October 14, 2019')
  132. self.assertRegex(latex, 'Full Moon')
  133. self.assertRegex(latex, r'\\section{\\sffamily Expected events}')
  134. self.assertRegex(latex, r'\\section{\\sffamily Ephemerides of the day}')
  135. self.assertRegex(latex, r'\\object\{Mars\}\{-\}\{-\}\{-\}')
  136. self.assertRegex(latex, r'\\event\{23:00\}\{Mars is in opposition\}')
  137. latex = _LatexDumper(self._get_data(aster_rise_set=True),
  138. self._get_events(), date=date(2019, 10, 14)).to_string()
  139. self.assertRegex(latex, r'\\object\{Mars\}\{08:00\}\{13:00\}\{23:00\}')
  140. def test_latex_dumper_without_ephemerides(self):
  141. latex = _LatexDumper(self._get_data(False), self._get_events(), date=date(2019, 10, 14)).to_string()
  142. self.assertRegex(latex, 'Monday October 14, 2019')
  143. self.assertRegex(latex, 'Full Moon')
  144. self.assertRegex(latex, r'\\section{\\sffamily Expected events}')
  145. self.assertRegex(latex, r'\\event\{23:00\}\{Mars is in opposition\}')
  146. self.assertNotRegex(latex, r'\\object\{Mars\}\{-\}\{-\}\{-\}')
  147. self.assertNotRegex(latex, r'\\section{\\sffamily Ephemerides of the day}')
  148. def test_latex_dumper_without_events(self):
  149. latex = _LatexDumper(self._get_data(), [], date=date(2019, 10, 14)).to_string()
  150. self.assertRegex(latex, 'Monday October 14, 2019')
  151. self.assertRegex(latex, 'Full Moon')
  152. self.assertRegex(latex, r'\\object\{Mars\}\{-\}\{-\}\{-\}')
  153. self.assertRegex(latex, r'\\section{\\sffamily Ephemerides of the day}')
  154. self.assertNotRegex(latex, r'\\section{\\sffamily Expected events}')
  155. @staticmethod
  156. def _get_data(has_ephemerides: bool = True, aster_rise_set=False):
  157. rise_time = datetime(2019, 10, 14, 8) if aster_rise_set else None
  158. culmination_time = datetime(2019, 10, 14, 13) if aster_rise_set else None
  159. set_time = datetime(2019, 10, 14, 23) if aster_rise_set else None
  160. return {
  161. 'moon_phase': MoonPhase('FULL_MOON', datetime(2019, 10, 14), datetime(2019, 10, 21)),
  162. 'details': [Planet('Mars', 'MARS',
  163. AsterEphemerides(rise_time, culmination_time, set_time))] if has_ephemerides else []
  164. }
  165. @staticmethod
  166. def _get_events():
  167. return [Event('OPPOSITION',
  168. [Planet('Mars', 'MARS')],
  169. datetime(2019, 10, 14, 23, 00))
  170. ]
  171. if __name__ == '__main__':
  172. unittest.main()