import { mount } from '@vue/test-utils' import { describe, it, expect } from 'vitest' import EditableGroup from './EditableGroup.vue' import { BButton, BFormGroup } from 'bootstrap-vue-next' const viewValue = 'test label value' const editValue = 'test edit value' describe('EditableGroup', () => { const createWrapper = (props = {}) => { return mount(EditableGroup, { props, global: { mocks: { $t: (key) => key, }, stubs: { BFormGroup, BButton, IBiPencilFill: true, }, }, slots: { view: `
${viewValue}
`, edit: `
${editValue}
`, }, }) } it('renders the view slot when not editing', () => { const wrapper = createWrapper({ allowEdit: true }) expect(wrapper.text()).toContain(viewValue) }) it('renders the edit slot when editing', async () => { const wrapper = createWrapper({ allowEdit: true }) await wrapper.find('button').trigger('click') expect(wrapper.find('.test-edit').text()).toBe(editValue) }) it('emits save event when clicking save button', async () => { const wrapper = createWrapper({ allowEdit: true }) await wrapper.find('button').trigger('click') await wrapper.vm.valueChanged() await wrapper.find('.save-button').trigger('click') expect(wrapper.emitted('save')).toBeTruthy() }) it('disables save button when value is not changed', async () => { const wrapper = createWrapper({ allowEdit: true }) await wrapper.find('button').trigger('click') expect(wrapper.find('.save-button').attributes('disabled')).toBeDefined() }) it('enables save button when value is changed', async () => { const wrapper = createWrapper({ allowEdit: true }) await wrapper.find('button').trigger('click') await wrapper.vm.valueChanged() expect(wrapper.find('.save-button').attributes('disabled')).toBeFalsy() }) it('updates variant to success when editing', async () => { const wrapper = createWrapper({ allowEdit: true }) await wrapper.find('button').trigger('click') expect(wrapper.vm.variant).toBe('success') }) it('updates variant to prime when not editing', () => { const wrapper = createWrapper({ allowEdit: true }) expect(wrapper.vm.variant).toBe('prime') }) it('emits reset event when clicking close button', async () => { const wrapper = createWrapper({ allowEdit: true }) await wrapper.find('button').trigger('click') await wrapper.find('.close-button').trigger('click') expect(wrapper.emitted('reset')).toBeTruthy() }) })