From 8f0c7d504b1d219789794c8502f7b0ed24c3d6aa Mon Sep 17 00:00:00 2001 From: kolaente Date: Sat, 10 Jan 2026 21:25:01 +0100 Subject: [PATCH] test(frontend): add regression test for FormField $attrs event forwarding Verify that FormField forwards $attrs event listeners (onKeyup, onFocusout) to its inner input element. This ensures migrated templates using @keyup.enter and @focusout continue to work correctly. --- .../src/components/input/FormField.test.ts | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/input/FormField.test.ts b/frontend/src/components/input/FormField.test.ts index 6d1fa8058..65e2b209f 100644 --- a/frontend/src/components/input/FormField.test.ts +++ b/frontend/src/components/input/FormField.test.ts @@ -1,4 +1,4 @@ -import {describe, it, expect} from 'vitest' +import {describe, it, expect, vi} from 'vitest' import {mount} from '@vue/test-utils' import FormField from './FormField.vue' @@ -102,6 +102,29 @@ describe('FormField', () => { expect(input.attributes('autocomplete')).toBe('email') }) + it('forwards $attrs event listeners to inner input', async () => { + const onKeyup = vi.fn() + const onFocusout = vi.fn() + + const wrapper = mount(FormField, { + props: { + modelValue: 'test', + }, + attrs: { + onKeyup, + onFocusout, + }, + }) + + const input = wrapper.find('input') + + await input.trigger('keyup', {key: 'Enter'}) + expect(onKeyup).toHaveBeenCalledTimes(1) + + await input.trigger('focusout') + expect(onFocusout).toHaveBeenCalledTimes(1) + }) + it('uses provided id for input', () => { const wrapper = mount(FormField, { props: {id: 'my-input', label: 'My Input'},