import React from 'react';
import { describe, expect, test, vi } from 'vitest';
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import fs from 'fs';
import path from 'path';
import { App } from '../src/iframe/App';
const root = path.resolve(__dirname, '..');
const coreTitles = ['Button', 'Input', 'CustomSelect', 'Card', 'Alert', 'Text', 'Stack', 'Badge'];
const dataTitles = ['DataTable'];
const dialogTitles = ['Dialog', 'ConfirmDialog'];
const feedbackTitles = ['Spinner', 'LoadingIndicator', 'Tooltip', 'Progress', 'Skeleton'];
const formTitles = ['Checkbox', 'Switch', 'TextArea', 'Label', 'SearchInput'];
const navTitles = ['Tabs', 'Drawer', 'DropdownMenu'];
describe('integration checks', () => {
test('extension is registered for app menu', () => {
const manifest = JSON.parse(fs.readFileSync(path.join(root, 'manifest.json'), 'utf8'));
expect(manifest.ui?.hooks?.appMenu?.label).toBeTruthy();
});
test('iframe renders without console errors', () => {
const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
expect(() => render()).not.toThrow();
expect(errorSpy).not.toHaveBeenCalled();
errorSpy.mockRestore();
});
test('all UI kit components render in iframe context', async () => {
const user = userEvent.setup();
render();
coreTitles.forEach((title) => {
expect(screen.getByText(title)).toBeInTheDocument();
});
await user.click(screen.getByRole('tab', { name: 'Data' }));
dataTitles.forEach((title) => {
expect(screen.getByText(title)).toBeInTheDocument();
});
await user.click(screen.getByRole('tab', { name: 'Dialogs' }));
dialogTitles.forEach((title) => {
expect(screen.getByText(title)).toBeInTheDocument();
});
await user.click(screen.getByRole('tab', { name: 'Feedback' }));
feedbackTitles.forEach((title) => {
expect(screen.getByText(title)).toBeInTheDocument();
});
await user.click(screen.getByRole('tab', { name: 'Form' }));
formTitles.forEach((title) => {
expect(screen.getByText(title)).toBeInTheDocument();
});
await user.click(screen.getByRole('tab', { name: 'Navigation' }));
navTitles.forEach((title) => {
expect(screen.getByText(title)).toBeInTheDocument();
});
});
});