You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

103 lines
2.6 KiB

/**
* Test Helper Utilities
*
* Provides utilities for automated testing (Playwright, Vitest E2E)
*
* ⚠️ IMPORTANT: These utilities should ONLY be used in test environments.
* Never use test credentials in production!
*/
/**
* Get test user credentials from environment variables
*
* @throws Error if test credentials are not configured
* @returns Test user email and password
*
* @example
* ```typescript
* // In a Playwright test
* import { getTestCredentials } from '~/server/utils/test-helpers'
*
* const { email, password } = getTestCredentials()
* await page.fill('[name="email"]', email)
* await page.fill('[name="password"]', password)
* ```
*/
export function getTestCredentials() {
const config = useRuntimeConfig()
const email = config.testUser.email
const password = config.testUser.password
if (!email || !password) {
throw new Error(
'Test credentials not configured. Please set TEST_USER_EMAIL and TEST_USER_PASSWORD in .env'
)
}
// Security check: Warn if used in production
if (process.env.NODE_ENV === 'production') {
console.warn(
'⚠️ WARNING: Test credentials are being used in production environment! This is a security risk.'
)
}
return {
email,
password,
}
}
/**
* Check if test credentials are configured
*
* @returns true if test credentials are available
*
* @example
* ```typescript
* if (hasTestCredentials()) {
* // Run authenticated tests
* const { email, password } = getTestCredentials()
* // ... test login flow
* } else {
* console.log('Skipping authenticated tests - no test credentials configured')
* }
* ```
*/
export function hasTestCredentials(): boolean {
const config = useRuntimeConfig()
return !!(config.testUser.email && config.testUser.password)
}
/**
* API endpoint to get test credentials
* ⚠️ ONLY available in development mode
*
* This endpoint allows tests to fetch credentials dynamically.
* It's automatically disabled in production.
*
* GET /api/test/credentials
* Returns: { email: string, password: string }
*/
export function createTestCredentialsEndpoint() {
return defineEventHandler((event) => {
// SECURITY: Only allow in development
if (process.env.NODE_ENV === 'production') {
throw createError({
statusCode: 404,
statusMessage: 'Not Found',
})
}
try {
const credentials = getTestCredentials()
return credentials
} catch (error) {
throw createError({
statusCode: 500,
statusMessage:
error instanceof Error ? error.message : 'Test credentials not configured',
})
}
})
}