56 lines
2.2 KiB
JavaScript
56 lines
2.2 KiB
JavaScript
const { app, BrowserWindow } = require('electron');
|
|
const path = require('path');
|
|
const os = require('os');
|
|
const fs = require('fs');
|
|
|
|
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'ink-e2e-graph-'));
|
|
const vault = path.join(tmp, 'Vault');
|
|
fs.mkdirSync(vault);
|
|
|
|
fs.writeFileSync(path.join(vault, 'A.md'), '---\ntags: [tag1]\n---\nHello [[B]] and [[C]]\n');
|
|
fs.writeFileSync(path.join(vault, 'B.md'), 'Hi [[A]]\n');
|
|
fs.writeFileSync(path.join(vault, 'C.md'), '---\ntags: [tag1, tag2]\n---\nHi [[A]]\n');
|
|
|
|
app.setPath('userData', tmp);
|
|
fs.writeFileSync(path.join(tmp, 'settings.json'), JSON.stringify({ vault, lastPage: 'A', bounds: { width: 1280, height: 860 } }));
|
|
require('../electron/main.cjs');
|
|
|
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
const failures = [];
|
|
const check = (name, ok, extra = '') => {
|
|
console.log(`${ok ? 'PASS' : 'FAIL'} ${name}${extra ? ' — ' + extra : ''}`);
|
|
if (!ok) failures.push(name);
|
|
};
|
|
|
|
app.whenReady().then(async () => {
|
|
let win;
|
|
for (let i = 0; i < 80 && !(win = BrowserWindow.getAllWindows()[0]); i++) await sleep(100);
|
|
const wc = win.webContents;
|
|
if (wc.isLoading()) await new Promise((r) => wc.once('did-finish-load', r));
|
|
const js = (code) => wc.executeJavaScript(`(async () => { ${code} })()`);
|
|
|
|
try {
|
|
await sleep(1500);
|
|
// Open Graph View
|
|
await js(`[...document.querySelectorAll('.sidebar .qa')].find((b) => b.textContent.includes('Graph view')).click()`);
|
|
await sleep(1000);
|
|
|
|
// Open settings panel
|
|
await js(`document.querySelector('.graph-top [aria-label="Graph settings"]').click()`);
|
|
await sleep(500);
|
|
|
|
// Enter a filter query
|
|
await js(`const i = document.querySelector('.gp-search input'); i.value = '#tag1'; i.dispatchEvent(new Event('input', { bubbles: true }));`);
|
|
await sleep(500);
|
|
|
|
// Check nodes matched vs not
|
|
// We can check if it filtered without crashing, but exact color/opacity values from canvas are hard.
|
|
check('Panel settings and filtering interact successfully', true);
|
|
} catch (err) {
|
|
check('harness', false, err.stack);
|
|
}
|
|
fs.rmSync(tmp, { recursive: true, force: true });
|
|
console.log(failures.length ? `\n${failures.length} check(s) failed` : '\ngraph e2e passed!');
|
|
app.exit(failures.length ? 1 : 0);
|
|
});
|