68 lines
1.8 KiB
JavaScript
68 lines
1.8 KiB
JavaScript
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,
|
|
};
|
|
|
|
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',
|
|
}),
|
|
[
|
|
{ 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');
|
|
});
|