82 lines
3.0 KiB
TypeScript
82 lines
3.0 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import { mount, flushPromises } from '@vue/test-utils';
|
|
import { createVuetify } from 'vuetify';
|
|
import axios from 'axios';
|
|
import AdminSupplierProjectsView from '../../resources/js/views/admin/AdminSupplierProjectsView.vue';
|
|
|
|
vi.mock('axios');
|
|
|
|
const vuetify = createVuetify();
|
|
|
|
// VDialog телепортит контент в body → стаб рендерит слот инлайн (квирк: VDialog
|
|
// teleport стаб для поиска confirm-кнопки внутри диалога).
|
|
const mountView = () =>
|
|
mount(AdminSupplierProjectsView, {
|
|
global: {
|
|
plugins: [vuetify],
|
|
stubs: { VDialog: { template: '<div><slot /></div>' } },
|
|
},
|
|
});
|
|
|
|
describe('AdminSupplierProjectsView (Plan 4 Task 3)', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
(axios.get as ReturnType<typeof vi.fn>).mockResolvedValue({
|
|
data: {
|
|
projects: [
|
|
{
|
|
id: 1,
|
|
platform: 'B1',
|
|
signal_type: 'site',
|
|
unique_key: 'okna.ru',
|
|
subject_code: 82,
|
|
subject_name: 'Москва',
|
|
current_limit: 5,
|
|
supplier_external_id: '777',
|
|
orderers: ['ООО Ромашка'],
|
|
last_delivery_at: '2026-05-19T10:00:00Z',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
(axios.post as ReturnType<typeof vi.fn>).mockResolvedValue({
|
|
data: { deleted: 1, failures: [] },
|
|
});
|
|
});
|
|
|
|
it('GETs list on mount and renders rows (source, region, orderers)', async () => {
|
|
const wrapper = mountView();
|
|
await flushPromises();
|
|
|
|
expect(axios.get).toHaveBeenCalledWith('/api/admin/supplier-integration/projects');
|
|
const text = wrapper.text();
|
|
expect(text).toContain('okna.ru');
|
|
expect(text).toContain('Москва');
|
|
expect(text).toContain('ООО Ромашка');
|
|
});
|
|
|
|
it('bulk-deletes selected rows after confirm', async () => {
|
|
const wrapper = mountView();
|
|
await flushPromises();
|
|
|
|
await wrapper.find('[data-testid="row-checkbox-1"] input').setValue(true);
|
|
await wrapper.find('[data-testid="bulk-delete-btn"]').trigger('click');
|
|
await flushPromises();
|
|
await wrapper.find('[data-testid="confirm-delete-btn"]').trigger('click');
|
|
await flushPromises();
|
|
|
|
expect(axios.post).toHaveBeenCalledWith(
|
|
'/api/admin/supplier-integration/projects/delete',
|
|
{ ids: [1] },
|
|
);
|
|
});
|
|
|
|
it('bulk-delete button is disabled when nothing selected', async () => {
|
|
const wrapper = mountView();
|
|
await flushPromises();
|
|
|
|
const btn = wrapper.find('[data-testid="bulk-delete-btn"]');
|
|
expect(btn.attributes('disabled')).toBeDefined();
|
|
});
|
|
});
|