Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

93 linhas
4.3 KiB

  1. import unittest
  2. from datetime import date
  3. from kosmorrolib import events
  4. from kosmorrolib.data import Event
  5. from kosmorrolib.core import get_timescale
  6. class MyTestCase(unittest.TestCase):
  7. def test_event_only_accepts_valid_values(self):
  8. with self.assertRaises(ValueError):
  9. Event('SUPERNOVA', None, get_timescale().now())
  10. def test_find_oppositions(self):
  11. # Test case: Mars opposition
  12. # Source of the information: https://promenade.imcce.fr/en/pages6/887.html#mar
  13. o1 = (events.search_events(date(2020, 10, 13)), '^2020-10-13T23:25')
  14. o2 = (events.search_events(date(2022, 12, 8)), '^2022-12-08T05:41')
  15. o3 = (events.search_events(date(2025, 1, 16)), '^2025-01-16T02:38')
  16. o4 = (events.search_events(date(2027, 2, 19)), '^2027-02-19T15:50')
  17. for (o, expected_date) in [o1, o2, o3, o4]:
  18. self.assertEqual(1, len(o), 'Expected 1 event for %s, got %d' % (expected_date, len(o)))
  19. self.assertEqual('OPPOSITION', o[0].event_type)
  20. self.assertEqual('MARS', o[0].objects[0].skyfield_name)
  21. self.assertRegex(o[0].start_time.isoformat(), expected_date)
  22. self.assertIsNone(o[0].end_time)
  23. self.assertEqual('Mars is in opposition', o[0].get_description())
  24. def test_find_conjunctions(self):
  25. MERCURY = 'MERCURY'
  26. JUPITER = 'JUPITER BARYCENTER'
  27. SATURN = 'SATURN BARYCENTER'
  28. PLUTO = 'PLUTO BARYCENTER'
  29. c1 = (events.search_events(date(2020, 1, 2)), [([MERCURY, JUPITER], '^2020-01-02T16:41')])
  30. c2 = (events.search_events(date(2020, 1, 12)), [([MERCURY, SATURN], '^2020-01-12T09:51'),
  31. ([MERCURY, PLUTO], '^2020-01-12T10:13'),
  32. ([SATURN, PLUTO], '^2020-01-12T16:57')])
  33. c3 = (events.search_events(date(2020, 2, 7)), [])
  34. for (c, expected_dates) in [c1, c2]:
  35. self.assertEqual(len(expected_dates), len(c),
  36. 'Expected %d event(s) for %s, got %d' % (len(expected_dates), expected_dates, len(c)))
  37. i = 0
  38. for conjunction in c:
  39. self.assertEqual('CONJUNCTION', conjunction.event_type)
  40. objects, expected_date = expected_dates[i]
  41. j = 0
  42. self.assertRegex(conjunction.start_time.isoformat(), expected_date)
  43. for object in objects:
  44. self.assertEqual(object, conjunction.objects[j].skyfield_name)
  45. j += 1
  46. self.assertIsNone(conjunction.end_time)
  47. self.assertRegex(conjunction.get_description(), ' are in conjunction$')
  48. i += 1
  49. def test_find_maximal_elongation(self):
  50. e = events.search_events(date(2020, 2, 10))
  51. self.assertEquals(1, len(e), 'Expected 1 events, got %d.' % len(e))
  52. e = e[0]
  53. self.assertEquals('MAXIMAL_ELONGATION', e.event_type)
  54. self.assertEquals(1, len(e.objects))
  55. self.assertEquals('MERCURY', e.objects[0].skyfield_name)
  56. self.assertEqual('18.2°', e.details)
  57. self.assertEquals((2020, 2, 10, 13, 46), (e.start_time.year, e.start_time.month, e.start_time.day,
  58. e.start_time.hour, e.start_time.minute))
  59. e = events.search_events(date(2020, 3, 24))
  60. self.assertEquals(2, len(e), 'Expected 2 events, got %d.' % len(e))
  61. self.assertEquals('MAXIMAL_ELONGATION', e[0].event_type)
  62. self.assertEquals(1, len(e[0].objects))
  63. self.assertEquals('MERCURY', e[0].objects[0].skyfield_name)
  64. self.assertEqual('27.8°', e[0].details)
  65. self.assertEquals((2020, 3, 24, 1, 56), (e[0].start_time.year, e[0].start_time.month, e[0].start_time.day,
  66. e[0].start_time.hour, e[0].start_time.minute))
  67. self.assertEquals('MAXIMAL_ELONGATION', e[1].event_type)
  68. self.assertEquals(1, len(e[1].objects))
  69. self.assertEquals('VENUS', e[1].objects[0].skyfield_name)
  70. self.assertEqual('46.1°', e[1].details)
  71. self.assertEquals((2020, 3, 24, 21, 58), (e[1].start_time.year, e[1].start_time.month, e[1].start_time.day,
  72. e[1].start_time.hour, e[1].start_time.minute))
  73. if __name__ == '__main__':
  74. unittest.main()