UNPKG

jenesius-vue-form

Version:

Heavy form system for Vue.js

118 lines (105 loc) 3.92 kB
import {defineComponent} from "vue"; import {FormField, Form, STORE} from "../../src/index"; import {mount, VueWrapper} from "@vue/test-utils"; import EmptyApp from "./components/EmptyApp.vue"; const defaultOptions = [ { label: "Red", value: 'r' }, { label: "Green", value: 'g' }, { label: "Yellow", value: 'y' } ] const name = 'color'; function defineCheckboxComponent(options: any = defaultOptions) { return defineComponent({ data: () => ({ options }), template: `<div><form-field type = "checkbox" name = "${name}" :options = "options" required /></div>`, components: {FormField} }) } function defaultMount(component = defineCheckboxComponent()) { return mount(EmptyApp, { slots: { default: component }, attachTo: document.body }) } describe("Input checkbox", () => { let app: VueWrapper<any> let form: Form beforeEach(() => { app = defaultMount(); form = (app.vm as any).form }) test("Должен отображать все Labels", () => { expect(app.text()).toBe(defaultOptions.map(item => item.label).join('')) }) test("Если есть активный элемент, должен отображать его", async () => { form.setValues({ [name]: ['y'] }) await app.vm.$nextTick() expect(app.find('.element-input-checkbox-button_active').exists()).toBe(true) }) test("Click should change value", async () => { await app.find('.element-input-checkbox-button').trigger('click'); expect(form.getValueByName(name)).toEqual(['r']) }) test("Если disabled ввод не должен работать", async () => { await app.find('.element-input-checkbox-button').trigger('click'); form.disable(); await app.vm.$nextTick() const items = app.findAll('.element-input-checkbox-button'); await items[0].trigger('click'); await items[1].trigger('click'); await items[2].trigger('click'); expect(app.find('.element-input-checkbox-button_disabled').exists()).toBe(true) expect(form.getValueByName(name)).toEqual(['r']) }) test("Если disabled то элемент должен быть заблокирован", async () => { form.disable(); await app.vm.$nextTick() expect(app.find('.element-input-checkbox-button_disabled').exists()).toBe(true) }) test("Значение должно быть установлено по Enter", async () => { await app.find('.element-input-checkbox:nth-child(2)').trigger('keyup.space') expect(form.getValueByName(name)).toEqual(['g']) }) test("Значение должно быть установлено по Space", async () => { await app.find('.element-input-checkbox:nth-child(2)').trigger('keyup.enter') await app.find('.element-input-checkbox:nth-child(3)').trigger('keyup.enter') expect(form.getValueByName(name)).toEqual(['g', 'y']) }) test("Error should change the view of checkbox", async () => { form.validate(); await app.vm.$nextTick(); expect(app.findAll('.element-input-checkbox-button_error').length).toBe(3); expect(app.text()).toBe( defaultOptions.map(el => el.label).join('') + STORE.requiredMessage ) }) test("Tabindex should be added for all items", () => { const items = app.findAll('.element-input-checkbox') expect(items[0].element.getAttribute('tabindex')).toBe('0') expect(items[1].element.getAttribute('tabindex')).toBe('0') expect(items[2].element.getAttribute('tabindex')).toBe('0') }) test("If checkbox is disabled status tabindex should be ignored", async () => { form.disable(); await app.vm.$nextTick() const items = app.findAll('.element-input-checkbox') expect(items[0].element.getAttribute('tabindex')).toBe('none') expect(items[1].element.getAttribute('tabindex')).toBe('none') expect(items[2].element.getAttribute('tabindex')).toBe('none') }) })