Files
gridpilot.gg/apps/website/components/auth/AuthShell.test.tsx
Marc Mintel fb1221701d
Some checks failed
Contract Testing / contract-tests (push) Failing after 6m7s
Contract Testing / contract-snapshot (push) Failing after 4m46s
add tests
2026-01-22 11:52:42 +01:00

187 lines
5.6 KiB
TypeScript

import React from 'react';
import { describe, it, expect } from 'vitest';
import { render, screen } from '@testing-library/react';
import { AuthShell } from './AuthShell';
describe('AuthShell', () => {
describe('rendering', () => {
it('should render with single child', () => {
render(
<AuthShell>
<div data-testid="child-content">Child content</div>
</AuthShell>
);
expect(screen.getByTestId('child-content')).toBeInTheDocument();
});
it('should render with multiple children', () => {
render(
<AuthShell>
<div data-testid="child-1">Child 1</div>
<div data-testid="child-2">Child 2</div>
<div data-testid="child-3">Child 3</div>
</AuthShell>
);
expect(screen.getByTestId('child-1')).toBeInTheDocument();
expect(screen.getByTestId('child-2')).toBeInTheDocument();
expect(screen.getByTestId('child-3')).toBeInTheDocument();
});
it('should render with complex children', () => {
render(
<AuthShell>
<div>
<h1>Authentication</h1>
<p>Please sign in to continue</p>
<form>
<input type="email" placeholder="Email" />
<input type="password" placeholder="Password" />
<button type="submit">Sign In</button>
</form>
</div>
</AuthShell>
);
expect(screen.getByText('Authentication')).toBeInTheDocument();
expect(screen.getByText('Please sign in to continue')).toBeInTheDocument();
expect(screen.getByPlaceholderText('Email')).toBeInTheDocument();
expect(screen.getByPlaceholderText('Password')).toBeInTheDocument();
expect(screen.getByText('Sign In')).toBeInTheDocument();
});
it('should render with nested components', () => {
render(
<AuthShell>
<div data-testid="outer">
<div data-testid="inner">
<div data-testid="inner-inner">Content</div>
</div>
</div>
</AuthShell>
);
expect(screen.getByTestId('outer')).toBeInTheDocument();
expect(screen.getByTestId('inner')).toBeInTheDocument();
expect(screen.getByTestId('inner-inner')).toBeInTheDocument();
});
});
describe('accessibility', () => {
it('should have proper semantic structure', () => {
render(
<AuthShell>
<div>Content</div>
</AuthShell>
);
// The component uses AuthLayout which should have proper semantics
expect(screen.getByText('Content')).toBeInTheDocument();
});
it('should maintain proper document structure', () => {
render(
<AuthShell>
<main>
<h1>Authentication</h1>
<p>Content</p>
</main>
</AuthShell>
);
expect(screen.getByText('Authentication')).toBeInTheDocument();
expect(screen.getByText('Content')).toBeInTheDocument();
});
});
describe('edge cases', () => {
it('should handle empty children', () => {
render(<AuthShell>{null}</AuthShell>);
// Component should render without errors
});
it('should handle undefined children', () => {
render(<AuthShell>{undefined}</AuthShell>);
// Component should render without errors
});
it('should handle empty string children', () => {
render(<AuthShell>{''}</AuthShell>);
// Component should render without errors
});
it('should handle text nodes', () => {
render(<AuthShell>Text content</AuthShell>);
expect(screen.getByText('Text content')).toBeInTheDocument();
});
it('should handle multiple text nodes', () => {
render(
<AuthShell>
Text 1
Text 2
Text 3
</AuthShell>
);
expect(screen.getByText('Text 1')).toBeInTheDocument();
expect(screen.getByText('Text 2')).toBeInTheDocument();
expect(screen.getByText('Text 3')).toBeInTheDocument();
});
it('should handle mixed content types', () => {
render(
<AuthShell>
Text node
<div>Div content</div>
<span>Span content</span>
</AuthShell>
);
expect(screen.getByText('Text node')).toBeInTheDocument();
expect(screen.getByText('Div content')).toBeInTheDocument();
expect(screen.getByText('Span content')).toBeInTheDocument();
});
});
describe('visual states', () => {
it('should maintain layout structure', () => {
render(
<AuthShell>
<div data-testid="content">Content</div>
</AuthShell>
);
// The component uses AuthLayout which provides the layout structure
expect(screen.getByTestId('content')).toBeInTheDocument();
});
it('should handle full authentication flow', () => {
render(
<AuthShell>
<div>
<h1>Sign In</h1>
<form>
<input type="email" placeholder="Email" />
<input type="password" placeholder="Password" />
<button type="submit">Sign In</button>
</form>
<div>
<a href="/forgot-password">Forgot password?</a>
<a href="/register">Create account</a>
</div>
</div>
</AuthShell>
);
expect(screen.getByText('Sign In')).toBeInTheDocument();
expect(screen.getByPlaceholderText('Email')).toBeInTheDocument();
expect(screen.getByPlaceholderText('Password')).toBeInTheDocument();
expect(screen.getByText('Sign In')).toBeInTheDocument();
expect(screen.getByText('Forgot password?')).toBeInTheDocument();
expect(screen.getByText('Create account')).toBeInTheDocument();
});
});
});