/**
* @vitest-environment happy-dom
*/
import { describe, it, expect, beforeEach, vi } from 'vitest';
import { render } from '@testing-library/react';
import React from 'react';
import { SessionSelectorScreen } from '../../../components/screens/SessionSelectorScreen.js';
import { Window } from 'happy-dom';
describe('SessionSelectorScreen', () => {
beforeEach(() => {
// Setup happy-dom
const window = new Window();
globalThis.window = window as any;
globalThis.document = window.document as any;
});
const mockSessions = ['session-1', 'session-2', 'session-3'];
it('should render header with title', () => {
const onBack = vi.fn();
const onSelect = vi.fn();
const { getByText } = render(
);
expect(getByText(/Session Selection/i)).toBeDefined();
});
it('should render session list', () => {
const onBack = vi.fn();
const onSelect = vi.fn();
const { getByText } = render(
);
expect(getByText(/session-1/i)).toBeDefined();
expect(getByText(/session-2/i)).toBeDefined();
expect(getByText(/session-3/i)).toBeDefined();
});
it('should render footer with actions', () => {
const onBack = vi.fn();
const onSelect = vi.fn();
const { getAllByText } = render(
);
expect(getAllByText(/enter/i).length).toBeGreaterThan(0);
expect(getAllByText(/esc/i).length).toBeGreaterThan(0);
});
it('should handle empty session list', () => {
const onBack = vi.fn();
const onSelect = vi.fn();
const { getByText } = render(
);
expect(getByText(/No sessions found/i)).toBeDefined();
});
it('should display session count in stats', () => {
const onBack = vi.fn();
const onSelect = vi.fn();
const { getByText, getAllByText } = render(
);
expect(getByText(/Total:/i)).toBeDefined();
expect(getAllByText(/3/).length).toBeGreaterThan(0);
});
it('should use terminal height for layout calculation', () => {
const originalRows = process.stdout.rows;
process.stdout.rows = 30;
const onBack = vi.fn();
const onSelect = vi.fn();
const { container } = render(
);
expect(container).toBeDefined();
process.stdout.rows = originalRows;
});
it('should handle back navigation with ESC key', () => {
const onBack = vi.fn();
const onSelect = vi.fn();
const { container } = render(
);
// Test will verify onBack is called when ESC is pressed
expect(container).toBeDefined();
});
});