Ejemplo n.º 1
0
    def test_sleep_sleep_wake(self):
        sleep_date = date(2018, 12, 23)
        # before midnight
        sleep = {
            "title": "before midnight",
            "sleep1": datetime(2018, 12, 23, 22, 44, 13),
            "sleep2": datetime(2018, 12, 23, 22, 56, 26),
            "wake": datetime(2018, 12, 23, 23, 47, 34),
        }

        spreadsheet = DailysSpreadsheetMock(self.test_user, self.test_chan)
        # Setup field
        field = DailysSleepField(spreadsheet)

        # Send sleep message with telegram time
        date_sleep1 = sleep["sleep1"]
        evt_sleep = EventMessage(self.server, self.test_chan, self.test_user,
                                 "sleep").with_raw_data(
                                     RawDataTelegram(
                                         self.get_telegram_time(date_sleep1)))
        field.passive_trigger(evt_sleep)
        # Check sleep time is logged
        notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
        assert "sleep_time" in notif_dict
        assert notif_dict["sleep_time"] == date_sleep1.isoformat()
        # Check response is given
        data_sleep = self.server.get_send_data(1, self.test_chan, EventMessage)
        assert "goodnight" in data_sleep[0].text.lower()

        # Send second sleep message with telegram time
        date_sleep2 = sleep["sleep2"]
        evt_sleep = EventMessage(self.server, self.test_chan, self.test_user,
                                 "sleep").with_raw_data(
                                     RawDataTelegram(
                                         self.get_telegram_time(date_sleep2)))
        field.passive_trigger(evt_sleep)
        # Check sleep time is logged
        notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
        assert "sleep_time" in notif_dict
        assert notif_dict["sleep_time"] == date_sleep2.isoformat()
        # Check response is given
        data_sleep = self.server.get_send_data(1, self.test_chan, EventMessage)
        assert "good night again" in data_sleep[0].text.lower()

        # Send wake message with telegram time
        date_wake = sleep["wake"]
        evt_wake = EventMessage(self.server, self.test_chan, self.test_user,
                                "morning").with_raw_data(
                                    RawDataTelegram(
                                        self.get_telegram_time(date_wake)))
        field.passive_trigger(evt_wake)
        # Check wake time is logged
        notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
        assert "sleep_time" in notif_dict
        assert "wake_time" in notif_dict
        assert notif_dict["sleep_time"] == date_sleep2.isoformat()
        assert notif_dict["wake_time"] == date_wake.isoformat()
        # Check response is given
        data_wake = self.server.get_send_data(1, self.test_chan, EventMessage)
        assert "good morning" in data_wake[0].text.lower()
Ejemplo n.º 2
0
 def test_sleep_after_5(self):
     spreadsheet = DailysSpreadsheetMock(self.test_user, self.test_chan)
     # Setup field
     field = DailysSleepField(spreadsheet)
     # Send sleep message with telegram time
     sleep_time = datetime(2018, 12, 23, 23, 44, 13)
     evt = EventMessage(self.server, self.test_chan, self.test_user,
                        "sleep").with_raw_data(
                            RawDataTelegram(
                                self.get_telegram_time(sleep_time)))
     field.passive_trigger(evt)
     # Check data is saved to today
     notif_dict = spreadsheet.saved_data["sleep"][sleep_time.date()]
     assert "sleep_time" in notif_dict
     assert notif_dict["sleep_time"] == sleep_time.isoformat()
Ejemplo n.º 3
0
 def test_now_time(self):
     spreadsheet = DailysSpreadsheetMock(self.test_user, self.test_chan)
     # Setup field
     field = DailysSleepField(spreadsheet)
     # Send sleep message with telegram time
     evt = EventMessage(self.server, self.test_chan, self.test_user,
                        "sleep")
     now = datetime.now()
     today_date = now.date()
     yesterday_date = today_date - timedelta(1)
     field.passive_trigger(evt)
     # Check data is saved
     notif_dict = spreadsheet.saved_data["sleep"][
         yesterday_date if now.hour <= 16 else today_date]
     assert "sleep_time" in notif_dict
     logged_time = dateutil.parser.parse(notif_dict["sleep_time"])
     assert logged_time - now < timedelta(0, 10)
Ejemplo n.º 4
0
 def test_telegram_time(self):
     spreadsheet = DailysSpreadsheetMock(self.test_user, self.test_chan)
     # Setup field
     field = DailysSleepField(spreadsheet)
     # Send sleep message with telegram time
     msg_date = datetime(2018, 12, 23, 23, 44, 13)
     today = msg_date.date()
     yesterday = today - timedelta(1)
     evt = EventMessage(self.server, self.test_chan, self.test_user,
                        "sleep").with_raw_data(
                            RawDataTelegram(
                                self.get_telegram_time(msg_date)))
     field.passive_trigger(evt)
     # Check data is saved
     notif_dict = spreadsheet.saved_data["sleep"][yesterday if msg_date.
                                                  hour <= 16 else today]
     assert "sleep_time" in notif_dict
     assert notif_dict["sleep_time"] == msg_date.isoformat()
Ejemplo n.º 5
0
 def test_sleep_wake(self):
     sleep_date = date(2018, 12, 23)
     sleeps = list()
     # before midnight
     sleeps.append({
         "title": "before midnight",
         "sleep": datetime(2018, 12, 23, 22, 44, 13),
         "wake": datetime(2018, 12, 23, 23, 47, 34),
     })
     # over midnight
     sleeps.append({
         "title": "over midnight",
         "sleep": datetime(2018, 12, 23, 22, 44, 13),
         "wake": datetime(2018, 12, 24, 11, 47, 34),
     })
     # after midnight
     sleeps.append({
         "title": "after midnight",
         "sleep": datetime(2018, 12, 24, 1, 44, 13),
         "wake": datetime(2018, 12, 24, 11, 47, 34),
     })
     for sleep in sleeps:
         with self.subTest(sleep["title"]):
             spreadsheet = DailysSpreadsheetMock(self.test_user,
                                                 self.test_chan)
             # Setup field
             field = DailysSleepField(spreadsheet)
             # Send sleep message with telegram time
             date_sleep = sleep["sleep"]
             evt_sleep = EventMessage(
                 self.server, self.test_chan, self.test_user,
                 "sleep").with_raw_data(
                     RawDataTelegram(self.get_telegram_time(date_sleep)))
             field.passive_trigger(evt_sleep)
             # Check sleep time is logged
             notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
             assert "sleep_time" in notif_dict
             assert notif_dict["sleep_time"] == date_sleep.isoformat()
             # Check response is given
             data_sleep = self.server.get_send_data(1, self.test_chan,
                                                    EventMessage)
             assert "goodnight" in data_sleep[0].text.lower()
             # Send wake message with telegram time
             date_wake = sleep["wake"]
             evt_wake = EventMessage(
                 self.server, self.test_chan, self.test_user,
                 "morning").with_raw_data(
                     RawDataTelegram(self.get_telegram_time(date_wake)))
             field.passive_trigger(evt_wake)
             # Check wake time is logged
             notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
             assert "sleep_time" in notif_dict
             assert "wake_time" in notif_dict
             assert notif_dict["sleep_time"] == date_sleep.isoformat()
             assert notif_dict["wake_time"] == date_wake.isoformat()
             # Check response is given
             data_wake = self.server.get_send_data(1, self.test_chan,
                                                   EventMessage)
             assert "good morning" in data_wake[0].text.lower()
Ejemplo n.º 6
0
 def test_create_from_input_col_specified(self):
     # Setup
     cmd_name = "setup dailys field"
     cmd_args = "sleep"
     evt = EventMessage(
         self.server,
         self.test_chan,
         self.test_user,
         "{} {}".format(cmd_name, cmd_args),
     )
     evt.split_command_text(cmd_name, cmd_args)
     spreadsheet = DailysSpreadsheetMock(self.test_user, self.test_chan)
     # Create from input
     field = DailysSleepField.create_from_input(evt, spreadsheet)
     assert field.spreadsheet == spreadsheet
Ejemplo n.º 7
0
def get_field_objects(test_user, test_chan):
    spreadsheet = DailysSpreadsheetMock(test_user, test_chan)
    field_obs = list()
    field_obs.append(
        DailysDuolingoField(spreadsheet, "cabinet",
                            os.getenv("test_duo_password")))
    field_obs.append(
        DailysMoodField(
            spreadsheet,
            [DailysMoodField.TIME_SLEEP,
             time(14, 00),
             time(22, 00)],
            ["Happiness", "Anger", "Sleepiness"],
        ))
    field_obs.append(DailysFAField(spreadsheet))
    field_obs.append(DailysSleepField(spreadsheet))
    field_obs.append(DailysDreamField(spreadsheet))
    return field_obs
Ejemplo n.º 8
0
    def test_two_interruptions(self):
        sleep_date = date(2018, 12, 23)
        sleep = {
            "sleep": datetime(2018, 12, 24, 0, 44, 13),
            "interrupt1_start": datetime(2018, 12, 24, 2, 15, 14),
            "interrupt1_end": datetime(2018, 12, 24, 2, 16, 17),
            "interrupt2_start": datetime(2018, 12, 24, 4, 15, 14),
            "interrupt2_end": datetime(2018, 12, 24, 4, 16, 17),
            "wake": datetime(2018, 12, 24, 11, 47, 34),
        }

        spreadsheet = DailysSpreadsheetMock(self.test_user, self.test_chan)
        # Setup field
        field = DailysSleepField(spreadsheet)

        # Send sleep message with telegram time
        date_sleep = sleep["sleep"]
        evt_sleep = EventMessage(self.server, self.test_chan, self.test_user,
                                 "sleep").with_raw_data(
                                     RawDataTelegram(
                                         self.get_telegram_time(date_sleep)))
        field.passive_trigger(evt_sleep)
        # Check sleep time is logged
        notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
        assert "sleep_time" in notif_dict
        assert notif_dict["sleep_time"] == date_sleep.isoformat()
        # Check response is given
        data_sleep = self.server.get_send_data(1, self.test_chan, EventMessage)
        assert "goodnight" in data_sleep[0].text.lower()

        # Send first interrupt start message with telegram time
        date_interrupt1_start = sleep["interrupt1_start"]
        evt_wake = EventMessage(
            self.server, self.test_chan, self.test_user,
            "morning").with_raw_data(
                RawDataTelegram(self.get_telegram_time(date_interrupt1_start)))
        field.passive_trigger(evt_wake)
        # Check wake time is logged
        notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
        assert "sleep_time" in notif_dict
        assert "wake_time" in notif_dict
        assert notif_dict["sleep_time"] == date_sleep.isoformat()
        assert notif_dict["wake_time"] == date_interrupt1_start.isoformat()
        # Check response is given
        data_wake = self.server.get_send_data(1, self.test_chan, EventMessage)
        assert "good morning" in data_wake[0].text.lower()

        # Send first interrupt end message with telegram time
        date_interrupt1_end = sleep["interrupt1_end"]
        evt_wake = EventMessage(
            self.server, self.test_chan, self.test_user,
            "sleep").with_raw_data(
                RawDataTelegram(self.get_telegram_time(date_interrupt1_end)))
        field.passive_trigger(evt_wake)
        # Check wake time is logged
        notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
        assert "sleep_time" in notif_dict
        assert "interruptions" in notif_dict
        assert "wake_time" not in notif_dict
        assert notif_dict["sleep_time"] == date_sleep.isoformat()
        assert isinstance(notif_dict["interruptions"], list)
        assert len(notif_dict["interruptions"]) == 1
        assert (notif_dict["interruptions"][0]["wake_time"] ==
                date_interrupt1_start.isoformat())
        assert (notif_dict["interruptions"][0]["sleep_time"] ==
                date_interrupt1_end.isoformat())
        # Check response is given
        data_wake = self.server.get_send_data(1, self.test_chan, EventMessage)
        assert "back to sleep" in data_wake[0].text.lower()

        # Send second interrupt start message with telegram time
        date_interrupt2_start = sleep["interrupt2_start"]
        evt_wake = EventMessage(
            self.server, self.test_chan, self.test_user,
            "morning").with_raw_data(
                RawDataTelegram(self.get_telegram_time(date_interrupt2_start)))
        field.passive_trigger(evt_wake)
        # Check wake time is logged
        notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
        assert "sleep_time" in notif_dict
        assert "interruptions" in notif_dict
        assert "wake_time" in notif_dict
        assert notif_dict["sleep_time"] == date_sleep.isoformat()
        assert len(notif_dict["interruptions"]) == 1
        assert (notif_dict["interruptions"][0]["wake_time"] ==
                date_interrupt1_start.isoformat())
        assert (notif_dict["interruptions"][0]["sleep_time"] ==
                date_interrupt1_end.isoformat())
        assert notif_dict["wake_time"] == date_interrupt2_start.isoformat()
        # Check response is given
        data_wake = self.server.get_send_data(1, self.test_chan, EventMessage)
        assert "good morning" in data_wake[0].text.lower()

        # Send second interrupt end message with telegram time
        date_interrupt2_end = sleep["interrupt2_end"]
        evt_wake = EventMessage(
            self.server, self.test_chan, self.test_user,
            "sleep").with_raw_data(
                RawDataTelegram(self.get_telegram_time(date_interrupt2_end)))
        field.passive_trigger(evt_wake)
        # Check wake time is logged
        notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
        assert "sleep_time" in notif_dict
        assert "interruptions" in notif_dict
        assert "wake_time" not in notif_dict
        assert notif_dict["sleep_time"] == date_sleep.isoformat()
        assert isinstance(notif_dict["interruptions"], list)
        assert len(notif_dict["interruptions"]) == 2
        assert (notif_dict["interruptions"][0]["wake_time"] ==
                date_interrupt1_start.isoformat())
        assert (notif_dict["interruptions"][0]["sleep_time"] ==
                date_interrupt1_end.isoformat())
        assert (notif_dict["interruptions"][1]["wake_time"] ==
                date_interrupt2_start.isoformat())
        assert (notif_dict["interruptions"][1]["sleep_time"] ==
                date_interrupt2_end.isoformat())
        # Check response is given
        data_wake = self.server.get_send_data(1, self.test_chan, EventMessage)
        assert "back to sleep" in data_wake[0].text.lower()

        # Send wake with telegram time
        date_wake = sleep["wake"]
        evt_wake = EventMessage(self.server, self.test_chan, self.test_user,
                                "morning").with_raw_data(
                                    RawDataTelegram(
                                        self.get_telegram_time(date_wake)))
        field.passive_trigger(evt_wake)
        # Check wake time is logged
        notif_dict = spreadsheet.saved_data["sleep"][sleep_date]
        assert "sleep_time" in notif_dict
        assert "interruptions" in notif_dict
        assert "wake_time" in notif_dict
        assert notif_dict["sleep_time"] == date_sleep.isoformat()
        assert isinstance(notif_dict["interruptions"], list)
        assert len(notif_dict["interruptions"]) == 2
        assert (notif_dict["interruptions"][0]["wake_time"] ==
                date_interrupt1_start.isoformat())
        assert (notif_dict["interruptions"][0]["sleep_time"] ==
                date_interrupt1_end.isoformat())
        assert (notif_dict["interruptions"][1]["wake_time"] ==
                date_interrupt2_start.isoformat())
        assert (notif_dict["interruptions"][1]["sleep_time"] ==
                date_interrupt2_end.isoformat())
        assert notif_dict["wake_time"] == date_wake.isoformat()
        # Check response is given
        data_wake = self.server.get_send_data(1, self.test_chan, EventMessage)
        assert "good morning" in data_wake[0].text.lower()