45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
"""The desktop and browser must see the same events, without duplicating replay."""
|
|
from tui_gateway import event_replay, server
|
|
|
|
|
|
class Viewer:
|
|
def __init__(self, fail=False):
|
|
self.frames = []
|
|
self.fail = fail
|
|
|
|
def write(self, frame):
|
|
if self.fail:
|
|
raise OSError("disconnected")
|
|
self.frames.append(frame)
|
|
return True
|
|
|
|
|
|
def test_event_reaches_both_viewers_once_and_is_recorded_once(monkeypatch):
|
|
desktop, chrome = Viewer(), Viewer()
|
|
monkeypatch.setattr(server, "_sessions", {"browser-test": {
|
|
"transport": chrome, "viewers": {desktop: 1, chrome: 2},
|
|
}})
|
|
event_replay.reset_replay_state()
|
|
try:
|
|
frame = server._event_frame("message.delta", "browser-test", {"text": "İki yüzey"})
|
|
assert server.write_json(frame)
|
|
assert desktop.frames == chrome.frames == [frame]
|
|
assert event_replay.latest_seq("browser-test") == 1
|
|
assert len(event_replay.events_since("browser-test", 0)) == 1
|
|
finally:
|
|
event_replay.reset_replay_state()
|
|
|
|
|
|
def test_closed_primary_does_not_hide_events_from_remaining_viewer(monkeypatch):
|
|
desktop, chrome = Viewer(), Viewer(fail=True)
|
|
monkeypatch.setattr(server, "_sessions", {"browser-test": {
|
|
"transport": chrome, "viewers": {desktop: 1, chrome: 2},
|
|
}})
|
|
event_replay.reset_replay_state()
|
|
try:
|
|
frame = server._event_frame("approval.request", "browser-test", {"request_id": "test"})
|
|
assert server.write_json(frame)
|
|
assert desktop.frames == [frame]
|
|
finally:
|
|
event_replay.reset_replay_state()
|