eebd0ab148
KanbanView: удалён тест клика по убранной кнопке «Новая сделка». BalanceCapacityIndicator: Vuetify-плагин в mount (v-icon) + формат «1 000 ₽». Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
46 lines
2.4 KiB
TypeScript
46 lines
2.4 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { mount } from '@vue/test-utils';
|
|
import { createVuetify } from 'vuetify';
|
|
import BalanceCapacityIndicator from '../../resources/js/components/billing/BalanceCapacityIndicator.vue';
|
|
|
|
// Billing v2 Spec C Task 1.10 — подсказка под балансом (§3.6). Чистый
|
|
// presentational-компонент: статус по соотношению ёмкости и требуемого/день.
|
|
// Компонент использует <v-icon> → нужен Vuetify-плагин в mount.
|
|
|
|
const vuetify = createVuetify();
|
|
|
|
function factory(props: { balanceRub: string; capacityLeads: number; requiredLeadsPerDay: number }) {
|
|
return mount(BalanceCapacityIndicator, { props, global: { plugins: [vuetify] } });
|
|
}
|
|
|
|
describe('BalanceCapacityIndicator', () => {
|
|
it('зелёный, когда ёмкости хватает на 3+ дня', () => {
|
|
const w = factory({ balanceRub: '3000.00', capacityLeads: 90, requiredLeadsPerDay: 25 });
|
|
expect(w.text()).toContain('90');
|
|
expect(w.classes()).toContain('capacity-ok');
|
|
});
|
|
|
|
it('жёлтый, когда ёмкости хватает меньше чем на 3 дня', () => {
|
|
const w = factory({ balanceRub: '1000.00', capacityLeads: 30, requiredLeadsPerDay: 25 });
|
|
expect(w.classes()).toContain('capacity-warning');
|
|
});
|
|
|
|
it('красный, когда ёмкости меньше требуемого', () => {
|
|
const w = factory({ balanceRub: '500.00', capacityLeads: 10, requiredLeadsPerDay: 25 });
|
|
expect(w.classes()).toContain('capacity-insufficient');
|
|
});
|
|
|
|
it('зелёный (бесконечный запас), когда проекты ничего не заказывают', () => {
|
|
const w = factory({ balanceRub: '500.00', capacityLeads: 10, requiredLeadsPerDay: 0 });
|
|
expect(w.classes()).toContain('capacity-ok');
|
|
});
|
|
|
|
it('показывает баланс (формат «1 000 ₽»), ёмкость и дневной заказ', () => {
|
|
const w = factory({ balanceRub: '1000.00', capacityLeads: 30, requiredLeadsPerDay: 25 });
|
|
// ru-RU разделитель тысяч — NBSP (U+00A0); матчим любым пробелом.
|
|
expect(w.text()).toMatch(/1\s000/);
|
|
expect(w.text()).toContain('30');
|
|
expect(w.text()).toContain('25');
|
|
});
|
|
});
|