class AlarmTests(unittest.TestCase):
    def setUp(self):
        self.sensor = Mock()
        self.alarm = Alarm(self.sensor)
        self.HIGH_PRESSURE = 100
        self.LOW_PRESSURE = 10
        self.NORMAL_PRESSURE = 19

    def test_turn_alarm_on_when_sensor_is_over_high_threshold(self):
        self.sensor.pressure_psi_value.return_value = self.HIGH_PRESSURE
        self.alarm.check()
        self.sensor.pressure_psi_value.assert_called_once_with()
        self.alarm_should_be_on()

    def test_alarm_should_be_off_when_sensor_is_above_low_threshold_but_below_high_threshold(
            self):
        self.sensor.pressure_psi_value.return_value = self.NORMAL_PRESSURE
        self.alarm.check()
        self.sensor.pressure_psi_value.assert_called_once_with()
        self.alarm_should_be_off()

    def test_turn_alarm_on_when_sensor_is_below_low_threshold(self):
        self.sensor.pressure_psi_value.return_value = self.LOW_PRESSURE
        self.alarm.check()
        self.sensor.pressure_psi_value.assert_called_once_with()
        self.alarm_should_be_on()

    def test_alarm_should_stay_on_after_pressure_returns_to_normal(self):
        self.sensor.pressure_psi_value.return_value = self.LOW_PRESSURE
        self.alarm.check()
        self.sensor.pressure_psi_value.return_value = self.NORMAL_PRESSURE
        self.alarm.check()
        self.alarm_should_be_on()

    def alarm_should_be_on(self):
        eq_(True, self.alarm.is_alarm_on())

    def alarm_should_be_off(self):
        eq_(False, self.alarm.is_alarm_on())
class AlarmTests(unittest.TestCase):

    def setUp(self):
        self.sensor = Mock()
        self.alarm = Alarm(self.sensor)
        self.HIGH_PRESSURE = 100
        self.LOW_PRESSURE = 10
        self.NORMAL_PRESSURE = 19

    def test_turn_alarm_on_when_sensor_is_over_high_threshold(self):
        self.sensor.pressure_psi_value.return_value = self.HIGH_PRESSURE
        self.alarm.check()
        self.sensor.pressure_psi_value.assert_called_once_with()
        self.alarm_should_be_on()

    def test_alarm_should_be_off_when_sensor_is_above_low_threshold_but_below_high_threshold(self):
        self.sensor.pressure_psi_value.return_value = self.NORMAL_PRESSURE
        self.alarm.check()
        self.sensor.pressure_psi_value.assert_called_once_with()
        self.alarm_should_be_off()

    def test_turn_alarm_on_when_sensor_is_below_low_threshold(self):
        self.sensor.pressure_psi_value.return_value = self.LOW_PRESSURE
        self.alarm.check()
        self.sensor.pressure_psi_value.assert_called_once_with()
        self.alarm_should_be_on()

    def test_alarm_should_stay_on_after_pressure_returns_to_normal(self):
        self.sensor.pressure_psi_value.return_value = self.LOW_PRESSURE
        self.alarm.check()
        self.sensor.pressure_psi_value.return_value = self.NORMAL_PRESSURE
        self.alarm.check()
        self.alarm_should_be_on()

    def alarm_should_be_on(self):
        eq_(True, self.alarm.is_alarm_on())

    def alarm_should_be_off(self):
        eq_(False, self.alarm.is_alarm_on())
class AlarmTest(unittest.TestCase):
    def setUp(self) -> None:
        self._mock_sensor = Mock()
        self._alarm = Alarm(self._mock_sensor)

    def tearDown(self) -> None:
        del self._mock_sensor
        del self._alarm

    def test_alarm_is_off_by_default(self):
        self.assertEqual(self._alarm.is_alarm_on, False)

    def test_value(self):
        self._mock_sensor.pop_next_pressure_psi_value.return_value = 19
        self._alarm.check()
        self.assertEqual(self._alarm.is_alarm_on, False)

        self._mock_sensor.pop_next_pressure_psi_value.return_value = 16
        self._alarm.check()
        self.assertEqual(self._alarm.is_alarm_on, True)

        self._mock_sensor.pop_next_pressure_psi_value.return_value = 19
        self._alarm.check()
        self.assertEqual(self._alarm.is_alarm_on, False)

        self._mock_sensor.pop_next_pressure_psi_value.return_value = 25
        self._alarm.check()
        self.assertEqual(self._alarm.is_alarm_on, True)

        self._mock_sensor.pop_next_pressure_psi_value.return_value = 19
        self._alarm.check()
        self.assertEqual(self._alarm.is_alarm_on, False)

    def test_no_arg(self):
        with patch("tire_pressure_monitoring.Sensor") as mock_sensor:
            mock_sensor.return_value = 5
            temp_alarm = Alarm()
            self.assertEqual(temp_alarm._sensor, 5)
 def test_do_something(self):
     alarm = Alarm()
     alarm.check()
     alarm.is_alarm_on