Files
portal/app/tests/Frontend/ProjectCardBadge.spec.ts
T
Дмитрий 261a3cd46f fix(portal): проект на паузе больше не пишет «Собирает заявки» + итог колонки в «Канбане»
Два бага, которых не видел ни один тест — их нашёл робот, снимавший инструкции
для гостей.

1) Карточка остановленного проекта показывала одновременно «На паузе» и зелёную
плашку «Собирает заявки»: плашка смотрела только на связь с поставщиком (там
всё «ок») и про паузу не знала. Теперь серым: «Остановлен вами — заявки не
приходят».

2) В «Канбане» сумма в шапке колонки всегда была прочерком: считалась по старому
демо-полю, которого у живых заявок нет (там ноль), хотя на карточках стояла
честная цена. Теперь считает по настоящему списанию.

Тесты: сначала падающие, потом фикс. Весь фронт 1229 зелёных.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 08:58:33 +03:00

62 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { describe, it, expect } from 'vitest';
import { mount } from '@vue/test-utils';
import { createVuetify } from 'vuetify';
import ProjectCard from '../../resources/js/components/projects/ProjectCard.vue';
const vuetify = createVuetify();
const baseProject = {
id: 1,
name: 'Test Project',
signal_type: 'site' as const,
signal_identifier: 'test.ru',
is_active: false,
daily_limit_target: 5,
delivered_today: 0,
sync_status: 'ok' as const,
};
describe('ProjectCard — бейдж баланса', () => {
it('проект с preflight_blocked_at показывает «Не запущен — не хватает баланса»', () => {
const project = { ...baseProject, preflight_blocked_at: '2026-07-02T10:00:00Z', balance_blocked: true };
const w = mount(ProjectCard, {
props: { project, selected: false },
global: { plugins: [vuetify], stubs: { RouterLink: true } },
});
expect(w.text()).toContain('Не запущен — не хватает баланса');
});
it('обычная пауза (preflight_blocked_at=null) показывает «Приостановлен» а не блок баланса', () => {
const project = { ...baseProject, preflight_blocked_at: null, balance_blocked: false, is_active: false };
const w = mount(ProjectCard, {
props: { project, selected: false },
global: { plugins: [vuetify], stubs: { RouterLink: true } },
});
expect(w.text()).not.toContain('Не запущен — не хватает баланса');
// «На паузе» из v-else блока
expect(w.text()).toContain('На паузе');
});
// Плашка смотрела только на синхронизацию с поставщиком и не знала про паузу: карточка
// остановленного проекта одновременно писала «На паузе» и зелёное «Собирает заявки» —
// клиент видел два взаимоисключающих состояния (поймано на кадрах разборов 14.07.2026).
it('проект на паузе НЕ показывает зелёное «Собирает заявки»', () => {
const project = { ...baseProject, is_active: false, sync_status: 'ok' as const, preflight_blocked_at: null, balance_blocked: false };
const w = mount(ProjectCard, {
props: { project, selected: false },
global: { plugins: [vuetify], stubs: { RouterLink: true } },
});
expect(w.text()).not.toContain('Собирает заявки');
expect(w.text()).toContain('Остановлен вами — заявки не приходят');
});
it('активный проект НЕ показывает бейдж баланса', () => {
const project = { ...baseProject, is_active: true, preflight_blocked_at: null, balance_blocked: false };
const w = mount(ProjectCard, {
props: { project, selected: false },
global: { plugins: [vuetify], stubs: { RouterLink: true } },
});
expect(w.text()).not.toContain('не хватает баланса');
});
});