fix: sidebar + autocomplete (#88)
Release / release (push) Successful in 50s

| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [ ] Pas de régression
- [ ] TU/TI/TF rédigée
- [ ] TU/TI/TF OK
- [ ] CHANGELOG modifié

---------

Co-authored-by: admin malio <malio@yuno.malio.fr>
Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Reviewed-on: #88
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
This commit was merged in pull request #88.
This commit is contained in:
2026-06-25 08:44:17 +00:00
committed by Autin
parent 28705c8285
commit b5bebe3a3c
9 changed files with 241 additions and 11 deletions
@@ -1,6 +1,6 @@
import {describe, expect, it, vi} from 'vitest'
import {mount} from '@vue/test-utils'
import type {DefineComponent} from 'vue'
import {defineComponent, nextTick, ref, type DefineComponent} from 'vue'
import {Icon as IconifyIcon} from '@iconify/vue'
import InputAutocomplete from './InputAutocomplete.vue'
@@ -569,4 +569,40 @@ describe('MalioInputAutocomplete', () => {
expect(msg.exists()).toBe(true)
expect(msg.classes()).not.toContain('min-h-[1rem]')
})
// MUI-48 : après avoir sélectionné une option dans la liste, le champ garde le focus DOM
// mais isFocused interne passe à false (clic option en mousedown.prevent). Un collage qui
// remplace tout (Ctrl+A puis Ctrl+V) déclenche update:modelValue(null) ; le watch ne doit
// PAS vider la valeur collée. Régression : le champ se vidait au lieu de prendre le texte collé.
it('MUI-48 : un collage après sélection dans la liste remplace la valeur (ne la vide pas)', async () => {
const Harness = defineComponent({
components: {InputAutocomplete},
setup() {
const val = ref<string | number | null>(null)
const opts = ref([{label: '10 Rue de la Paix', value: '10 Rue de la Paix'}])
return {val, opts}
},
template: '<InputAutocomplete v-model="val" :options="opts" allow-create />',
})
const wrapper = mount(Harness, {
attachTo: document.body,
global: {stubs: {IconifyIcon: {template: '<span data-test="icon" v-bind="$attrs" />'}}},
})
const input = wrapper.get('input')
// saisie puis sélection d'une suggestion (commit, focus DOM conservé)
await input.trigger('focus')
await input.setValue('10')
await wrapper.findAll('[data-test="option"]')[0].trigger('click')
await nextTick()
expect(input.element.value).toBe('10 Rue de la Paix')
// Ctrl+A puis Ctrl+V : input toujours focalisé DOM, aucun nouvel évènement focus
await input.setValue('25 Avenue Victor Hugo')
await nextTick()
expect(input.element.value).toBe('25 Avenue Victor Hugo')
wrapper.unmount()
})
})