diff --git a/packages/lib/test/index.test.ts b/packages/lib/test/index.test.ts deleted file mode 100644 index 840575df..00000000 --- a/packages/lib/test/index.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { useField } from '@vuetils/form'; -import { assert, it } from 'vitest'; - -it('should pass', async () => { - const field = useField('test'); - - assert.equal(field.value, 'test'); - - field.value = 'test2'; - - assert.equal(field.value, 'test2'); -}); diff --git a/packages/lib/test/useField.test.ts b/packages/lib/test/useField.test.ts new file mode 100644 index 00000000..c1541545 --- /dev/null +++ b/packages/lib/test/useField.test.ts @@ -0,0 +1,80 @@ +import { assert, describe, it } from 'vitest'; +import { useField } from '../dist'; +import { dummyAsyncValidatorValid, dummyValidatorValid } from './utils'; + +describe('useField', () => { + describe('Correct initialization', () => { + it('Default options', () => { + const field = useField('test'); + + assert.equal(field.value, 'test'); + assert.equal(field.validators.size, 0); + assert.equal(field.asyncValidators.size, 0); + assert.equal(field.errors.length, 0); + assert.equal(field.async, false); + assert.equal(field.pending, false); + + assert.equal(field.invalid, false); + assert.equal(field.valid, true); + + assert.equal(field.disabled, false); + assert.equal(field.enabled, true); + + assert.equal(field.dirty, false); + assert.equal(field.pristine, true); + + assert.equal(field.touched, false); + assert.equal(field.untouched, true); + }); + + it('Async', async () => { + const field = useField('test', { + asyncValidators: [dummyAsyncValidatorValid], + }); + + assert.equal(field.value, 'test'); + assert.equal(field.validators.size, 0); + assert.equal(field.asyncValidators.size, 1); + assert.equal(field.errors.length, 0); + assert.equal(field.async, true); + assert.equal(field.pending, true); + + assert.equal(field.invalid, false); + assert.equal(field.valid, true); + + assert.equal(field.disabled, false); + assert.equal(field.enabled, true); + + assert.equal(field.dirty, false); + assert.equal(field.pristine, true); + + assert.equal(field.touched, false); + assert.equal(field.untouched, true); + }); + + it('Sync', async () => { + const field = useField('test', { + validators: [dummyValidatorValid], + }); + + assert.equal(field.value, 'test'); + assert.equal(field.validators.size, 1); + assert.equal(field.asyncValidators.size, 0); + assert.equal(field.errors.length, 0); + assert.equal(field.async, false); + assert.equal(field.pending, false); + + assert.equal(field.invalid, false); + assert.equal(field.valid, true); + + assert.equal(field.disabled, false); + assert.equal(field.enabled, true); + + assert.equal(field.dirty, false); + assert.equal(field.pristine, true); + + assert.equal(field.touched, false); + assert.equal(field.untouched, true); + }); + }); +}); diff --git a/packages/lib/test/useForm.test.ts b/packages/lib/test/useForm.test.ts new file mode 100644 index 00000000..60a24863 --- /dev/null +++ b/packages/lib/test/useForm.test.ts @@ -0,0 +1,50 @@ +import { useField, useForm } from '@vuetils/form'; +import { assert, it } from 'vitest'; + +it('should pass', () => { + const field = useField('test'); + + assert.equal(field.value, 'test'); + + field.value = 'test2'; + + assert.equal(field.value, 'test2'); +}); + +it('nested form', () => { + const form = useForm({ + layer1: ['layer1'], + hallo: { + layer2: ['layer2'], + zwallo: { + layer3: ['layer3'], + }, + }, + }); + + assert.equal(form.values.layer1, 'layer1'); + assert.equal(form.values.hallo.layer2, 'layer2'); + assert.equal(form.values.hallo.zwallo.layer3, 'layer3'); + + form.fields.hallo.fields.zwallo.fields.layer3.value = 'dirty'; + + assert.equal(form.pristine, false); + assert.equal(form.fields.hallo.pristine, false); + assert.equal(form.fields.hallo.fields.zwallo.pristine, false); + + form.reset(); + + form.fields.hallo.fields.layer2.value = 'dirty'; + + assert.equal(form.pristine, false); + assert.equal(form.fields.hallo.pristine, false); + assert.equal(form.fields.hallo.fields.zwallo.pristine, true); + + form.reset(); + + form.fields.layer1.value = 'dirty'; + + assert.equal(form.pristine, false); + assert.equal(form.fields.hallo.pristine, true); + assert.equal(form.fields.hallo.fields.zwallo.pristine, true); +}); diff --git a/packages/lib/test/utils.ts b/packages/lib/test/utils.ts new file mode 100644 index 00000000..036ba38c --- /dev/null +++ b/packages/lib/test/utils.ts @@ -0,0 +1,11 @@ +import { defineValidator } from '../dist'; + +export async function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +export const dummyValidatorValid = defineValidator('dummyValid', () => true); +export const dummyValidatorInvalid = defineValidator('dummyInvalid', () => false); + +export const dummyAsyncValidatorValid = defineValidator('dummyAsyncValid', async () => true); +export const dummyAsyncValidatorInvalid = defineValidator('dummyAsyncInvalid', async () => true);