Files
portal/app/tests/Frontend/RegionsBulkDialog.spec.ts
T
Дмитрий cfe94d9178 fix(projects): closable-chips на селекторах регионов — удаление по одному
Раньше чтобы убрать один регион из выбора, приходилось сбрасывать все
и выбирать заново. Добавлен closable-chips на v-autocomplete регионов в
трёх местах: карточка создания проекта (NewProjectDialog), панель
редактирования (ProjectDetailsDrawer) и массовое изменение регионов
(RegionsBulkDialog). Теперь у каждого чипа есть крестик.

Покрыто Vitest: closableChips=true на каждом селекторе.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 10:21:10 +03:00

67 lines
2.6 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import { mount } from '@vue/test-utils';
import { createVuetify } from 'vuetify';
import { createPinia, setActivePinia } from 'pinia';
import RegionsBulkDialog from '../../resources/js/components/projects/RegionsBulkDialog.vue';
const vuetify = createVuetify();
const mountDialog = (count = 5) =>
mount(RegionsBulkDialog, {
props: { modelValue: true, count },
global: {
plugins: [vuetify, createPinia()],
stubs: { VDialog: { template: '<div><slot /></div>' } },
},
});
interface DialogVm {
addRegions: number[];
removeRegions: number[];
}
describe('RegionsBulkDialog', () => {
beforeEach(() => setActivePinia(createPinia()));
it('renders subject-level Add and Remove selectors (not federal districts)', () => {
const wrapper = mountDialog();
expect(wrapper.find('[data-testid="region-add-select"]').exists()).toBe(true);
expect(wrapper.find('[data-testid="region-remove-select"]').exists()).toBe(true);
});
it('shows count from prop', () => {
const wrapper = mountDialog(7);
expect(wrapper.text()).toContain('7');
});
it('emits apply with selected subject codes', async () => {
const wrapper = mountDialog();
(wrapper.vm as unknown as DialogVm).addRegions = [82, 83];
(wrapper.vm as unknown as DialogVm).removeRegions = [56];
await wrapper.vm.$nextTick();
await wrapper.find('[data-testid="apply"]').trigger('click');
expect(wrapper.emitted('apply')?.[0]).toEqual([{ add_regions: [82, 83], remove_regions: [56] }]);
});
it('apply button disabled when nothing selected', () => {
const wrapper = mountDialog();
expect(wrapper.find('[data-testid="apply"]').attributes('disabled')).toBeDefined();
});
it('apply button enabled once a subject is picked', async () => {
const wrapper = mountDialog();
(wrapper.vm as unknown as DialogVm).addRegions = [82];
await wrapper.vm.$nextTick();
expect(wrapper.find('[data-testid="apply"]').attributes('disabled')).toBeUndefined();
});
it('both region selectors have closable-chips so a single subject can be removed', () => {
const wrapper = mountDialog();
const addAc = wrapper.findComponent('[data-testid="region-add-select"]');
const removeAc = wrapper.findComponent('[data-testid="region-remove-select"]');
expect(addAc.props('closableChips')).toBe(true);
expect(removeAc.props('closableChips')).toBe(true);
});
});