test(accordion): mode single et v-model contrôlé [#MUI-37]
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -86,3 +86,51 @@ describe('MalioAccordion — rendu & mode multiple', () => {
|
|||||||
await nextTick()
|
await nextTick()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('MalioAccordion — mode single & contrôlé', () => {
|
||||||
|
it('opening a panel closes the others in single mode', async () => {
|
||||||
|
const wrapper = mountAccordion({mode: 'single'})
|
||||||
|
const headers = wrapper.findAll('button[aria-expanded]')
|
||||||
|
await headers[0].trigger('click')
|
||||||
|
await headers[1].trigger('click')
|
||||||
|
expect(headers[0].attributes('aria-expanded')).toBe('false')
|
||||||
|
expect(headers[1].attributes('aria-expanded')).toBe('true')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('emits a string in single mode', async () => {
|
||||||
|
const wrapper = mountAccordion({mode: 'single'})
|
||||||
|
const headers = wrapper.findAll('button[aria-expanded]')
|
||||||
|
await headers[1].trigger('click')
|
||||||
|
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual(['cat'])
|
||||||
|
})
|
||||||
|
|
||||||
|
it('emits empty string when closing the open panel in single mode', async () => {
|
||||||
|
const wrapper = mountAccordion({mode: 'single', modelValue: 'prix'})
|
||||||
|
const headers = wrapper.findAll('button[aria-expanded]')
|
||||||
|
await headers[0].trigger('click')
|
||||||
|
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([''])
|
||||||
|
})
|
||||||
|
|
||||||
|
it('respects modelValue array in controlled multiple mode', () => {
|
||||||
|
const wrapper = mountAccordion({modelValue: ['cat']})
|
||||||
|
const headers = wrapper.findAll('button[aria-expanded]')
|
||||||
|
expect(headers[0].attributes('aria-expanded')).toBe('false')
|
||||||
|
expect(headers[1].attributes('aria-expanded')).toBe('true')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('respects modelValue string in controlled single mode', () => {
|
||||||
|
const wrapper = mountAccordion({mode: 'single', modelValue: 'prix'})
|
||||||
|
const headers = wrapper.findAll('button[aria-expanded]')
|
||||||
|
expect(headers[0].attributes('aria-expanded')).toBe('true')
|
||||||
|
expect(headers[1].attributes('aria-expanded')).toBe('false')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('does not mutate local state in controlled mode (emits only)', async () => {
|
||||||
|
const wrapper = mountAccordion({modelValue: []})
|
||||||
|
const headers = wrapper.findAll('button[aria-expanded]')
|
||||||
|
await headers[0].trigger('click')
|
||||||
|
// état piloté par le parent : sans mise à jour de la prop, reste fermé
|
||||||
|
expect(headers[0].attributes('aria-expanded')).toBe('false')
|
||||||
|
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([['prix']])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user