Files
wehub-resource-sync 070959e133
landing-page-staging / Deploy landing page to staging (push) Has been skipped
landing-page-ci / Validate landing page (push) Failing after 4s
visual-baseline / Capture visual baselines (push) Has been cancelled
bake-plugin-previews / Bake plugin previews (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:00:47 +08:00

65 lines
2.1 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import type { ChatRunStatusResponse } from '@open-design/contracts';
import { buildPetTaskCenter } from '../../src/components/pet/taskCenter';
import type { Project } from '../../src/types';
const projects: Project[] = [
{ id: 'p1', name: 'Landing Page', skillId: null, designSystemId: null, createdAt: 1, updatedAt: 1 },
{ id: 'p2', name: 'Brand Deck', skillId: null, designSystemId: null, createdAt: 1, updatedAt: 1 },
{ id: 'p3', name: 'Ignored', skillId: null, designSystemId: null, createdAt: 1, updatedAt: 1 },
];
function run(
id: string,
projectId: string | null,
status: ChatRunStatusResponse['status'],
updatedAt: number,
): ChatRunStatusResponse {
return {
id,
projectId,
conversationId: null,
assistantMessageId: null,
agentId: null,
status,
createdAt: updatedAt - 10,
updatedAt,
};
}
describe('buildPetTaskCenter', () => {
it('groups active runs and hides recent completions for active projects', () => {
const center = buildPetTaskCenter(projects, [
run('r1', 'p1', 'running', 10),
run('r2', 'p1', 'running', 12),
run('q1', 'p2', 'queued', 11),
run('done-old', 'p1', 'succeeded', 8),
run('done-new', 'p2', 'failed', 20),
run('no-project', null, 'running', 30),
run('missing-project', 'missing', 'running', 31),
]);
expect(center.running).toEqual([
{ projectId: 'p1', projectName: 'Landing Page', status: 'running', count: 2 },
]);
expect(center.queued).toEqual([
{ projectId: 'p2', projectName: 'Brand Deck', status: 'queued', count: 1 },
]);
expect(center.recent).toEqual([]);
});
it('keeps only the latest completed run per inactive project', () => {
const center = buildPetTaskCenter(projects, [
run('old-success', 'p1', 'succeeded', 10),
run('new-failure', 'p1', 'failed', 20),
run('brand-success', 'p2', 'succeeded', 15),
]);
expect(center.recent).toEqual([
{ projectId: 'p1', projectName: 'Landing Page', status: 'failed', updatedAt: 20 },
{ projectId: 'p2', projectName: 'Brand Deck', status: 'succeeded', updatedAt: 15 },
]);
});
});