diff --git a/app/components/malio/drawer/Drawer.test.ts b/app/components/malio/drawer/Drawer.test.ts index 5be7684..db9d6df 100644 --- a/app/components/malio/drawer/Drawer.test.ts +++ b/app/components/malio/drawer/Drawer.test.ts @@ -145,4 +145,32 @@ describe('MalioDrawer', () => { const wrapper = mountComponent({ modelValue: true, headerClass: 'bg-m-primary' }) expect(wrapper.find('[data-test="header"]').classes()).toContain('bg-m-primary') }) + + it('renders the #footer slot inside the body (scrollable zone)', () => { + const wrapper = mountComponent( + { modelValue: true }, + { footer: '' }, + ) + expect(wrapper.find('[data-test="body"] [data-test="footer"] [data-test="save"]').exists()).toBe(true) + }) + + it('does not render the footer wrapper when no #footer slot', () => { + const wrapper = mountComponent({ modelValue: true }) + expect(wrapper.find('[data-test="footer"]').exists()).toBe(false) + }) + + it('applies bodyClass to the body', () => { + const wrapper = mountComponent({ modelValue: true, bodyClass: 'px-10' }) + expect(wrapper.find('[data-test="body"]').classes()).toContain('px-10') + }) + + it('applies footerClass to the footer wrapper', () => { + const wrapper = mountComponent( + { modelValue: true, footerClass: 'sticky bottom-0' }, + { footer: 'pied' }, + ) + const footer = wrapper.find('[data-test="footer"]') + expect(footer.classes()).toContain('sticky') + expect(footer.classes()).toContain('bottom-0') + }) }) diff --git a/app/components/malio/drawer/Drawer.vue b/app/components/malio/drawer/Drawer.vue index 2a712af..fdddf87 100644 --- a/app/components/malio/drawer/Drawer.vue +++ b/app/components/malio/drawer/Drawer.vue @@ -62,6 +62,13 @@ data-test="body" > +
+ +