- Replaced direct access to session.firstMessage with formatSessionLabel for consistent label formatting across components. - Updated SessionItem, TeamSessionsSection, and KanbanFilterPopover to utilize the new formatting function. - Enhanced display logic in SessionItem to differentiate between regular and team sessions, improving user experience. - Added new icons for team sessions and adjusted metadata display for better clarity.
124 lines
4 KiB
TypeScript
124 lines
4 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { formatSessionLabel, parseSessionTitle } from '@renderer/utils/sessionTitleParser';
|
|
|
|
describe('parseSessionTitle', () => {
|
|
it('returns regular/Untitled for undefined', () => {
|
|
expect(parseSessionTitle(undefined)).toEqual({
|
|
kind: 'regular',
|
|
displayText: 'Untitled',
|
|
});
|
|
});
|
|
|
|
it('returns regular/Untitled for empty string', () => {
|
|
expect(parseSessionTitle('')).toEqual({
|
|
kind: 'regular',
|
|
displayText: 'Untitled',
|
|
});
|
|
});
|
|
|
|
it('parses new team provisioning with straight quotes', () => {
|
|
const msg =
|
|
'agent_teams_ui [Agent Team: "summit-ops" | Project: "sol_team_proj" | Lead: "team-lead"] — team does NOT exist yet.';
|
|
const result = parseSessionTitle(msg);
|
|
expect(result).toEqual({
|
|
kind: 'team-new',
|
|
displayText: 'summit-ops',
|
|
teamName: 'summit-ops',
|
|
projectName: 'sol_team_proj',
|
|
});
|
|
});
|
|
|
|
it('parses new team provisioning with smart quotes', () => {
|
|
const msg =
|
|
'agent_teams_ui [Agent Team: \u201Csummit-ops\u201D | Project: \u201Csol_team_proj\u201D | Lead: \u201Cteam-lead\u201D] \u2014 team does NOT exist yet.';
|
|
const result = parseSessionTitle(msg);
|
|
expect(result).toEqual({
|
|
kind: 'team-new',
|
|
displayText: 'summit-ops',
|
|
teamName: 'summit-ops',
|
|
projectName: 'sol_team_proj',
|
|
});
|
|
});
|
|
|
|
it('parses Team Start as resume', () => {
|
|
const msg =
|
|
'Team Start [Agent Team: "atlas-hq-2" | Project: "sol_team_proj" | Lead: "team-lead"] You are running in a non-interactive CLI session.';
|
|
const result = parseSessionTitle(msg);
|
|
expect(result).toEqual({
|
|
kind: 'team-resume',
|
|
displayText: 'atlas-hq-2',
|
|
teamName: 'atlas-hq-2',
|
|
projectName: 'sol_team_proj',
|
|
});
|
|
});
|
|
|
|
it('parses Team Start (resume) as resume', () => {
|
|
const msg =
|
|
'Team Start (resume) [Agent Team: "atlas-hq-2" | Project: "sol_team_proj" | Lead: "team-lead"] You are running...';
|
|
const result = parseSessionTitle(msg);
|
|
expect(result).toEqual({
|
|
kind: 'team-resume',
|
|
displayText: 'atlas-hq-2',
|
|
teamName: 'atlas-hq-2',
|
|
projectName: 'sol_team_proj',
|
|
});
|
|
});
|
|
|
|
it('passes through regular text as-is', () => {
|
|
const msg = 'Fix the login bug in auth module';
|
|
const result = parseSessionTitle(msg);
|
|
expect(result).toEqual({
|
|
kind: 'regular',
|
|
displayText: 'Fix the login bug in auth module',
|
|
});
|
|
});
|
|
|
|
it('strips single [Image #N] prefix', () => {
|
|
const msg = '[Image #1] Сделай чтобы было без иконки';
|
|
const result = parseSessionTitle(msg);
|
|
expect(result).toEqual({
|
|
kind: 'regular',
|
|
displayText: 'Сделай чтобы было без иконки',
|
|
});
|
|
});
|
|
|
|
it('strips multiple [Image #N] prefixes', () => {
|
|
const msg = '[Image #1] [Image #2] Something with two images';
|
|
const result = parseSessionTitle(msg);
|
|
expect(result).toEqual({
|
|
kind: 'regular',
|
|
displayText: 'Something with two images',
|
|
});
|
|
});
|
|
|
|
it('returns Untitled when only image prefixes remain', () => {
|
|
const msg = '[Image #1] ';
|
|
const result = parseSessionTitle(msg);
|
|
expect(result).toEqual({
|
|
kind: 'regular',
|
|
displayText: 'Untitled',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('formatSessionLabel', () => {
|
|
it('returns team name for new team session', () => {
|
|
const msg =
|
|
'agent_teams_ui [Agent Team: "my-team" | Project: "my-proj" | Lead: "lead"] — team does NOT exist yet.';
|
|
expect(formatSessionLabel(msg)).toBe('my-team');
|
|
});
|
|
|
|
it('returns team name for resume session', () => {
|
|
const msg = 'Team Start [Agent Team: "my-team" | Project: "proj" | Lead: "lead"] ...';
|
|
expect(formatSessionLabel(msg)).toBe('my-team');
|
|
});
|
|
|
|
it('returns cleaned text for regular session', () => {
|
|
expect(formatSessionLabel('Hello world')).toBe('Hello world');
|
|
});
|
|
|
|
it('returns Untitled for undefined', () => {
|
|
expect(formatSessionLabel(undefined)).toBe('Untitled');
|
|
});
|
|
});
|