managarten/apps-archived/maerchenzauber/apps/backend/src/test-cls-implementation.ts
Till-JS 61d181fbc2 chore: archive inactive projects to apps-archived/
Move inactive projects out of active workspace:
- bauntown (community website)
- maerchenzauber (AI story generation)
- memoro (voice memo app)
- news (news aggregation)
- nutriphi (nutrition tracking)
- reader (reading app)
- uload (URL shortener)
- wisekeep (AI wisdom extraction)

Update CLAUDE.md documentation:
- Add presi to active projects
- Document archived projects section
- Update workspace configuration

Archived apps can be re-activated by moving back to apps/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 07:03:59 +01:00

88 lines
3.2 KiB
TypeScript

/**
* Test script to verify that the CLS implementation works correctly
*
* This script can be run independently to test that:
* 1. RequestContextService properly stores and retrieves tokens
* 2. SupabaseProvider creates authenticated clients using CLS context
* 3. SupabaseJsonbAuthService can access tokens from context
*/
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { RequestContextService } from './common/services/request-context.service';
import { SupabaseProvider } from './supabase/supabase.provider';
async function testClsImplementation() {
const app = await NestFactory.create(AppModule, { logger: false });
const contextService = app.get(RequestContextService);
const supabaseProvider = app.get(SupabaseProvider);
console.log('=== Testing CLS Implementation ===\n');
// Test 1: Test context service outside of request (should handle gracefully)
console.log('1. Testing context service without active context:');
console.log(' Has context:', contextService.hasContext());
console.log(' Token:', contextService.getToken());
console.log(' User ID:', contextService.getUserId());
console.log('');
// Test 2: Simulate request context
console.log('2. Simulating request context with token:');
const testToken =
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
contextService.setContext({
token: testToken,
userId: 'test-user-123',
requestId: 'test-request-456',
});
console.log(' Context set successfully');
console.log(' Has context:', contextService.hasContext());
console.log(' Token (first 20 chars):', contextService.getToken()?.substring(0, 20) + '...');
console.log(' User ID:', contextService.getUserId());
console.log(' Request ID:', contextService.getRequestId());
console.log('');
// Test 3: Test Supabase provider with context
console.log('3. Testing Supabase provider with context:');
try {
const client = supabaseProvider.getClient();
console.log(' Supabase client created successfully');
console.log(' Client type:', client.constructor.name);
console.log('');
} catch (error) {
console.log(' Error creating Supabase client:', error);
}
// Test 4: Test authenticated service
console.log('4. Testing authenticated service:');
try {
// This would normally make a database call, but we'll just test the client creation
console.log(' Service initialized successfully');
console.log(' Service can access token:', !!contextService.getToken());
console.log('');
} catch (error) {
console.log(' Error with authenticated service:', error);
}
// Test 5: Clear context
console.log('5. Testing context clearing:');
contextService.clearContext();
console.log(' Context cleared');
console.log(' Has context:', contextService.hasContext());
console.log(' Token after clear:', contextService.getToken());
console.log('');
console.log('=== CLS Implementation Test Complete ===');
await app.close();
}
// Run the test if this file is executed directly
if (require.main === module) {
testClsImplementation().catch(console.error);
}
export { testClsImplementation };