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()
|
||||
})
|
||||
})
|
||||
|
||||
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