| |
| |
| |
| |
| |
| |
|
|
| const STORAGE_KEY = "labs_projects_global"; |
|
|
| console.log("=== LABS PERSISTENCE TEST SUITE ===\n"); |
|
|
| |
| function test1_storageExists() { |
| console.log("TEST 1: Check if storage key exists"); |
| const raw = localStorage.getItem(STORAGE_KEY); |
| if (raw) { |
| console.log("β
Storage key exists"); |
| console.log(` Size: ${raw.length} bytes`); |
| return true; |
| } else { |
| console.log("β οΈ Storage key does not exist (fresh start)"); |
| return false; |
| } |
| } |
|
|
| |
| function test2_parseData() { |
| console.log("\nTEST 2: Parse stored data"); |
| const raw = localStorage.getItem(STORAGE_KEY); |
| if (!raw) { |
| console.log("β οΈ No data to parse"); |
| return null; |
| } |
| try { |
| const parsed = JSON.parse(raw); |
| if (Array.isArray(parsed)) { |
| console.log(`β
Data parsed successfully - ${parsed.length} projects`); |
| return parsed; |
| } else { |
| console.log("β Data is not an array"); |
| return null; |
| } |
| } catch (e) { |
| console.log("β JSON parse failed:", e.message); |
| return null; |
| } |
| } |
|
|
| |
| function test3_validateProjects(projects) { |
| console.log("\nTEST 3: Validate project structure"); |
| if (!projects || projects.length === 0) { |
| console.log("β οΈ No projects to validate"); |
| return false; |
| } |
|
|
| let allValid = true; |
| const requiredFields = ["id", "sessionId", "name", "createdAt", "updatedAt", "document"]; |
|
|
| projects.forEach((project, index) => { |
| const missing = requiredFields.filter(field => !(field in project)); |
| if (missing.length > 0) { |
| console.log(`β Project ${index} missing fields: ${missing.join(", ")}`); |
| allValid = false; |
| } else { |
| console.log(`β
Project ${index}: "${project.name}" - valid structure`); |
| console.log(` ID: ${project.id}`); |
| console.log(` SessionID: ${project.sessionId}`); |
| console.log(` Document length: ${(project.document || "").length} chars`); |
| } |
| }); |
|
|
| return allValid; |
| } |
|
|
| |
| function test4_uniqueSessionIds(projects) { |
| console.log("\nTEST 4: Check unique sessionIds"); |
| if (!projects || projects.length === 0) { |
| console.log("β οΈ No projects to check"); |
| return true; |
| } |
|
|
| const sessionIds = projects.map(p => p.sessionId); |
| const uniqueIds = new Set(sessionIds); |
|
|
| if (sessionIds.length === uniqueIds.size) { |
| console.log(`β
All ${sessionIds.length} sessionIds are unique`); |
| return true; |
| } else { |
| console.log(`β Duplicate sessionIds found!`); |
| return false; |
| } |
| } |
|
|
| |
| function test5_saveLoadCycle() { |
| console.log("\nTEST 5: Save and Load Cycle"); |
|
|
| |
| const testProject = { |
| id: "test-" + Date.now(), |
| sessionId: "session-" + Date.now(), |
| modelId: "test-model", |
| name: "Test Project " + new Date().toLocaleTimeString(), |
| createdAt: Date.now(), |
| updatedAt: Date.now(), |
| document: "Test document content for persistence testing." |
| }; |
|
|
| |
| const raw = localStorage.getItem(STORAGE_KEY); |
| let projects = []; |
| try { |
| projects = raw ? JSON.parse(raw) : []; |
| } catch (e) { |
| projects = []; |
| } |
|
|
| |
| projects.push(testProject); |
|
|
| |
| try { |
| localStorage.setItem(STORAGE_KEY, JSON.stringify(projects)); |
| console.log("β
Save successful"); |
| } catch (e) { |
| console.log("β Save failed:", e.message); |
| return false; |
| } |
|
|
| |
| try { |
| const loaded = JSON.parse(localStorage.getItem(STORAGE_KEY)); |
| const found = loaded.find(p => p.id === testProject.id); |
| if (found && found.document === testProject.document) { |
| console.log("β
Load and verify successful"); |
| console.log(` Project "${testProject.name}" persisted correctly`); |
|
|
| |
| const cleaned = loaded.filter(p => p.id !== testProject.id); |
| localStorage.setItem(STORAGE_KEY, JSON.stringify(cleaned)); |
| console.log("β
Test project cleaned up"); |
| return true; |
| } else { |
| console.log("β Loaded data doesn't match saved data"); |
| return false; |
| } |
| } catch (e) { |
| console.log("β Load failed:", e.message); |
| return false; |
| } |
| } |
|
|
| |
| function test6_largeDocument() { |
| console.log("\nTEST 6: Large document handling"); |
|
|
| |
| const largeDoc = "x".repeat(100000); |
| const testProject = { |
| id: "large-test-" + Date.now(), |
| sessionId: "session-" + Date.now(), |
| modelId: "", |
| name: "Large Doc Test", |
| createdAt: Date.now(), |
| updatedAt: Date.now(), |
| document: largeDoc |
| }; |
|
|
| try { |
| localStorage.setItem("test_large", JSON.stringify([testProject])); |
| const loaded = JSON.parse(localStorage.getItem("test_large")); |
| localStorage.removeItem("test_large"); |
|
|
| if (loaded[0].document.length === 100000) { |
| console.log("β
Large document (100KB) saved and loaded correctly"); |
| return true; |
| } else { |
| console.log("β Large document corrupted"); |
| return false; |
| } |
| } catch (e) { |
| console.log("β Large document test failed:", e.message); |
| localStorage.removeItem("test_large"); |
| return false; |
| } |
| } |
|
|
| |
| function runAllTests() { |
| console.log("\n" + "=".repeat(50)); |
| console.log("RUNNING ALL TESTS"); |
| console.log("=".repeat(50) + "\n"); |
|
|
| const results = []; |
|
|
| results.push({ name: "Storage Exists", passed: test1_storageExists() }); |
|
|
| const projects = test2_parseData(); |
| results.push({ name: "Parse Data", passed: projects !== null || localStorage.getItem(STORAGE_KEY) === null }); |
|
|
| if (projects) { |
| results.push({ name: "Validate Projects", passed: test3_validateProjects(projects) }); |
| results.push({ name: "Unique SessionIds", passed: test4_uniqueSessionIds(projects) }); |
| } |
|
|
| results.push({ name: "Save/Load Cycle", passed: test5_saveLoadCycle() }); |
| results.push({ name: "Large Document", passed: test6_largeDocument() }); |
|
|
| console.log("\n" + "=".repeat(50)); |
| console.log("TEST RESULTS SUMMARY"); |
| console.log("=".repeat(50)); |
|
|
| const passed = results.filter(r => r.passed).length; |
| const total = results.length; |
|
|
| results.forEach(r => { |
| console.log(`${r.passed ? "β
" : "β"} ${r.name}`); |
| }); |
|
|
| console.log("\n" + `${passed}/${total} tests passed`); |
|
|
| if (passed === total) { |
| console.log("\nπ ALL TESTS PASSED! Persistence is working correctly."); |
| } else { |
| console.log("\nβ οΈ Some tests failed. Check the output above."); |
| } |
|
|
| return { passed, total, results }; |
| } |
|
|
| |
| window.labsTest = { runAllTests, test1_storageExists, test2_parseData, test3_validateProjects, test4_uniqueSessionIds, test5_saveLoadCycle, test6_largeDocument }; |
|
|
| console.log("\nTest suite loaded. Run: labsTest.runAllTests()"); |
| console.log("Or run individual tests: labsTest.test1_storageExists()"); |
|
|
| |
| runAllTests(); |
|
|