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
 def setUp(self):
     self.sensor = Mock()
     self.alarm = Alarm(self.sensor)
     self.HIGH_PRESSURE = 100
     self.LOW_PRESSURE = 10
     self.NORMAL_PRESSURE = 19
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())
 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 setUp(self) -> None:
     self._mock_sensor = Mock()
     self._alarm = Alarm(self._mock_sensor)
 def test_alarm_is_off_by_default(self):
     alarm = Alarm()
     assert not 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())
 def setUp(self):
     self.sensor = Mock()
     self.alarm = Alarm(self.sensor)
     self.HIGH_PRESSURE = 100
     self.LOW_PRESSURE = 10
     self.NORMAL_PRESSURE = 19
 def create_alarm(self, next_psi_values):
     alarm = Alarm(
         self.create_sensor(next_psi_values),
         LOW_PRESSURE_THRESHOLD,
         HIGH_PRESSURE_THRESHOLD)
     return alarm