198 lines
4.6 KiB
JavaScript
198 lines
4.6 KiB
JavaScript
import test from 'ava'
|
|
import {formulateState, formulateGetters, formulateMutations} from '../dist'
|
|
|
|
test('initial store state', async t => {
|
|
t.deepEqual({
|
|
values: {},
|
|
errors: {},
|
|
validationErrors: {},
|
|
meta: {}
|
|
}, formulateState()())
|
|
})
|
|
|
|
test('extended initial store state', async t => {
|
|
t.deepEqual({
|
|
values: {},
|
|
errors: {},
|
|
validationErrors: {},
|
|
meta: {},
|
|
additionalParam: 'test'
|
|
}, formulateState({
|
|
additionalParam: 'test'
|
|
})())
|
|
})
|
|
|
|
test('validationErrors getter', async t => {
|
|
let state = {
|
|
validationErrors: {
|
|
form: {
|
|
field: ['This is an error']
|
|
}
|
|
}
|
|
}
|
|
t.is(formulateGetters().formValidationErrors(state), state.validationErrors)
|
|
})
|
|
|
|
test('errors getter', async t => {
|
|
let state = {
|
|
errors: {
|
|
form: {
|
|
field: ['This is an error', 'second error']
|
|
}
|
|
}
|
|
}
|
|
t.is(formulateGetters().formErrors(state), state.errors)
|
|
})
|
|
|
|
test('values getter', async t => {
|
|
let state = {
|
|
values: {
|
|
form: {
|
|
name: 'Johan',
|
|
field: 'Guttenberg'
|
|
}
|
|
}
|
|
}
|
|
t.is(formulateGetters().formValues(state), state.values)
|
|
})
|
|
|
|
test('formMeta getter', async t => {
|
|
let state = {
|
|
meta: {
|
|
form: {
|
|
name: {name: 'name', label: 'Name'},
|
|
flail: {name: 'email', label: 'Email'}
|
|
}
|
|
}
|
|
}
|
|
t.deepEqual(formulateGetters().formMeta(state), {
|
|
form: [
|
|
{name: 'name', label: 'Name'},
|
|
{name: 'email', label: 'Email'}
|
|
]
|
|
})
|
|
})
|
|
|
|
test('form has errors', async t => {
|
|
let state = {
|
|
errors: {
|
|
form: {
|
|
field: ['This is an error', 'second error']
|
|
}
|
|
}
|
|
}
|
|
t.is(true, formulateGetters().hasErrors(state).form)
|
|
})
|
|
|
|
test('form has empty errors', async t => {
|
|
let state = {
|
|
errors: {
|
|
form: {
|
|
field: [],
|
|
other: []
|
|
}
|
|
}
|
|
}
|
|
t.is(false, formulateGetters().hasErrors(state).form)
|
|
})
|
|
|
|
test('form has no errors', async t => {
|
|
let state = {
|
|
errors: {
|
|
form: {}
|
|
}
|
|
}
|
|
t.is(false, formulateGetters().hasErrors(state).form)
|
|
})
|
|
|
|
test('adds a new field value', async t => {
|
|
let state = {values: {}}
|
|
formulateMutations().setFieldValue(state, {
|
|
form: 'form',
|
|
field: 'name',
|
|
value: 'test name'
|
|
})
|
|
t.deepEqual(state.values, {form: {name: 'test name'}})
|
|
})
|
|
|
|
test('adds an existing field value', async t => {
|
|
let state = {values: {form: {name: 'old name'}}}
|
|
formulateMutations().setFieldValue(state, {
|
|
form: 'form',
|
|
field: 'name',
|
|
value: 'new name'
|
|
})
|
|
t.deepEqual(state.values, {form: {name: 'new name'}})
|
|
})
|
|
|
|
test('adds an error to new field', async t => {
|
|
let state = {errors: {}}
|
|
formulateMutations().setFieldErrors(state, {
|
|
form: 'form',
|
|
field: 'name',
|
|
errors: ['i dislike this field']
|
|
})
|
|
t.deepEqual(state.errors, {form: {name: ['i dislike this field']}})
|
|
})
|
|
|
|
test('adds an error to existing field', async t => {
|
|
let state = {errors: {form: {name: ['i like this field']}}}
|
|
formulateMutations().setFieldErrors(state, {
|
|
form: 'form',
|
|
field: 'name',
|
|
errors: ['i dislike this field']
|
|
})
|
|
t.deepEqual(state.errors, {form: {name: ['i dislike this field']}})
|
|
})
|
|
|
|
test('adds a validationError to new field', async t => {
|
|
let state = {validationErrors: {}}
|
|
formulateMutations().setFieldValidationErrors(state, {
|
|
form: 'form',
|
|
field: 'name',
|
|
errors: ['i dislike this field']
|
|
})
|
|
t.deepEqual(state.validationErrors, {form: {name: ['i dislike this field']}})
|
|
})
|
|
|
|
test('adds a validationError to existing field', async t => {
|
|
let state = {validationErrors: {form: {name: ['i like this field']}}}
|
|
formulateMutations().setFieldValidationErrors(state, {
|
|
form: 'form',
|
|
field: 'name',
|
|
errors: ['i dislike this field']
|
|
})
|
|
t.deepEqual(state.validationErrors, {form: {name: ['i dislike this field']}})
|
|
})
|
|
|
|
test('reset a form', async t => {
|
|
let state = {values: {login: {username: 'testuser', password: 'secret'}}}
|
|
formulateMutations().resetForm(state, 'login')
|
|
t.deepEqual(state.values, {login: {username: undefined, password: undefined}})
|
|
})
|
|
|
|
test('wont mutate undefined form on reset', async t => {
|
|
let state = {values: {login: {username: 'testuser', password: 'secret'}}}
|
|
formulateMutations().resetForm(state, 'register')
|
|
t.deepEqual(state.values, {login: {username: 'testuser', password: 'secret'}})
|
|
})
|
|
|
|
test('removeField deletes values from store', async t => {
|
|
let state = {
|
|
values: {
|
|
register: {
|
|
username: 'testuser',
|
|
password: 'secret'
|
|
}
|
|
}
|
|
}
|
|
formulateMutations().removeField(state, {form: 'register', field: 'password'})
|
|
t.deepEqual({
|
|
values: {
|
|
register: {
|
|
username: 'testuser'
|
|
}
|
|
}
|
|
}, state)
|
|
})
|