Skip to content

Commit b709682

Browse files
committed
test: cover remote form touched behaviour
1 parent 4cf3279 commit b709682

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<script>
2+
import { touched_form } from './touched.remote.js';
3+
import { tick } from 'svelte';
4+
5+
const markNameTouched = async () => {
6+
touched_form.fields.name.set('example');
7+
await tick();
8+
};
9+
</script>
10+
11+
<h1>Remote Form Touched Test</h1>
12+
13+
<p id="touched-name">Name touched: {touched_form.fields.name.touched() ? 'yes' : 'no'}</p>
14+
<p id="touched-age">Age touched: {touched_form.fields.age.touched() ? 'yes' : 'no'}</p>
15+
16+
<button id="set-btn" type="button" on:click={markNameTouched}> set name programmatically </button>
17+
18+
<form {...touched_form}>
19+
<label>
20+
Name
21+
<input id="name-input" {...touched_form.fields.name.as('text')} />
22+
</label>
23+
24+
<label>
25+
Age
26+
<input id="age-input" {...touched_form.fields.age.as('number')} />
27+
</label>
28+
29+
<button id="reset-btn" type="reset">Reset</button>
30+
</form>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { form } from '$app/server';
2+
import * as v from 'valibot';
3+
4+
export const touched_form = form(
5+
v.object({
6+
name: v.optional(v.string()),
7+
age: v.optional(v.number())
8+
}),
9+
(data) => ({ submitted: data })
10+
);

packages/kit/test/apps/basics/test/test.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2007,6 +2007,30 @@ test.describe('remote functions', () => {
20072007
expect(JSON.parse(arrayValue)).toEqual([{ leaf: 'array-0-leaf' }, { leaf: 'array-1-leaf' }]);
20082008
});
20092009

2010+
test('form fields touched tracks interactions', async ({ page, javaScriptEnabled }) => {
2011+
if (!javaScriptEnabled) return;
2012+
2013+
await page.goto('/remote/form/touched');
2014+
2015+
const nameTouched = page.locator('#touched-name');
2016+
const ageTouched = page.locator('#touched-age');
2017+
2018+
await expect(nameTouched).toHaveText('Name touched: no');
2019+
await expect(ageTouched).toHaveText('Age touched: no');
2020+
2021+
await page.click('#set-btn');
2022+
await expect(nameTouched).toHaveText('Name touched: yes');
2023+
2024+
await page.click('#reset-btn');
2025+
await expect(nameTouched).toHaveText('Name touched: no');
2026+
2027+
await page.fill('#age-input', '42');
2028+
await expect(ageTouched).toHaveText('Age touched: yes');
2029+
2030+
await page.click('#reset-btn');
2031+
await expect(ageTouched).toHaveText('Age touched: no');
2032+
});
2033+
20102034
test('selects are not nuked when unrelated controls change', async ({
20112035
page,
20122036
javaScriptEnabled

0 commit comments

Comments
 (0)