Files
portal/app/tests/Frontend/TierPricesPanel.spec.ts
T

43 lines
2.0 KiB
TypeScript

import { mount } from '@vue/test-utils';
import { describe, expect, it } from 'vitest';
import { createVuetify } from 'vuetify';
import TierPricesPanel from '../../resources/js/components/billing/TierPricesPanel.vue';
const vuetify = createVuetify();
const tiers = [
{ tier_no: 1, leads_in_tier: 50, price_rub: '120.00' },
{ tier_no: 2, leads_in_tier: 100, price_rub: '100.00' },
{ tier_no: 3, leads_in_tier: 200, price_rub: '80.00' },
{ tier_no: 4, leads_in_tier: 300, price_rub: '70.00' },
{ tier_no: 5, leads_in_tier: 400, price_rub: '65.00' },
{ tier_no: 6, leads_in_tier: 500, price_rub: '62.00' },
{ tier_no: 7, leads_in_tier: null, price_rub: '60.00' },
];
describe('TierPricesPanel', () => {
it('renders all 7 tiers as rows', () => {
const w = mount(TierPricesPanel, { props: { tiers, currentTierNo: 1 }, global: { plugins: [vuetify] } });
expect(w.findAll('[data-test="tier-row"]')).toHaveLength(7);
});
it('highlights current tier with «вы здесь» chip', () => {
const w = mount(TierPricesPanel, { props: { tiers, currentTierNo: 3 }, global: { plugins: [vuetify] } });
const currentRow = w.find('[data-test-row="tier-row-3"]');
expect(currentRow.text()).toContain('вы здесь');
});
it('renders «1551+» open-ended range for tier 7 (leads_in_tier=null)', () => {
const w = mount(TierPricesPanel, { props: { tiers, currentTierNo: 1 }, global: { plugins: [vuetify] } });
// sum of tiers 1-6: 50+100+200+300+400+500 = 1550 → tier 7 starts at 1551
expect(w.find('[data-test-row="tier-row-7"]').text()).toMatch(/1551\+/);
});
it('renders prices with ₽ suffix on each row', () => {
const w = mount(TierPricesPanel, { props: { tiers, currentTierNo: 1 }, global: { plugins: [vuetify] } });
expect(w.find('[data-test-row="tier-row-1"]').text()).toContain('120.00');
expect(w.find('[data-test-row="tier-row-1"]').text()).toContain('₽');
});
});