83 lines
2.7 KiB
TypeScript
83 lines
2.7 KiB
TypeScript
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',
|
|
manifest_url: '/manifest.json',
|
|
app_icon192: '/icon192.png',
|
|
app_icon180: '/icon180.png',
|
|
app_icon152: '/icon152.png',
|
|
app_icon120: '/icon120.png',
|
|
};
|
|
|
|
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('должен создавать link теги для иконок', () => {
|
|
metaInitializer.init();
|
|
|
|
const iconLink = document.querySelector('link[rel="icon"]');
|
|
expect(iconLink).not.toBeNull();
|
|
expect(iconLink?.getAttribute('href')).toBe('/icon192.png');
|
|
});
|
|
|
|
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');
|
|
});
|
|
});
|
|
|