UNPKG

vuetify

Version:

Vue Material Component Framework

207 lines (166 loc) 4.95 kB
// Components import VAutocomplete from '../VAutocomplete' // Utilities import { mount, Wrapper, MountOptions, } from '@vue/test-utils' describe('VAutocomplete.ts', () => { type Instance = InstanceType<typeof VAutocomplete> let mountFunction: (options?: MountOptions<Instance>) => Wrapper<Instance> beforeEach(() => { document.body.setAttribute('data-app', 'true') mountFunction = (options = {}) => { return mount(VAutocomplete, { ...options, mocks: { $vuetify: { lang: { t: (val: string) => val, }, theme: { dark: false, }, }, }, }) } }) it('should have the correct role', async () => { const wrapper = mountFunction() const inputSlot = wrapper.find('.v-input__slot') expect(inputSlot.element.getAttribute('role')).toBe('combobox') }) // https://github.com/vuetifyjs/vuetify/issues/7259 it('should update search when same item is selected', async () => { const wrapper = mountFunction({ propsData: { items: ['foo'], value: 'foo', }, }) await wrapper.vm.$nextTick() const input = wrapper.find('input') const element = input.element as HTMLInputElement expect(element.value).toBe('foo') input.trigger('focus') input.trigger('click') element.value = 'fo' input.trigger('input') const item = wrapper.find('.v-list-item') item.trigger('click') await wrapper.vm.$nextTick() expect(element.value).toBe('foo') }) it('should copy selected item if multiple', async () => { const wrapper = mountFunction({ propsData: { items: ['aaa', 'bbb', 'ccc'], value: ['aaa', 'bbb'], chips: true, multiple: true, }, }) const input = wrapper.find('input') const chip = wrapper.findAll('.v-chip').at(1) const setData = jest.fn() const event = { clipboardData: { setData, }, preventDefault: jest.fn(), } input.trigger('focus') chip.trigger('click') wrapper.vm.onCopy(event) expect(setData).toHaveBeenCalledWith('text/plain', 'bbb') expect(setData).toHaveBeenCalledWith('text/vnd.vuetify.autocomplete.item+plain', 'bbb') expect(event.preventDefault).toHaveBeenCalled() }) it('should not copy anything if there is no selected item', async () => { const wrapper = mountFunction({ propsData: { items: ['aaa', 'bbb', 'ccc'], value: ['aaa', 'bbb'], chips: true, multiple: true, }, }) const input = wrapper.find('input') const setData = jest.fn() const event = { clipboardData: { setData, }, preventDefault: jest.fn(), } input.trigger('focus') wrapper.vm.onCopy(event) expect(setData).not.toHaveBeenCalled() }) // https://github.com/vuetifyjs/vuetify/issues/9654 // https://github.com/vuetifyjs/vuetify/issues/11639 it('should delete value when pressing backspace', () => { const wrapper = mountFunction({ propsData: { chips: true, items: ['foo', 'bar', 'fizz', 'buzz'], value: 'foo', }, }) const input = wrapper.find('input') input.trigger('focus') input.trigger('keydown.backspace') input.trigger('keydown.backspace') expect(wrapper.vm.internalValue).toBeUndefined() wrapper.setProps({ multiple: true, value: ['foo', 'bar'], }) input.trigger('keydown.backspace') input.trigger('keydown.backspace') expect(wrapper.vm.internalValue).toEqual(['foo']) }) it('should not change selectedIndex to 0 when backspace is pressed', () => { const wrapper = mountFunction({ propsData: { items: ['f', 'b'], value: 'f', }, }) const input = wrapper.find('input') input.trigger('focus') input.trigger('keydown.backspace') expect(wrapper.vm.selectedIndex).toBe(-1) }) it('should close menu when append icon is clicked', async () => { const wrapper = mountFunction({ propsData: { items: ['foo', 'bar'], }, }) const append = wrapper.find('.v-input__append-inner') const slot = wrapper.find('.v-input__slot') slot.trigger('click') expect(wrapper.vm.isMenuActive).toBe(true) append.trigger('mousedown') append.trigger('mouseup') append.trigger('click') await wrapper.vm.$nextTick() expect(wrapper.vm.isMenuActive).toBe(false) }) it('should open menu when append icon is clicked', async () => { const wrapper = mountFunction({ propsData: { items: ['foo', 'bar'], }, }) const append = wrapper.find('.v-input__append-inner') append.trigger('mousedown') append.trigger('mouseup') append.trigger('click') await wrapper.vm.$nextTick() expect(wrapper.vm.isMenuActive).toBe(true) }) })