From ff8deafe975767a724d5bc46929736bc784ae3d8 Mon Sep 17 00:00:00 2001 From: BakiVernes Date: Tue, 5 Sep 2023 14:10:19 +0200 Subject: [PATCH] Fix turbo stream link setting the src of a turbo frame container --- src/observers/form_link_click_observer.js | 2 +- src/tests/functional/frame_tests.js | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/observers/form_link_click_observer.js b/src/observers/form_link_click_observer.js index bb2e68017..55b94bb64 100644 --- a/src/observers/form_link_click_observer.js +++ b/src/observers/form_link_click_observer.js @@ -20,7 +20,7 @@ export class FormLinkClickObserver { willFollowLinkToLocation(link, location, originalEvent) { return ( this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) && - link.hasAttribute("data-turbo-method") + (link.hasAttribute("data-turbo-method") || link.hasAttribute("data-turbo-stream")) ) } diff --git a/src/tests/functional/frame_tests.js b/src/tests/functional/frame_tests.js index ba66c8cc9..bd06f2d15 100644 --- a/src/tests/functional/frame_tests.js +++ b/src/tests/functional/frame_tests.js @@ -82,6 +82,19 @@ test("test following a link sets the frame element's [src]", async ({ page }) => assert.equal(src.searchParams.get("key"), "value", "[src] attribute encodes query parameters") }) +test("test following a link doesn't set the frame element's [src] if the link has [data-turbo-stream]", async ({ page }) => { + await page.goto("/src/tests/fixtures/form.html") + + const originalSrc = await page.getAttribute("#frame", "src") + + await page.click("#stream-link-get-method-inside-frame") + await nextBeat() + + const newSrc = await page.getAttribute("#frame", "src") + + assert.equal(originalSrc, newSrc, "the turbo-frame src should not change after clicking the link") +}) + test("test a frame whose src references itself does not infinitely loop", async ({ page }) => { await page.click("#frame-self")