Skip to main content
Glama
test-v1.1.0-validation.jsβ€’8.5 kB
/** * @document v1.1.0 Validation Test Suite * @version 1.0.0 * @status active * @author Claude Code * @created 2025-07-01 * @description Complete test suite for v1.1.0 dual storage functionality */ import { DigitalPagesAPIClient } from '../src/api/digitalpages-api-client.js'; import fs from 'fs/promises'; class V110ValidationTester { constructor() { this.jwtToken = null; this.apiClient = null; this.testResults = []; } async initialize() { try { // Load JWT token this.jwtToken = await fs.readFile('archive/authentication/correct-jwt-new.txt', 'utf-8'); this.jwtToken = this.jwtToken.trim(); // Initialize API client this.apiClient = new DigitalPagesAPIClient(this.jwtToken); console.log('βœ… Test environment initialized'); return true; } catch (error) { console.error('❌ Test initialization failed:', error); return false; } } async testAuthentication() { console.log('\nπŸ” Testing Authentication...'); try { // Test user validation const userResult = await this.apiClient.validateUser(); this.addTestResult('User Authentication', true, 'User validation successful'); // Test project validation const projectResult = await this.apiClient.validateProject(); this.addTestResult('Project Authentication', true, 'Project validation successful'); return true; } catch (error) { this.addTestResult('Authentication', false, error.message); return false; } } async testCompositionSave() { console.log('\nπŸ’Ύ Testing Composition Save...'); try { // Generate test composition const testComposition = { composition: { id: `test-v1.1.0-${Date.now()}`, title: 'v1.1.0 Validation Test Composition', description: 'Test composition for v1.1.0 dual storage validation', author: 'v1.1.0 Test Suite', created: new Date().toISOString().split('T')[0], version: '1.1.0', metadata: { disciplina: 'Testing', serie: 'Test Grade', duracao_estimada: '5 minutos', tags: ['test', 'v1.1.0', 'validation'], platform: 'EuConquisto', storageType: 'dual' }, elements: [ { id: 'test-header-1', type: 'head-1', content_title: 'Test Header', padding_top: 0, padding_bottom: 30, background_color: '#4CAF50' } ] } }; // Test API save const saveResult = await this.apiClient.saveComposition(testComposition); if (saveResult.success) { this.addTestResult('Composition Save', true, `Saved with UID: ${saveResult.compositionUid}`); return saveResult; } else { this.addTestResult('Composition Save', false, saveResult.error); return null; } } catch (error) { this.addTestResult('Composition Save', false, error.message); return null; } } async testCompositionVerification(compositionUid) { console.log('\nπŸ” Testing Composition Verification...'); try { const verifyResult = await this.apiClient.verifyComposition(compositionUid); if (verifyResult.success && verifyResult.verified) { this.addTestResult('Composition Verification', true, 'Composition verified successfully'); return true; } else { this.addTestResult('Composition Verification', false, verifyResult.error); return false; } } catch (error) { this.addTestResult('Composition Verification', false, error.message); return false; } } async testPermanentUrl(compositionUid) { console.log('\n🌐 Testing Permanent URL Generation...'); try { const permanentUrl = this.apiClient.generatePermanentUrl(compositionUid); if (permanentUrl && permanentUrl.includes('dynamic-content.euconquisto.com')) { this.addTestResult('Permanent URL Generation', true, `URL: ${permanentUrl}`); return permanentUrl; } else { this.addTestResult('Permanent URL Generation', false, 'Invalid URL generated'); return null; } } catch (error) { this.addTestResult('Permanent URL Generation', false, error.message); return null; } } async testCompleteWorkflow() { console.log('\nπŸš€ Testing Complete Workflow...'); try { const testComposition = { composition: { id: `workflow-test-${Date.now()}`, title: 'Complete Workflow Test', description: 'End-to-end workflow validation', author: 'Workflow Tester', created: new Date().toISOString().split('T')[0], version: '1.1.0', metadata: { disciplina: 'MatemΓ‘tica', serie: '7ΒΊ ano', platform: 'EuConquisto' }, elements: [] } }; const workflowResult = await this.apiClient.saveAndVerifyComposition(testComposition); if (workflowResult.success) { this.addTestResult('Complete Workflow', true, `Success with URL: ${workflowResult.permanentUrl}`); return workflowResult; } else { this.addTestResult('Complete Workflow', false, workflowResult.error); return null; } } catch (error) { this.addTestResult('Complete Workflow', false, error.message); return null; } } addTestResult(testName, success, details) { this.testResults.push({ test: testName, success: success, details: details, timestamp: new Date().toISOString() }); const status = success ? 'βœ…' : '❌'; console.log(`${status} ${testName}: ${details}`); } async generateTestReport() { const timestamp = new Date().toISOString(); const successCount = this.testResults.filter(r => r.success).length; const totalCount = this.testResults.length; const report = `# v1.1.0 Validation Test Report **Generated**: ${timestamp} **Test Suite**: Complete v1.1.0 dual storage validation **Results**: ${successCount}/${totalCount} tests passed ## Test Results ${this.testResults.map(result => `### ${result.success ? 'βœ…' : '❌'} ${result.test} **Status**: ${result.success ? 'PASSED' : 'FAILED'} **Details**: ${result.details} **Timestamp**: ${result.timestamp} `).join('\n')} ## Summary ${successCount === totalCount ? 'πŸŽ‰ **ALL TESTS PASSED** - v1.1.0 implementation is production-ready' : `⚠️ **${totalCount - successCount} TESTS FAILED** - Review implementation before deployment`} ## Next Steps ${successCount === totalCount ? '- Deploy v1.1.0 to Claude Desktop\n- Update production configuration\n- Begin user acceptance testing' : '- Address failed test cases\n- Re-run validation suite\n- Fix implementation issues'} `; // Save test report await fs.writeFile(`logs/test-reports/v1.1.0-validation-${Date.now()}.md`, report); console.log('\nπŸ“Š Test report generated'); return { success: successCount === totalCount, successCount, totalCount, report }; } async runFullValidation() { console.log('πŸ§ͺ Starting v1.1.0 Complete Validation Suite...\n'); // Initialize const initSuccess = await this.initialize(); if (!initSuccess) { console.error('❌ Validation aborted - initialization failed'); return false; } // Run all tests await this.testAuthentication(); const saveResult = await this.testCompositionSave(); if (saveResult && saveResult.compositionUid) { await this.testCompositionVerification(saveResult.compositionUid); await this.testPermanentUrl(saveResult.compositionUid); } await this.testCompleteWorkflow(); // Generate report const finalReport = await this.generateTestReport(); console.log('\n🏁 Validation Complete'); console.log(`πŸ“Š Results: ${finalReport.successCount}/${finalReport.totalCount} tests passed`); return finalReport.success; } } // Export for testing export { V110ValidationTester }; // Run validation if called directly if (import.meta.url === `file://${process.argv[1]}`) { const tester = new V110ValidationTester(); const success = await tester.runFullValidation(); process.exit(success ? 0 : 1); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rkm097git/euconquisto-composer-mcp-poc'

If you have feedback or need assistance with the MCP directory API, please join our Discord server