import unittest from kosmorrolib.ephemerides import EphemeridesComputer from kosmorrolib.core import get_skf_objects from kosmorrolib.data import Star, Position, MoonPhase from datetime import date class EphemeridesComputerTestCase(unittest.TestCase): def test_get_ephemerides_for_aster_returns_correct_hours(self): position = Position(0, 0) position.observation_planet = get_skf_objects()['earth'] star = EphemeridesComputer.get_asters_ephemerides_for_aster(Star('Sun', skyfield_name='sun'), date=date(2019, 11, 18), position=position) self.assertRegex(star.ephemerides.rise_time.isoformat(), '^2019-11-18T05:41:') self.assertRegex(star.ephemerides.culmination_time.isoformat(), '^2019-11-18T11:45:') self.assertRegex(star.ephemerides.set_time.isoformat(), '^2019-11-18T17:48:') ################################################################################################################### ### MOON PHASE TESTS ### ################################################################################################################### def test_moon_phase_new_moon(self): phase = EphemeridesComputer.get_moon_phase(2019, 11, 25) self.assertEqual('WANING_CRESCENT', phase.identifier) self.assertIsNone(phase.time) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-11-26T') phase = EphemeridesComputer.get_moon_phase(2019, 11, 26) self.assertEqual('NEW_MOON', phase.identifier) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-12-04T') phase = EphemeridesComputer.get_moon_phase(2019, 11, 27) self.assertEqual('WAXING_CRESCENT', phase.identifier) self.assertIsNone(phase.time) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-12-04T') def test_moon_phase_first_crescent(self): phase = EphemeridesComputer.get_moon_phase(2019, 11, 3) self.assertEqual('WAXING_CRESCENT', phase.identifier) self.assertIsNone(phase.time) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-11-04T') phase = EphemeridesComputer.get_moon_phase(2019, 11, 4) self.assertEqual('FIRST_QUARTER', phase.identifier) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-11-12T') phase = EphemeridesComputer.get_moon_phase(2019, 11, 5) self.assertEqual('WAXING_GIBBOUS', phase.identifier) self.assertIsNone(phase.time) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-11-12T') def test_moon_phase_full_moon(self): phase = EphemeridesComputer.get_moon_phase(2019, 11, 11) self.assertEqual('WAXING_GIBBOUS', phase.identifier) self.assertIsNone(phase.time) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-11-12T') phase = EphemeridesComputer.get_moon_phase(2019, 11, 12) self.assertEqual('FULL_MOON', phase.identifier) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-11-19T') phase = EphemeridesComputer.get_moon_phase(2019, 11, 13) self.assertEqual('WANING_GIBBOUS', phase.identifier) self.assertIsNone(phase.time) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-11-19T') def test_moon_phase_last_quarter(self): phase = EphemeridesComputer.get_moon_phase(2019, 11, 18) self.assertEqual('WANING_GIBBOUS', phase.identifier) self.assertIsNone(phase.time) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-11-19T') phase = EphemeridesComputer.get_moon_phase(2019, 11, 19) self.assertEqual('LAST_QUARTER', phase.identifier) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-11-26T') phase = EphemeridesComputer.get_moon_phase(2019, 11, 20) self.assertEqual('WANING_CRESCENT', phase.identifier) self.assertIsNone(phase.time) self.assertRegexpMatches(phase.next_phase_date.isoformat(), '^2019-11-26T') def test_moon_phase_prediction(self): phase = MoonPhase('NEW_MOON', None, None) self.assertEqual('First Quarter', phase.get_next_phase()) phase = MoonPhase('WAXING_CRESCENT', None, None) self.assertEqual('First Quarter', phase.get_next_phase()) phase = MoonPhase('FIRST_QUARTER', None, None) self.assertEqual('Full Moon', phase.get_next_phase()) phase = MoonPhase('WAXING_GIBBOUS', None, None) self.assertEqual('Full Moon', phase.get_next_phase()) phase = MoonPhase('FULL_MOON', None, None) self.assertEqual('Last Quarter', phase.get_next_phase()) phase = MoonPhase('WANING_GIBBOUS', None, None) self.assertEqual('Last Quarter', phase.get_next_phase()) phase = MoonPhase('LAST_QUARTER', None, None) self.assertEqual('New Moon', phase.get_next_phase()) phase = MoonPhase('WANING_CRESCENT', None, None) self.assertEqual('New Moon', phase.get_next_phase()) if __name__ == '__main__': unittest.main()