const { app, BrowserWindow } = require('electron'); const path = require('path'); const os = require('os'); const fs = require('fs'); const assert = require('assert'); const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'ink-e2e-')); const vaultDir = path.join(tmp, 'Vault'); fs.mkdirSync(vaultDir); app.setPath('userData', tmp); fs.writeFileSync(path.join(tmp, 'settings.json'), JSON.stringify({ vault: vaultDir })); require('../electron/main.cjs'); app.whenReady().then(async () => { while (BrowserWindow.getAllWindows().length === 0) { await new Promise(r => setTimeout(r, 100)); } const win = BrowserWindow.getAllWindows()[0]; let ok = false; for (let i = 0; i < 50; i++) { await new Promise(r => setTimeout(r, 100)); if (win.isDestroyed()) break; const hasBtn = await win.webContents.executeJavaScript(`!!document.querySelector('[aria-label="New page"]')`).catch(() => false); if (hasBtn) { ok = true; break; } } // Click 'New page' await win.webContents.executeJavaScript(` document.querySelector('[aria-label="New page"]').click(); `); // Wait for the Template picker let templateReady = false; for (let i = 0; i < 50; i++) { await new Promise(r => setTimeout(r, 100)); templateReady = await win.webContents.executeJavaScript(`!!document.querySelector('[aria-label="Templates"]')`).catch(() => false); if (templateReady) break; } assert.strictEqual(templateReady, true, "Template picker didn't open"); // Click 'Blank Page' await win.webContents.executeJavaScript(` document.querySelector('.tpl-card[data-blank]').click(); `); // Wait for the page to render for (let i = 0; i < 50; i++) { await new Promise(r => setTimeout(r, 100)); const isReady = await win.webContents.executeJavaScript(`!!document.querySelector('.cover-btn')`).catch(() => false); if (isReady) break; } await win.webContents.executeJavaScript(` document.querySelector('.cover-btn').click(); `); // Wait for the popup to render let popupReady = false; for (let i = 0; i < 50; i++) { await new Promise(r => setTimeout(r, 100)); popupReady = await win.webContents.executeJavaScript(`!!document.querySelector('.cover-picker')`).catch(() => false); if (popupReady) break; } assert.strictEqual(popupReady, true, "Cover picker didn't open"); console.log('e2e tests passed!'); app.quit(); });