Skip to main content
Glama
test-localStorage-injection-simple.jsโ€ข5.59 kB
/** * @document Simple Browser Test for localStorage Injection * @version 1.0.0 * @status active * @author Claude Code * @created 2025-06-30 * @description Simplified test to validate localStorage injection in Composer */ import { chromium } from 'playwright'; import { fotossintesesComposerJSON } from '../../compositions/fotossintese-composer-json-v1.1.0.js'; async function testLocalStorageInjection() { console.log('๐ŸŽญ Starting simplified localStorage injection test...\n'); const browser = await chromium.launch({ headless: false, // Show browser for debugging slowMo: 500 // Slow down for visibility }); try { const context = await browser.newContext({ viewport: { width: 1920, height: 1080 } }); const page = await context.newPage(); // Step 1: Navigate to Composer console.log('๐Ÿ“ Step 1: Navigating to Composer...'); const composerUrl = 'https://composer.euconquisto.com/composer'; await page.goto(composerUrl, { waitUntil: 'networkidle' }); // Take screenshot of initial state await page.screenshot({ path: 'logs/screenshots/injection/01-initial-composer.png', fullPage: true }); // Step 2: Execute injection directly console.log('๐Ÿ’‰ Step 2: Injecting fotossรญntese composition...'); // Pass the composition data directly to browser context const injectionResult = await page.evaluate((compositionData) => { try { // Clear existing data localStorage.removeItem('rdp-composer-data'); // Inject new composition localStorage.setItem('rdp-composer-data', JSON.stringify(compositionData)); // Verify const stored = localStorage.getItem('rdp-composer-data'); const parsed = JSON.parse(stored); console.log('โœ… Composition injected:', { id: parsed.composition.id, title: parsed.composition.title, elements: parsed.composition.elements.length }); return { success: true, compositionId: parsed.composition.id, title: parsed.composition.title, elementCount: parsed.composition.elements.length }; } catch (error) { console.error('โŒ Injection failed:', error); return { success: false, error: error.message }; } }, fotossintesesComposerJSON); console.log('๐Ÿ“ฆ Injection result:', injectionResult); // Take screenshot after injection await page.screenshot({ path: 'logs/screenshots/injection/02-after-injection.png', fullPage: true }); // Step 3: Reload page to trigger localStorage load console.log('๐Ÿ”„ Step 3: Reloading page to trigger composition load...'); await page.reload({ waitUntil: 'networkidle' }); await page.waitForTimeout(3000); // Take screenshot after reload await page.screenshot({ path: 'logs/screenshots/injection/03-after-reload.png', fullPage: true }); // Step 4: Check for composition visibility console.log('โœจ Step 4: Checking for composition visibility...'); const validationResult = await page.evaluate(() => { const bodyText = document.body.innerText || ''; const hasPhotosynthesis = bodyText.toLowerCase().includes('fotossรญntese'); const hasPlants = bodyText.toLowerCase().includes('plantas'); const hasWidgetElements = document.querySelectorAll('[class*="widget"], [class*="element"], [class*="composition"]').length > 0; // Also check localStorage persistence const storageData = localStorage.getItem('rdp-composer-data'); const hasPersistentData = !!storageData; return { hasPhotosynthesis, hasPlants, hasWidgetElements, hasPersistentData, visibleTextSnippet: bodyText.substring(0, 200) }; }); console.log('๐ŸŽฏ Validation results:', validationResult); // Take final screenshot await page.screenshot({ path: 'logs/screenshots/injection/04-final-state.png', fullPage: true }); // Generate summary console.log('\n๐Ÿ“Š Test Summary:'); console.log('================'); console.log(`โœ… localStorage injection: ${injectionResult.success ? 'SUCCESS' : 'FAILED'}`); console.log(`๐Ÿ“ Composition ID: ${injectionResult.compositionId || 'N/A'}`); console.log(`๐Ÿ“ Title: ${injectionResult.title || 'N/A'}`); console.log(`๐Ÿงฉ Elements: ${injectionResult.elementCount || 0}`); console.log(`๐Ÿ‘๏ธ Content visible: ${validationResult.hasPhotosynthesis ? 'YES' : 'NO'}`); console.log(`๐Ÿ’พ Data persisted: ${validationResult.hasPersistentData ? 'YES' : 'NO'}`); return { injection: injectionResult, validation: validationResult, success: injectionResult.success && validationResult.hasPersistentData }; } catch (error) { console.error('โŒ Test failed:', error); throw error; } finally { // Keep browser open for 10 seconds to observe console.log('\nโธ๏ธ Keeping browser open for observation...'); await new Promise(resolve => setTimeout(resolve, 10000)); await browser.close(); } } // Run the test testLocalStorageInjection() .then(report => { console.log('\nโœ… Test completed!'); console.log('๐Ÿ“ธ Screenshots saved in logs/screenshots/injection/'); process.exit(0); }) .catch(error => { console.error('\nโŒ Test failed:', error); process.exit(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