import { describe, it, expect, vi } from 'vitest'; import { isLocaleBlocked } from '../is-locale-blocked'; const KNOWN = ['de', 'fr', 'ru']; describe('isLocaleBlocked', () => { it('пропускает не-страничные запросы без обращения к геттеру', () => { const getEnabled = vi.fn(() => ['fr']); expect(isLocaleBlocked('/api/foo', KNOWN, getEnabled)).toBe(false); expect(isLocaleBlocked('/_nuxt/x.js', KNOWN, getEnabled)).toBe(false); expect(isLocaleBlocked('/__nuxt', KNOWN, getEnabled)).toBe(false); expect(getEnabled).not.toHaveBeenCalled(); }); it('путь без префикса локали — разрешён', () => { expect(isLocaleBlocked('/videos/1', KNOWN, () => ['fr'])).toBe(false); }); it('неизвестный префикс — разрешён (разбирается Nuxt)', () => { expect(isLocaleBlocked('/it/x', KNOWN, () => ['fr'])).toBe(false); }); it('список локалей пуст (не загружен) — разрешено всё', () => { expect(isLocaleBlocked('/de/x', KNOWN, () => [])).toBe(false); }); it('известная, но выключенная локаль — блокируется', () => { expect(isLocaleBlocked('/de/x', KNOWN, () => ['fr'])).toBe(true); }); it('известная и включённая локаль — разрешена', () => { expect(isLocaleBlocked('/fr/x', KNOWN, () => ['fr', 'de'])).toBe(false); }); it('префикс в конце пути без слеша тоже матчится', () => { expect(isLocaleBlocked('/ru', KNOWN, () => ['fr'])).toBe(true); }); });