140 lines
5.4 KiB
JavaScript
140 lines
5.4 KiB
JavaScript
|
import { nextTick } from 'vue';
|
||
|
import { mount } from '@vue/test-utils';
|
||
|
import PrimeVue from 'primevue/config';
|
||
|
import CascadeSelect from './CascadeSelect.vue';
|
||
|
|
||
|
describe('CascadeSelect.vue', () => {
|
||
|
let wrapper;
|
||
|
|
||
|
beforeEach(() => {
|
||
|
wrapper = mount(CascadeSelect, {
|
||
|
global: {
|
||
|
plugins: [PrimeVue],
|
||
|
stubs: {
|
||
|
teleport: true
|
||
|
}
|
||
|
},
|
||
|
props: {
|
||
|
modelValue: null,
|
||
|
options: [
|
||
|
{
|
||
|
name: 'Australia',
|
||
|
code: 'AU',
|
||
|
states: [
|
||
|
{
|
||
|
name: 'New South Wales',
|
||
|
cities: [
|
||
|
{ cname: 'Sydney', code: 'A-SY' },
|
||
|
{ cname: 'Newcastle', code: 'A-NE' },
|
||
|
{ cname: 'Wollongong', code: 'A-WO' }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name: 'Queensland',
|
||
|
cities: [
|
||
|
{ cname: 'Brisbane', code: 'A-BR' },
|
||
|
{ cname: 'Townsville', code: 'A-TO' }
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name: 'Canada',
|
||
|
code: 'CA',
|
||
|
states: [
|
||
|
{
|
||
|
name: 'Quebec',
|
||
|
cities: [
|
||
|
{ cname: 'Montreal', code: 'C-MO' },
|
||
|
{ cname: 'Quebec City', code: 'C-QU' }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name: 'Ontario',
|
||
|
cities: [
|
||
|
{ cname: 'Ottawa', code: 'C-OT' },
|
||
|
{ cname: 'Toronto', code: 'C-TO' }
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name: 'United States',
|
||
|
code: 'US',
|
||
|
states: [
|
||
|
{
|
||
|
name: 'California',
|
||
|
cities: [
|
||
|
{ cname: 'Los Angeles', code: 'US-LA' },
|
||
|
{ cname: 'San Diego', code: 'US-SD' },
|
||
|
{ cname: 'San Francisco', code: 'US-SF' }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name: 'Florida',
|
||
|
cities: [
|
||
|
{ cname: 'Jacksonville', code: 'US-JA' },
|
||
|
{ cname: 'Miami', code: 'US-MI' },
|
||
|
{ cname: 'Tampa', code: 'US-TA' },
|
||
|
{ cname: 'Orlando', code: 'US-OR' }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name: 'Texas',
|
||
|
cities: [
|
||
|
{ cname: 'Austin', code: 'US-AU' },
|
||
|
{ cname: 'Dallas', code: 'US-DA' },
|
||
|
{ cname: 'Houston', code: 'US-HO' }
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
optionLabel: 'cname',
|
||
|
optionGroupLabel: 'name',
|
||
|
optionGroupChildren: ['states', 'cities']
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('should exist', () => {
|
||
|
expect(wrapper.find('.p-cascadeselect.p-component').exists()).toBe(true);
|
||
|
});
|
||
|
|
||
|
it('should show list and sublist', async () => {
|
||
|
expect(wrapper.find('.p-cascadeselect.p-component').exists()).toBe(true);
|
||
|
|
||
|
await wrapper.trigger('click');
|
||
|
|
||
|
expect(wrapper.find('.p-cascadeselect-panel.p-cascadeselect-items').exists()).toBe(true);
|
||
|
expect(wrapper.findAll('.p-cascadeselect-item').length).toBe(3);
|
||
|
expect(wrapper.findAll('.p-cascadeselect-item-text')[0].text()).toBe('Australia');
|
||
|
|
||
|
const firstGroup = wrapper.findAll('.p-cascadeselect-item-content')[0];
|
||
|
|
||
|
await firstGroup.trigger('click');
|
||
|
|
||
|
expect(wrapper.find('.p-cascadeselect-panel.p-cascadeselect-sublist').exists()).toBe(true);
|
||
|
|
||
|
const sublist = wrapper.find('.p-cascadeselect-panel.p-cascadeselect-sublist');
|
||
|
|
||
|
expect(sublist.findAll('.p-cascadeselect-item.p-cascadeselect-item-group').length).toBe(2);
|
||
|
expect(sublist.findAll('.p-cascadeselect-item-text')[0].text()).toBe('New South Wales');
|
||
|
});
|
||
|
|
||
|
it('should accept custom icons', async () => {
|
||
|
wrapper.setProps({
|
||
|
dropdownIcon: 'pi pi-discord',
|
||
|
optionGroupIcon: 'pi pi-bell'
|
||
|
});
|
||
|
|
||
|
await nextTick();
|
||
|
|
||
|
expect(wrapper.find('.p-cascadeselect-trigger-icon').classes()).toContain('pi-discord');
|
||
|
|
||
|
await wrapper.trigger('click');
|
||
|
|
||
|
expect(wrapper.find('.p-cascadeselect-group-icon').classes()).toContain('pi-bell');
|
||
|
});
|
||
|
});
|