agent-ecosystem/test/main/services/team/TeamProvisioningServiceRoster.test.ts
iliya 032d9b478b feat: enhance team member validation and improve logging
- Added validation to prevent the use of reserved names ("user" and "team-lead") for team members, ensuring clearer error messages during member addition.
- Updated IPC handlers to improve logging functionality, enhancing observability of team-related actions.
- Implemented normalization of file paths across various services to ensure consistent handling on different platforms.
- Enhanced UI components to provide better feedback on team member statuses and actions.

Made-with: Cursor
2026-03-03 23:58:19 +02:00

78 lines
2.8 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest';
import { TeamProvisioningService } from '@main/services/team/TeamProvisioningService';
describe('TeamProvisioningService (launch roster discovery)', () => {
it('inbox fallback keeps -1 names but drops auto-suffixed -2+ when base exists', async () => {
const svc = new TeamProvisioningService(
{} as never,
{
listInboxNames: vi.fn(async () => [
'dev',
'dev-1',
'dev-2',
'dev-3',
'user',
'team-lead',
'DEV-2',
]),
} as never,
{ getMembers: vi.fn(async () => []) } as never,
{} as never
);
const result = await (svc as unknown as any).resolveLaunchExpectedMembers('t', '{}');
expect(result.source).toBe('inboxes');
expect(result.members.map((m: { name: string }) => m.name)).toEqual(['dev', 'dev-1']);
});
it('inbox fallback keeps suffixed name if base is absent', async () => {
const svc = new TeamProvisioningService(
{} as never,
{ listInboxNames: vi.fn(async () => ['alice-2']) } as never,
{ getMembers: vi.fn(async () => []) } as never,
{} as never
);
const result = await (svc as unknown as any).resolveLaunchExpectedMembers('t', '{}');
expect(result.source).toBe('inboxes');
expect(result.members.map((m: { name: string }) => m.name)).toEqual(['alice-2']);
});
it('members.meta.json fallback never returns reserved names (user/team-lead)', async () => {
const svc = new TeamProvisioningService(
{} as never,
{ listInboxNames: vi.fn(async () => []) } as never,
{
getMembers: vi.fn(async () => [
{ name: 'user', agentType: 'general-purpose' },
{ name: 'team-lead', agentType: 'team-lead' },
{ name: 'Alice', role: 'dev', agentType: 'general-purpose' },
]),
} as never,
{} as never
);
const result = await (svc as unknown as any).resolveLaunchExpectedMembers('t', '{}');
expect(result.source).toBe('members-meta');
expect(result.members.map((m: { name: string }) => m.name)).toEqual(['Alice']);
});
it('config fallback never returns reserved names (user/team-lead)', async () => {
const svc = new TeamProvisioningService(
{} as never,
{ listInboxNames: vi.fn(async () => []) } as never,
{ getMembers: vi.fn(async () => []) } as never,
{} as never
);
const configRaw = JSON.stringify({
name: 't',
members: [{ name: 'team-lead', agentType: 'team-lead' }, { name: 'user' }, { name: 'bob' }],
});
const result = await (svc as unknown as any).resolveLaunchExpectedMembers('t', configRaw);
expect(result.source).toBe('config-fallback');
expect(result.members.map((m: { name: string }) => m.name)).toEqual(['bob']);
});
});