import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import AppMetaInitializer from '@/utils/AppMetaInitializer.ts'; describe('AppMetaInitializer', () => { let initialHead: HTMLHeadElement; let metaInitializer: AppMetaInitializer; beforeEach(() => { // Сохраняем исходный head initialHead = document.head.cloneNode(true) as HTMLHeadElement; // Очищаем head для тестов document.head.innerHTML = ''; const settings = { app_name: 'Test App', }; metaInitializer = new AppMetaInitializer(settings); }); afterEach(() => { // Восстанавливаем исходный head document.head.innerHTML = initialHead.innerHTML; }); it('должен устанавливать title документа', () => { metaInitializer.init(); expect(document.title).toBe('Test App'); }); it('должен создавать meta теги', () => { metaInitializer.init(); const appNameMeta = document.querySelector('meta[name="application-name"]'); expect(appNameMeta).not.toBeNull(); expect(appNameMeta?.getAttribute('content')).toBe('Test App'); }); it('должен создавать apple-touch-icon теги', () => { metaInitializer.init(); const appleIcons = document.querySelectorAll('link[rel="apple-touch-icon"]'); expect(appleIcons.length).toBeGreaterThan(0); }); it('должен устанавливать theme-color', () => { metaInitializer.init(); const themeColor = document.querySelector('meta[name="theme-color"]'); expect(themeColor?.getAttribute('content')).toBe('#000000'); }); it('должен обновлять существующие meta теги', () => { // Создаем существующий meta тег const existingMeta = document.createElement('meta'); existingMeta.setAttribute('name', 'application-name'); existingMeta.setAttribute('content', 'Old Name'); document.head.appendChild(existingMeta); metaInitializer.init(); const metaTags = document.querySelectorAll('meta[name="application-name"]'); expect(metaTags.length).toBe(1); expect(metaTags[0]?.getAttribute('content')).toBe('Test App'); }); });