diff --git a/src/observers/form_link_click_observer.js b/src/observers/form_link_click_observer.js index c6471fba4..c6eff7683 100644 --- a/src/observers/form_link_click_observer.js +++ b/src/observers/form_link_click_observer.js @@ -30,7 +30,7 @@ export class FormLinkClickObserver { willFollowLinkToLocation(link, location, originalEvent) { return ( this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) && - (link.hasAttribute("data-turbo-method") || link.hasAttribute("data-turbo-stream")) + (link.hasAttribute("data-turbo-method") || link.hasAttribute("data-turbo-stream") || link.hasAttribute("data-turbo-confirm")) ) } diff --git a/src/tests/fixtures/drive.html b/src/tests/fixtures/drive.html index 7499a06b0..375528b32 100644 --- a/src/tests/fixtures/drive.html +++ b/src/tests/fixtures/drive.html @@ -11,6 +11,7 @@

Drive

Drive enabled link + Drive enabled link with confirm Drive enabled external link
diff --git a/src/tests/functional/drive_tests.js b/src/tests/functional/drive_tests.js index 68980aa80..f97c206a9 100644 --- a/src/tests/functional/drive_tests.js +++ b/src/tests/functional/drive_tests.js @@ -1,6 +1,6 @@ import { test } from "@playwright/test" import { assert } from "chai" -import { nextBody, pathname, visitAction } from "../helpers/page" +import { nextBody, pathname, visitAction, search } from "../helpers/page" const path = "/src/tests/fixtures/drive.html" @@ -33,3 +33,25 @@ test("drive enabled by default; click link inside data-turbo='false'", async ({ assert.equal(pathname(page.url()), path) assert.equal(await visitAction(page), "load") }) + +test("link with confirmation without method confirmed", async ({ page }) => { + page.on("dialog", (alert) => { + assert.equal(alert.message(), "Are you sure?") + alert.accept() + }) + + await page.click("#drive_enabled_with_confirm") + await nextBody(page) + assert.equal(search(page.url()), "?confirmed=true") +}) + +test("link with confirmation without method cancelled", async ({ page }) => { + page.on("dialog", (alert) => { + assert.equal(alert.message(), "Are you sure?") + alert.dismiss() + }) + + await page.click("#drive_enabled_with_confirm") + await nextBody(page) + assert.notEqual(search(page.url()), "?confirmed=true") +})