39 lines
1.9 KiB
TypeScript
39 lines
1.9 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { ref } from 'vue';
|
|
import { useWarmingFirms } from '../../resources/js/composables/useWarmingFirms';
|
|
import type { SalesAdAudienceFirmRow } from '../../resources/js/api/sales';
|
|
|
|
function firm(over: Partial<SalesAdAudienceFirmRow>): SalesAdAudienceFirmRow {
|
|
return {
|
|
id: 1, firm_name: 'Ф', city: 'Самара', rubric: 'Стоматологии', phones_count: 1,
|
|
state: 'active', stop_reason: null, resume_at: null, days_in_ads: 1,
|
|
warmup_started_at: '2026-07-20T00:00:00+00:00', prospect_id: null, stage: null,
|
|
assigned: false, manager_id: null, manager_name: null, warming_active: true,
|
|
warming_channels: ['yandex'], ch_yandex: true, ch_vk: false, ch_mts: false, ...over,
|
|
};
|
|
}
|
|
|
|
describe('useWarmingFirms', () => {
|
|
it('собирает список ниш и фильтрует по нише', () => {
|
|
const src = ref<SalesAdAudienceFirmRow[]>([
|
|
firm({ id: 1, rubric: 'Стоматологии' }),
|
|
firm({ id: 2, rubric: 'Медицина' }),
|
|
firm({ id: 3, rubric: 'Стоматологии' }),
|
|
]);
|
|
const { niches, filters, filtered } = useWarmingFirms(src);
|
|
expect(niches.value).toEqual(['Медицина', 'Стоматологии']);
|
|
filters.niche = 'Стоматологии';
|
|
expect(filtered.value.map((f) => f.id)).toEqual([1, 3]);
|
|
});
|
|
|
|
it('фильтрует по периоду дат запуска', () => {
|
|
const src = ref<SalesAdAudienceFirmRow[]>([
|
|
firm({ id: 1, warmup_started_at: '2026-07-01T00:00:00+00:00' }),
|
|
firm({ id: 2, warmup_started_at: '2026-07-20T00:00:00+00:00' }),
|
|
]);
|
|
const { filters, filtered } = useWarmingFirms(src);
|
|
filters.from = '2026-07-15';
|
|
expect(filtered.value.map((f) => f.id)).toEqual([2]);
|
|
});
|
|
});
|