Skip to content

Commit dbd1e9b

Browse files
seanpdoyledhh
andauthored
Read [data-turbo-action] during Form Submissions (#409)
* Re-structure existing Navigation tests In preparation for `<form method="post">`-driven navigations, this commit removes unnecessary `[method]` attributes, and renames `[id]` attributes to communicate the verb to the test cases. * Read `[data-turbo-action]` during Form Submissions Closes hotwired/turbo-ios#44 Follow-up to #231 --- This commit follows-up [#231][], which added `[data-turbo-action]` support for idempotent form submissions to maintain parity with `<a>`-initiated Visits. These changes re-use the existent `Navigator.getActionForFormSubmission` function to determine the value for the `VisitOptions.action` options. [#231]: #231 Co-authored-by: David Heinemeier Hansson <[email protected]>
1 parent adc55c6 commit dbd1e9b

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

src/tests/fixtures/navigation.html

+10-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,16 @@ <h1>Navigation</h1>
3535
<p><a id="same-origin-unannotated-link" href="/src/tests/fixtures/one.html">Same-origin unannotated link</a></p>
3636
<p><form id="same-origin-unannotated-form" method="get" action="/src/tests/fixtures/one.html"><button>Same-origin unannotated form</button></form></p>
3737
<p><a id="same-origin-replace-link" href="/src/tests/fixtures/one.html" data-turbo-action="replace">Same-origin data-turbo-action=replace link</a></p>
38-
<p><form id="same-origin-replace-form" method="get" action="/src/tests/fixtures/one.html" data-turbo-action="replace"><button>Same-origin data-turbo-action=replace form</button></form></p>
39-
<p><form id="same-origin-replace-form-submitter" method="get" action="/src/tests/fixtures/one.html"><button data-turbo-action="replace">Same-origin data-turbo-action=replace form</button></form></p>
38+
<p><form id="same-origin-replace-form-get" action="/src/tests/fixtures/one.html" data-turbo-action="replace"><button>Same-origin data-turbo-action=replace form</button></form></p>
39+
<p><form id="same-origin-replace-form-submitter-get" action="/src/tests/fixtures/one.html"><button data-turbo-action="replace">Same-origin data-turbo-action=replace form</button></form></p>
40+
<form id="same-origin-replace-form-post" method="post" action="/__turbo/redirect" data-turbo-action="replace">
41+
<input type="hidden" name="path" value="/src/tests/fixtures/one.html">
42+
<button>Same-origin form[method="post"][data-turbo-action="replace"]</button>
43+
</form>
44+
<form id="same-origin-replace-form-submitter-post" method="post" action="/__turbo/redirect">
45+
<input type="hidden" name="path" value="/src/tests/fixtures/one.html">
46+
<button data-turbo-action="replace">Same-origin form[method="post"] button[data-turbo-action="replace"]</button>
47+
</form>
4048
<p><a id="same-origin-false-link" href="/src/tests/fixtures/one.html" data-turbo="false">Same-origin data-turbo=false link</a></p>
4149
<p data-turbo="false"><a id="same-origin-unannotated-link-inside-false-container" href="/src/tests/fixtures/one.html">Same-origin unannotated link inside data-turbo=false container</a></p>
4250
<p data-turbo="false"><a id="same-origin-true-link-inside-false-container" href="/src/tests/fixtures/one.html" data-turbo="true">Same-origin data-turbo=true link inside data-turbo=false container</a></p>

src/tests/functional/navigation_tests.ts

+20-4
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,36 @@ export class NavigationTests extends TurboDriveTestCase {
6363
this.assert.equal(await this.visitAction, "replace")
6464
}
6565

66-
async "test following a same-origin data-turbo-action=replace form[method=GET]"() {
67-
this.clickSelector("#same-origin-replace-form button")
66+
async "test following a same-origin GET form[data-turbo-action=replace]"() {
67+
this.clickSelector("#same-origin-replace-form-get button")
6868
await this.nextBody
6969
this.assert.equal(await this.pathname, "/src/tests/fixtures/one.html")
7070
this.assert.equal(await this.visitAction, "replace")
7171
}
7272

73-
async "test following a same-origin form with button[data-turbo-action=replace]"() {
74-
this.clickSelector("#same-origin-replace-form-submitter button")
73+
async "test following a same-origin GET form button[data-turbo-action=replace]"() {
74+
this.clickSelector("#same-origin-replace-form-submitter-get button")
7575
await this.nextBody
7676
this.assert.equal(await this.pathname, "/src/tests/fixtures/one.html")
7777
this.assert.equal(await this.visitAction, "replace")
7878
}
7979

80+
async "test following a same-origin POST form[data-turbo-action=replace]"() {
81+
this.clickSelector("#same-origin-replace-form-post button")
82+
await this.nextBody
83+
84+
this.assert.equal(await this.pathname, "/src/tests/fixtures/one.html")
85+
this.assert.equal(await this.visitAction, "replace")
86+
}
87+
88+
async "test following a same-origin POST form button[data-turbo-action=replace]"() {
89+
this.clickSelector("#same-origin-replace-form-submitter-post button")
90+
await this.nextBody
91+
92+
this.assert.equal(await this.pathname, "/src/tests/fixtures/one.html")
93+
this.assert.equal(await this.visitAction, "replace")
94+
}
95+
8096
async "test following a same-origin data-turbo=false link"() {
8197
this.clickSelector("#same-origin-false-link")
8298
await this.nextBody

0 commit comments

Comments
 (0)