| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- """Tests for the pure SessionTracker module (no fakes, no I/O)."""
- from stt_daemon.session import SessionTracker
- def _counter():
- """Deterministic id factory: returns id-1, id-2, ... and records call times."""
- calls = []
- def factory(now):
- calls.append(now)
- return f"id-{len(calls)}"
- return factory, calls
- def test_current_id_is_none_before_first_observe():
- factory, _ = _counter()
- tracker = SessionTracker(300.0, factory)
- assert tracker.current_id is None
- def test_first_observe_mints_the_factory_id_for_now():
- def factory(now):
- return f"id-{now}"
- tracker = SessionTracker(300.0, factory)
- assert tracker.observe(100.0) == factory(100.0)
- def test_same_id_within_gap_then_new_id_beyond_gap():
- gap = 1.0
- factory, calls = _counter()
- tracker = SessionTracker(gap, factory)
- first = tracker.observe(100.0)
- # `gap - 1` after the first observation: still inside the gap, same id.
- assert tracker.observe(100.0 + gap - 1) == first
- # Beyond the gap: a new id, and the factory minted exactly twice.
- assert tracker.observe(100.0 + gap + 1) != first
- assert len(calls) == 2
- def test_exact_gap_boundary_does_not_mint():
- gap = 300.0
- factory, calls = _counter()
- tracker = SessionTracker(gap, factory)
- first = tracker.observe(100.0)
- # now - last == gap is NOT > gap, so the boundary must not roll over.
- assert tracker.observe(100.0 + gap) == first
- assert len(calls) == 1
- def test_just_beyond_gap_mints_a_new_id():
- gap = 300.0
- factory, calls = _counter()
- tracker = SessionTracker(gap, factory)
- first = tracker.observe(100.0)
- assert tracker.observe(100.0 + gap + 1) != first
- assert len(calls) == 2
- def test_zero_gap_returns_one_id_forever():
- factory, calls = _counter()
- tracker = SessionTracker(0.0, factory)
- first = tracker.observe(0.0)
- assert tracker.observe(1_000_000.0) == first
- assert tracker.observe(1_000_000_000.0) == first
- assert len(calls) == 1
- def test_negative_gap_also_disables_rollover():
- factory, calls = _counter()
- tracker = SessionTracker(-5.0, factory)
- first = tracker.observe(100.0)
- assert tracker.observe(100.0 + 86_400.0) == first
- assert len(calls) == 1
- def test_large_jump_yields_exactly_one_new_id():
- gap = 300.0
- factory, calls = _counter()
- tracker = SessionTracker(gap, factory)
- first = tracker.observe(100.0)
- after = tracker.observe(100.0 + 86_400.0)
- assert after != first
- assert len(calls) == 2
- def test_current_id_tracks_the_latest_minted_id():
- factory, _ = _counter()
- tracker = SessionTracker(300.0, factory)
- assert tracker.current_id is None
- first = tracker.observe(100.0)
- assert tracker.current_id == first
- rolled = tracker.observe(100.0 + 301)
- assert tracker.current_id == rolled
|