def test_monitor_status__should_set_status_to_open_when_garage_open_for_first_door(
            self, mock_status, mock_date, mock_file):
        mock_status.return_value = True

        monitor_status()

        assert self.STATE.DOORS[self.DOOR_ONE].STATUS == Automation.GARAGE.OPEN
    def test_monitor_status__should_nullify_open_date_when_closed_for_first_door(
            self, mock_status, mock_date, mock_file):
        mock_status.return_value = False

        monitor_status()

        assert self.STATE.DOORS[self.DOOR_ONE].OPEN_TIME is None
    def test_monitor_status__should_nullify_closed_date_when_opened_for_second_door(
            self, mock_status, mock_date, mock_file):
        mock_status.return_value = True

        monitor_status()

        assert self.STATE.DOORS[self.DOOR_TWO].CLOSED_TIME is None
    def test_monitor_status__should_write_status_to_file_when_closes_for_first_door(
            self, mock_status, mock_date, mock_file):
        mock_status.return_value = False
        mock_date.now.return_value = self.DATE

        monitor_status()

        mock_file.assert_any_call('1', self.DATE)
    def test_monitor_status__should_set_closed_time_when_garage_closed_for_first_door(
            self, mock_status, mock_date, mock_file):
        mock_status.return_value = False
        mock_date.now.return_value = self.DATE

        monitor_status()

        assert self.STATE.DOORS[self.DOOR_ONE].CLOSED_TIME == self.DATE
    def test_monitor_status__should_set_open_time_when_garage_open_for_first_door(
            self, mock_status, mock_date, mock_file):
        mock_status.return_value = True
        mock_date.now.return_value = self.DATE

        monitor_status()

        assert self.STATE.DOORS[self.DOOR_ONE].OPEN_TIME == self.DATE
    def test_monitor_status__should_set_status_to_closed_when_garage_door_closed_for_second_door(
            self, mock_status, mock_date, mock_file):
        mock_status.return_value = False

        monitor_status()

        assert self.STATE.DOORS[
            self.DOOR_TWO].STATUS == Automation.GARAGE.CLOSED
    def test_monitor_status__should_write_status_to_file_for_when_opens_for_second_door(
            self, mock_status, mock_date, mock_file):
        mock_status.return_value = True
        mock_date.now.return_value = self.DATE

        monitor_status()

        mock_file.assert_any_call('2', self.DATE)
    def test_monitor_status__should_set_open_time_when_garage_open_for_second_door(
            self, mock_status, mock_date, mock_file):
        mock_status.return_value = True
        mock_date.now.side_effect = [self.DATE, self.DATE]

        monitor_status()

        assert self.STATE.DOORS[self.DOOR_TWO].OPEN_TIME == self.DATE
    def test_monitor_status__should_not_reset_closed_date_when_already_closed_for_second_door(
            self, mock_status, mock_date, mock_file):
        older_date = datetime.now() - timedelta(days=1)
        mock_status.return_value = False
        mock_date.now.return_value = self.DATE
        self.STATE.DOORS[self.DOOR_TWO].CLOSED_TIME = older_date

        monitor_status()

        assert self.STATE.DOORS[self.DOOR_TWO].CLOSED_TIME == older_date
    def test_monitor_status__should_not_reset_open_date_when_already_open_for_first_door(
            self, mock_status, mock_date, mock_file):
        older_date = datetime.now() - timedelta(days=1)
        mock_status.return_value = True
        mock_date.now.return_value = self.DATE
        self.STATE.DOORS[self.DOOR_ONE].OPEN_TIME = older_date

        monitor_status()

        assert self.STATE.DOORS[self.DOOR_ONE].OPEN_TIME == older_date
    def test_monitor_status__should_call_is_garage_open_for_first_door(
            self, mock_status, mock_date, mock_file):
        monitor_status()

        mock_status.assert_any_call(self.DOOR_ONE)