import { it, describe, expect } from 'vitest' import { selectWithProps } from '@tests/helpers.js' import { shallowMount } from '@vue/test-utils' import vSelect from '@/components/Select.vue' describe('Asynchronous Loading', () => { it('can toggle the loading class', () => { const Select = selectWithProps() Select.vm.toggleLoading() expect(Select.vm.mutableLoading).toEqual(true) Select.vm.toggleLoading(true) expect(Select.vm.mutableLoading).toEqual(true) }) it('should trigger the search event when the search text changes', async () => { const Select = selectWithProps() Select.vm.search = 'foo' await Select.vm.$nextTick() const events = Select.emitted('search') expect(events).toContainEqual(['foo', Select.vm.toggleLoading]) expect(events.length).toEqual(1) }) it('should trigger the search event if the search text is empty', async () => { const Select = selectWithProps() Select.vm.search = 'foo' await Select.vm.$nextTick() Select.vm.search = '' await Select.vm.$nextTick() const events = Select.emitted('search') expect(events).toContainEqual(['', Select.vm.toggleLoading]) expect(events.length).toEqual(2) }) it('can set loading to false from the @search event callback', async () => { const Select = shallowMount(vSelect, { props: { onSearch: (search, loading) => { loading(false) }, }, }) Select.vm.mutableLoading = true Select.vm.search = 'foo' await Select.vm.$nextTick() expect(Select.vm.mutableLoading).toEqual(false) }) it('will sync mutable loading with the loading prop', async () => { const Select = selectWithProps({ loading: false }) Select.setProps({ loading: true }) await Select.vm.$nextTick() expect(Select.vm.mutableLoading).toEqual(true) }) })