Files
obelisk/tests/sidebar-projects.test.mjs
T
tommy0103 80c125a572 build(app): migrate to electron-vite (main/preload/renderer), keep electron-builder (Phase 5d-3a)
Restructure app into src/{main,preload,renderer}; electron.vite.config.ts builds
all three (each main module its own input so CJS requires + the indexer worker
resolve; better-sqlite3 externalized; Vue plugin for renderer). main/index.js
paths updated for the out/ layout + ELECTRON_RENDERER_URL. Still JS/CJS — TS+ESM
and core consumption are the next stages. Verified: npm run dev launches clean;
electron-vite build succeeds; root suite 119/119.
2026-07-09 10:20:18 +08:00

57 lines
2.0 KiB
JavaScript

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { buildSidebarProjects } from '../app/src/renderer/src/sidebar-projects.mjs';
test('session sidebar projects follow database recency order instead of label order', () => {
const sessions = [
{ project: '-Users-dev-Code-sample-cli-' },
{ project: '-Users-dev-Code-quiet-zero' },
{ project: '-Users-dev-Code-quiet-zero' },
{ project: '-Users-dev-Library-Application-Support-Example-App-namespaces-release-stable-data-projects-00000000-1111-2222-3333-444444444444' },
];
const projects = [
{ project: '-Users-dev-Code-quiet-zero' },
{ project: '-Users-dev-Code-sample-cli-' },
{ project: '-Users-dev-Library-Application-Support-Example-App-namespaces-release-stable-data-projects-00000000-1111-2222-3333-444444444444' },
];
const labels = {
'-Users-dev-Code-sample-cli-': 'sample-cli+',
'-Users-dev-Code-quiet-zero': 'quiet-zero',
'-Users-dev-Library-Application-Support-Example-App-namespaces-release-stable-data-projects-00000000-1111-2222-3333-444444444444': '00000000-1111-2...',
};
const result = buildSidebarProjects({
routeType: 'sessions',
sessions,
projects,
formatProjectLabel: slug => labels[slug] || slug,
});
assert.deepEqual(result.map(project => project.label), [
'quiet-zero',
'sample-cli+',
'00000000-1111-2...',
]);
assert.equal(result[0].count, 2);
});
test('memory sidebar projects filter by archive state and label search', () => {
const result = buildSidebarProjects({
routeType: 'memory',
view: 'active',
search: 'quiet',
memories: [
{ project: 'quiet-zero', archived: false },
{ project: 'quiet-zero', archived: true },
{ project: 'sample-lib', archived: false },
],
projects: [
{ project: 'sample-lib' },
{ project: 'quiet-zero' },
],
formatProjectLabel: slug => slug,
});
assert.deepEqual(result, [{ slug: 'quiet-zero', label: 'quiet-zero', count: 1 }]);
});