test(e2e): deterministically wait for event stream in logout propagation test (#38535)

The test raced the server-side SSE channel registration: a logout
emitted before registration is silently dropped ([example
flake](https://github.com/go-gitea/gitea/actions/runs/29699349255/job/88225654080)).
The 500ms wait from https://github.com/go-gitea/gitea/pull/37403 only
made this unlikely.

The server now registers the channel before sending the initial response
bytes, so an open connection implies registration. The shared worker
forwards the built-in `open` event (replaying it to late-attaching ports
via `EventSource.readyState`), the page exposes it as a
`data-user-events-connected` attribute, and the test waits for that
attribute instead of a fixed timeout.
This commit is contained in:
silverwind
2026-07-20 10:44:53 +02:00
committed by GitHub
parent 173965f66b
commit f9819dbb74
4 changed files with 14 additions and 7 deletions

View File

@@ -26,6 +26,11 @@ class Source {
type: 'status',
message: `registered to ${this.url}`,
});
// replay the "open" event to ports attaching to an already-open source
if (this.eventSource?.readyState === EventSource.OPEN) {
port.postMessage({type: 'open'});
}
}
deregister(port: MessagePort) {

View File

@@ -54,6 +54,9 @@ export class UserEventsSharedWorker {
} else if (event.data.type === 'close') {
this.sharedWorker.port.postMessage({type: 'close'});
this.sharedWorker.port.close();
} else if (event.data.type === 'open') {
// e2e tests wait for this attribute to know events cannot be missed anymore
document.documentElement.setAttribute('data-user-events-connected', 'true');
}
listener(event);
});