diff --git a/src/components/utils/Header.test.ts b/src/components/utils/Header.test.ts
new file mode 100644
index 0000000..b89d702
--- /dev/null
+++ b/src/components/utils/Header.test.ts
@@ -0,0 +1,60 @@
+import { describe, it, expect } from 'vitest';
+import { render } from '@testing-library/react';
+import { Header } from './Header';
+
+vi.mock('next/head', () => {
+ return {
+ __esModule: true,
+ default: ({ children }: { children: React.ReactNode }) => {
+ return
{children}
;
+ },
+ };
+});
+
+describe('Header', () => {
+ it('renders with title', () => {
+ const title = 'Test Title';
+ const { container } = render();
+
+ // Check title element exists
+ const titleElement = container.querySelector('title');
+ expect(titleElement).toBeTruthy();
+ expect(titleElement?.textContent).toBe(title);
+
+ // Check required meta tags exist
+ expect(container.querySelector('meta[httpEquiv="X-UA-Compatible"]')).toBeTruthy();
+ expect(container.querySelector('meta[name="viewport"]')).toBeTruthy();
+ expect(container.querySelector('meta[name="theme-color"]')).toBeTruthy();
+
+ // Check required links exist
+ expect(container.querySelector('link[rel="manifest"]')).toBeTruthy();
+ expect(container.querySelector('link[href="/static/styles/reset.css"]')).toBeTruthy();
+ expect(container.querySelector('link[href="/static/styles/login.css"]')).toBeTruthy();
+
+ // Check font links
+ expect(container.querySelector('link[href*="fonts.googleapis.com/css?family=Lato"]')).toBeTruthy();
+ expect(container.querySelector('link[href*="fonts.googleapis.com/css?family=Roboto"]')).toBeTruthy();
+
+ // Check favicon links
+ expect(container.querySelector('link[rel="apple-touch-icon"]')).toBeTruthy();
+ expect(container.querySelector('link[rel="icon"][sizes="32x32"]')).toBeTruthy();
+ expect(container.querySelector('link[rel="icon"][sizes="16x16"]')).toBeTruthy();
+ expect(container.querySelector('link[rel="shortcut icon"]')).toBeTruthy();
+
+ // Check social meta tags
+ expect(container.querySelector('meta[property="og:title"]')).toBeTruthy();
+ expect(container.querySelector('meta[property="og:description"]')).toBeTruthy();
+ expect(container.querySelector('meta[name="twitter:card"]')).toBeTruthy();
+ expect(container.querySelector('meta[name="twitter:title"]')).toBeTruthy();
+ });
+
+ it('renders children content', () => {
+ const { container } = render(
+
+ );
+
+ expect(container.querySelector('meta[name="custom"]')).toBeTruthy();
+ });
+});