Fix premature evaluation after blinking completes
When transitioning from STATE_BLINKING to STATE_WAIT_FOR_INPUT, the script used a stale timestamp `now` from before the blocking `blink_led` function. This caused the puzzle to immediately evaluate as failed. Updated to use `time.time()` after blinking finishes to ensure the user gets the full 3 seconds to enter their answer.
This commit is contained in:
@@ -103,3 +103,17 @@ def test_state_machine_incorrect(mock_gpio, mock_pygame):
|
|||||||
assert keep_running
|
assert keep_running
|
||||||
assert clock.state == wecker.STATE_WAIT_BEFORE_RETRY
|
assert clock.state == wecker.STATE_WAIT_BEFORE_RETRY
|
||||||
|
|
||||||
|
|
||||||
|
@patch('wecker.time.time')
|
||||||
|
def test_blinking_updates_time_correctly(mock_time, mock_gpio, mock_pygame):
|
||||||
|
clock = wecker.AlarmClock()
|
||||||
|
clock.state = wecker.STATE_BLINKING
|
||||||
|
clock.target_blinks = 4
|
||||||
|
|
||||||
|
mock_time.return_value = 200.0
|
||||||
|
|
||||||
|
with patch('wecker.blink_led'):
|
||||||
|
clock.update(100.0, False)
|
||||||
|
|
||||||
|
assert clock.state == wecker.STATE_WAIT_FOR_INPUT
|
||||||
|
assert clock.last_interaction_time == 200.0
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ class AlarmClock:
|
|||||||
logging.info("Blinking finished. Waiting for input...")
|
logging.info("Blinking finished. Waiting for input...")
|
||||||
self.state = STATE_WAIT_FOR_INPUT
|
self.state = STATE_WAIT_FOR_INPUT
|
||||||
self.user_presses = 0
|
self.user_presses = 0
|
||||||
self.last_interaction_time = now # Use the current update time!
|
self.last_interaction_time = time.time() # Use time.time() to account for blocking blink_led
|
||||||
if 'GPIO' in globals() and hasattr(GPIO, 'input'):
|
if 'GPIO' in globals() and hasattr(GPIO, 'input'):
|
||||||
self.button_was_pressed = (GPIO.input(BUTTON_PIN) == GPIO.LOW)
|
self.button_was_pressed = (GPIO.input(BUTTON_PIN) == GPIO.LOW)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user