43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
import unittest
|
|
|
|
from core.quote_state_machine import QuoteStateMachine
|
|
|
|
|
|
class _State:
|
|
def __init__(self):
|
|
self.pending_image_urls = []
|
|
self.pending_requirements = []
|
|
self.quote_phase = "idle"
|
|
self.quote_ready_turns = 0
|
|
|
|
|
|
class GoldenReplayTests(unittest.TestCase):
|
|
def test_replay_collect_then_ready_then_quote(self):
|
|
sm = QuoteStateMachine(delay_turns=1)
|
|
st = _State()
|
|
|
|
replay = [
|
|
{"event": "image", "url": "a.jpg", "want_phase": "collecting"},
|
|
{"event": "image", "url": "b.jpg", "want_phase": "collecting"},
|
|
{"event": "finish", "want_phase": "ready_to_quote", "want_defer": True},
|
|
{"event": "progress", "want_phase": "ready_to_quote", "want_defer": False},
|
|
]
|
|
|
|
for step in replay:
|
|
if step["event"] == "image":
|
|
st.pending_image_urls.append(step["url"])
|
|
sm.refresh(st)
|
|
self.assertEqual(st.quote_phase, step["want_phase"])
|
|
elif step["event"] == "finish":
|
|
deferred = sm.should_defer_batch_quote(st, mark_ready=True)
|
|
self.assertEqual(st.quote_phase, step["want_phase"])
|
|
self.assertEqual(deferred, step["want_defer"])
|
|
elif step["event"] == "progress":
|
|
deferred = sm.should_defer_batch_quote(st, mark_ready=False)
|
|
self.assertEqual(st.quote_phase, step["want_phase"])
|
|
self.assertEqual(deferred, step["want_defer"])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(verbosity=2)
|