fix: preserve parent RPC scope identity
Quality / quality (ubuntu-latest) (push) Failing after 9m50s
Quality / quality (windows-latest) (push) Canceled after 0s

This commit is contained in:
2026-08-12 19:23:27 +05:30
parent fe9bb9ede0
commit 7a968977f6
6 changed files with 34 additions and 9 deletions
+25
View File
@@ -851,6 +851,31 @@ test("component server calls use the nearest hydration component identity", asyn
expect(payload?.component).toBe("CButton");
});
test("a parent scope does not inherit a child component RPC identity", async () => {
const win = mount(
`<div data-scope="" data-wrn-hydration="Home:page123">` +
`<div data-scope="" data-wrn-hydration="CButton:button123">` +
`<div data-wrn-events="click"></div></div>` +
`<button id="parent-action" data-on-click="server.handleClick()">go</button>` +
`</div>`,
);
let payload: { component?: string } | undefined;
const globals = globalThis as Record<string, unknown>;
const originalFetch = globals.fetch;
globals.fetch = async (_input: RequestInfo | URL, init?: RequestInit) => {
payload = JSON.parse(String(init?.body));
return Response.json({ ok: true });
};
try {
(win.document.querySelector("#parent-action") as unknown as HTMLElement).click();
await new Promise((resolve) => setTimeout(resolve, 0));
} finally {
globals.fetch = originalFetch;
}
expect(payload?.component).toBe("Home");
});
test("component server calls prefer the rendered CSRF token over stale cookies", async () => {
const win = mount(
`<meta name="wrnexus-csrf" content="current-token">` +