Files

73 lines
2.0 KiB
JavaScript
Raw Permalink Normal View History

2026-07-12 15:15:48 +08:00
import { test } from 'node:test';
import assert from 'node:assert/strict';
import {
activityGroupHasMixedSources,
activitySessionMetaParts,
activitySourceLabel,
} from '../app/src/renderer/src/activity-ledger.mjs';
const claudeSession = {
source: 'claude',
project: '-Users-tomiya-Code-quiet-zero',
message_count: 2716,
};
const codexSession = {
source: 'codex',
project: '-Users-tomiya-Code-quiet-zero',
message_count: 2052,
};
2026-07-20 22:43:23 +08:00
const sourceCatalog = [
{ id: 'claude', name: 'Claude Code', color: '#d97757' },
{ id: 'codex', name: 'Codex', color: '#10a37f' },
];
2026-07-12 15:15:48 +08:00
test('single-source activity groups omit provider provenance', () => {
const split = { normal: [codexSession], noise: [{ ...codexSession, message_count: 12 }] };
assert.equal(activityGroupHasMixedSources(split), false);
assert.deepEqual(
activitySessionMetaParts(codexSession, {
mixedSources: false,
projectLabel: 'quiet-zero',
}),
[
{ kind: 'project', text: 'quiet-zero' },
{ kind: 'count', text: '2,052 msg' },
],
);
});
test('mixed activity groups expose provider before project and count', () => {
const split = { normal: [codexSession], noise: [claudeSession] };
assert.equal(activityGroupHasMixedSources(split), true);
assert.deepEqual(
activitySessionMetaParts(claudeSession, {
mixedSources: true,
projectLabel: 'quiet-zero',
2026-07-20 22:43:23 +08:00
sourceCatalog,
2026-07-12 15:15:48 +08:00
}),
[
{ kind: 'source', text: 'Claude Code' },
{ kind: 'project', text: 'quiet-zero' },
{ kind: 'count', text: '2,716 msg' },
],
);
});
test('workspace activity omits redundant project scope', () => {
assert.deepEqual(
activitySessionMetaParts(codexSession, {
mixedSources: false,
projectLabel: 'quiet-zero',
includeProject: false,
}),
[{ kind: 'count', text: '2,052 msg' }],
);
});
test('unknown providers retain their own provenance label', () => {
assert.equal(activitySourceLabel({ source: 'opencode' }), 'Opencode');
});