lotr-sut/tests/e2e/utils/fixtureUtils.ts
Fellowship Scholar f6a5823439 init commit
2026-03-29 20:07:56 +00:00

85 lines
2.3 KiB
TypeScript

import { APIRequestContext, expect } from '@playwright/test';
import { execSync } from 'child_process';
import * as path from 'path';
/**
* Fixture utilities for test setup and teardown
*/
export class FixtureUtils {
/**
* Check if real stack is running by calling health endpoint
*/
static async isRealStackRunning(apiRequest: APIRequestContext, baseUrl: string): Promise<boolean> {
try {
const response = await apiRequest.get(`${baseUrl}/api/health`, {
timeout: 5000,
});
return response.ok();
} catch {
return false;
}
}
/**
* Verify CORS preflight is working
*/
static async verifyCORSPreflight(
apiRequest: APIRequestContext,
baseUrl: string,
origin: string = 'http://localhost:3000',
): Promise<boolean> {
try {
const response = await apiRequest.fetch(`${baseUrl}/api/auth/login`, {
method: 'OPTIONS',
headers: {
Origin: origin,
'Access-Control-Request-Method': 'POST',
'Access-Control-Request-Headers': 'Content-Type',
},
});
if (!response.ok()) {
return false;
}
const methods = response.headers()['access-control-allow-methods'] || '';
return methods.includes('POST');
} catch {
return false;
}
}
/**
* Get API status
*/
static async getApiStatus(apiRequest: APIRequestContext, baseUrl: string): Promise<any> {
const response = await apiRequest.get(`${baseUrl}/api/status`);
expect(response.ok()).toBeTruthy();
return response.json();
}
/**
* Clear user data (typically done via API reset endpoint if available)
*/
static async clearUserData(apiRequest: APIRequestContext, baseUrl: string): Promise<void> {
try {
const response = await apiRequest.post(`${baseUrl}/api/test/reset`, {});
expect(response.ok()).toBeTruthy();
} catch {
console.warn('Could not clear user data via API');
}
}
/**
* Seed database with test data (if endpoint available)
*/
static async seedDatabase(apiRequest: APIRequestContext, baseUrl: string): Promise<void> {
try {
const response = await apiRequest.post(`${baseUrl}/api/test/seed`, {});
expect(response.ok()).toBeTruthy();
} catch {
console.warn('Could not seed database via API');
}
}
}