@devix-tecnologia/directus-extension-inframe
Version:
DEPRECATED: Use 'directus-extension-inframe' instead. This package is no longer maintained.
149 lines (122 loc) • 5.46 kB
text/typescript
import { setupTestEnvironment, teardownTestEnvironment } from './setup.js';
import { createTestItem, getTestItems, deleteTestItems } from './helper_test.js';
import { describe, test, expect, beforeAll, afterAll, beforeEach } from 'vitest';
import { logger } from './test-logger.js';
import { directusVersions } from './directus-versions.js';
// Mock the inframe extension module for testing
const mockInframeModule = {
id: 'inframe',
name: 'Relatórios',
icon: 'document_scanner',
routes: [
{
path: '',
props: true,
component: 'List',
},
{
path: ':id',
component: 'ItemDetailRoute',
props: true,
},
],
};
describe.each(directusVersions)('Directus Extension Inframe Integration Tests - Directus %s', (version: string) => {
let testCollectionName: string;
const testSuiteId = `integration-${version.replace(/\./g, '-')}`;
beforeEach(() => {
logger.setCurrentTest(`Directus ${version}`);
});
beforeAll(async () => {
process.env.DIRECTUS_VERSION = version;
await setupTestEnvironment(testSuiteId);
// A coleção 'inframe' é criada automaticamente pelo hook da extensão
// Aguardar para garantir que o hook terminou
logger.info('Aguardando 15 segundos para conclusão total do setup...');
await new Promise((resolve) => setTimeout(resolve, 15000));
testCollectionName = 'inframe';
// Create test items na coleção inframe
await createTestItem('Test Report 1', 'https://example.com/report1', 'published', testSuiteId);
await createTestItem('Test Report 2', 'https://example.com/report2', 'published', testSuiteId);
await createTestItem('Draft Report', 'https://example.com/draft', 'draft', testSuiteId);
// Wait for items to be indexed
await new Promise((resolve) => setTimeout(resolve, 2000));
// Verify items were created
const items = await getTestItems(testSuiteId);
logger.info(`Created ${items.length} test items`);
}, 300000); // 5 minutos de timeout
afterAll(async () => {
// Cleanup test items (não deletar a coleção pois é da extensão)
await deleteTestItems(testSuiteId);
await teardownTestEnvironment(testSuiteId);
});
test('Extension module should have correct configuration', () => {
expect(mockInframeModule.id).toBe('inframe');
expect(mockInframeModule.name).toBe('Relatórios');
expect(mockInframeModule.icon).toBe('document_scanner');
expect(mockInframeModule.routes).toHaveLength(2);
});
test('Extension routes should be properly configured', () => {
const routes = mockInframeModule.routes;
// Test main route
expect(routes[0]?.path).toBe('');
expect(routes[0]?.props).toBe(true);
expect(routes[0]?.component).toBe('List');
// Test detail route
expect(routes[1]?.path).toBe(':id');
expect(routes[1]?.props).toBe(true);
expect(routes[1]?.component).toBe('ItemDetailRoute');
});
test('Should create test collection successfully', () => {
expect(testCollectionName).toBe('inframe');
});
test('Should create and retrieve test items', async () => {
const items = await getTestItems(testSuiteId);
expect(Array.isArray(items)).toBe(true);
expect(items.length).toBeGreaterThanOrEqual(2);
// Check if published items exist
const publishedItems = items.filter((item: any) => item.status === 'published');
expect(publishedItems.length).toBeGreaterThanOrEqual(2);
// Check item structure
const firstItem = publishedItems[0];
expect(firstItem).toHaveProperty('id');
expect(firstItem).toHaveProperty('url');
expect(firstItem).toHaveProperty('status');
});
test('Should filter published items correctly', async () => {
const items = await getTestItems(testSuiteId);
const publishedItems = items.filter((item: any) => item.status === 'published');
const draftItems = items.filter((item: any) => item.status === 'draft');
expect(publishedItems.length).toBeGreaterThanOrEqual(2);
expect(draftItems.length).toBeGreaterThanOrEqual(1);
// Verify published items have valid URLs
publishedItems.forEach((item: any) => {
expect(item.url).toMatch(/^https?:\/\/.+/);
expect(item.status).toBe('published');
});
});
test('Should handle Directus API connection', async () => {
expect(process.env.DIRECTUS_ACCESS_TOKEN).toBeDefined();
expect(process.env.DIRECTUS_PUBLIC_URL).toBe('http://directus:8055');
// Test if we can access the items
const items = await getTestItems(testSuiteId);
expect(Array.isArray(items)).toBe(true);
});
test('Extension should work with different Directus versions', () => {
// This test ensures the extension structure is compatible
// across different Directus versions
expect(typeof mockInframeModule.id).toBe('string');
expect(typeof mockInframeModule.name).toBe('string');
expect(typeof mockInframeModule.icon).toBe('string');
expect(Array.isArray(mockInframeModule.routes)).toBe(true);
// Version-specific compatibility checks could be added here
// based on the Directus version being tested
if (version.startsWith('9.')) {
// Directus v9 specific checks
expect(mockInframeModule.routes.length).toBeGreaterThan(0);
} else if (version.startsWith('10.') || version.startsWith('11.')) {
// Directus v10/v11 specific checks
expect(mockInframeModule.routes.length).toBeGreaterThan(0);
}
});
});