Skip to content

Commit 748cd1c

Browse files
author
Lasim
committed
feat: Enhance user teams retrieval by including roles and membership details
1 parent bf9ecf8 commit 748cd1c

File tree

1 file changed

+27
-41
lines changed

1 file changed

+27
-41
lines changed

services/backend/tests/unit/routes/teams.test.ts

Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ describe('Teams Route', () => {
8787
mockTeamService.createTeam = vi.fn();
8888
mockTeamService.getUserTeams = vi.fn();
8989
mockTeamService.getTeamMembership = vi.fn();
90+
mockTeamService.getUserTeamsWithRoles = vi.fn();
9091
mockTeamService.getUserDefaultTeam = vi.fn();
9192
mockTeamService.getTeamById = vi.fn();
9293
mockTeamService.isTeamMember = vi.fn();
@@ -428,52 +429,48 @@ describe('Teams Route', () => {
428429
});
429430

430431
it('should return user teams successfully', async () => {
431-
const userTeams = [
432+
const userTeamsWithRoles = [
432433
{
433434
id: 'team-1',
434435
name: 'Team 1',
435436
slug: 'team-1',
436437
description: 'First team',
437438
owner_id: 'user-123',
439+
is_default: false,
438440
created_at: new Date(),
439441
updated_at: new Date(),
442+
role: 'team_admin',
443+
is_admin: true,
444+
is_owner: true,
445+
member_count: 2,
440446
},
441447
{
442448
id: 'team-2',
443449
name: 'Team 2',
444450
slug: 'team-2',
445451
description: 'Second team',
446452
owner_id: 'user-456',
453+
is_default: false,
447454
created_at: new Date(),
448455
updated_at: new Date(),
456+
role: 'team_user',
457+
is_admin: false,
458+
is_owner: false,
459+
member_count: 3,
449460
},
450461
];
451462

452-
const memberships = [
453-
{ role: 'team_admin' },
454-
{ role: 'team_user' },
455-
];
456-
457-
mockTeamService.getUserTeams.mockResolvedValue(userTeams);
458-
mockTeamService.getTeamMembership
459-
.mockResolvedValueOnce(memberships[0])
460-
.mockResolvedValueOnce(memberships[1]);
463+
mockTeamService.getUserTeamsWithRoles.mockResolvedValue(userTeamsWithRoles);
461464

462465
const handler = routeHandlers['GET /teams/me'];
463466
await handler(mockRequest, mockReply);
464467

465-
expect(mockTeamService.getUserTeams).toHaveBeenCalledWith('user-123');
466-
expect(mockTeamService.getTeamMembership).toHaveBeenCalledTimes(2);
467-
expect(mockTeamService.getTeamMembership).toHaveBeenCalledWith('team-1', 'user-123');
468-
expect(mockTeamService.getTeamMembership).toHaveBeenCalledWith('team-2', 'user-123');
468+
expect(mockTeamService.getUserTeamsWithRoles).toHaveBeenCalledWith('user-123');
469469

470470
expect(mockReply.status).toHaveBeenCalledWith(200);
471471
expect(mockReply.send).toHaveBeenCalledWith({
472472
success: true,
473-
data: [
474-
{ ...userTeams[0], role: 'team_admin' },
475-
{ ...userTeams[1], role: 'team_user' },
476-
],
473+
data: userTeamsWithRoles,
477474
});
478475
});
479476

@@ -491,12 +488,12 @@ describe('Teams Route', () => {
491488
});
492489

493490
it('should return empty array when user has no teams', async () => {
494-
mockTeamService.getUserTeams.mockResolvedValue([]);
491+
mockTeamService.getUserTeamsWithRoles.mockResolvedValue([]);
495492

496493
const handler = routeHandlers['GET /teams/me'];
497494
await handler(mockRequest, mockReply);
498495

499-
expect(mockTeamService.getUserTeams).toHaveBeenCalledWith('user-123');
496+
expect(mockTeamService.getUserTeamsWithRoles).toHaveBeenCalledWith('user-123');
500497
expect(mockReply.status).toHaveBeenCalledWith(200);
501498
expect(mockReply.send).toHaveBeenCalledWith({
502499
success: true,
@@ -505,35 +502,37 @@ describe('Teams Route', () => {
505502
});
506503

507504
it('should handle teams with no membership (default to team_user)', async () => {
508-
const userTeams = [
505+
const userTeamsWithRoles = [
509506
{
510507
id: 'team-1',
511508
name: 'Team 1',
512509
slug: 'team-1',
513510
description: 'First team',
514511
owner_id: 'user-123',
512+
is_default: false,
515513
created_at: new Date(),
516514
updated_at: new Date(),
515+
role: 'team_user',
516+
is_admin: false,
517+
is_owner: true,
518+
member_count: 1,
517519
},
518520
];
519521

520-
mockTeamService.getUserTeams.mockResolvedValue(userTeams);
521-
mockTeamService.getTeamMembership.mockResolvedValue(null);
522+
mockTeamService.getUserTeamsWithRoles.mockResolvedValue(userTeamsWithRoles);
522523

523524
const handler = routeHandlers['GET /teams/me'];
524525
await handler(mockRequest, mockReply);
525526

526527
expect(mockReply.status).toHaveBeenCalledWith(200);
527528
expect(mockReply.send).toHaveBeenCalledWith({
528529
success: true,
529-
data: [
530-
{ ...userTeams[0], role: 'team_user' },
531-
],
530+
data: userTeamsWithRoles,
532531
});
533532
});
534533

535534
it('should handle internal server errors', async () => {
536-
mockTeamService.getUserTeams.mockRejectedValue(new Error('Database error'));
535+
mockTeamService.getUserTeamsWithRoles.mockRejectedValue(new Error('Database error'));
537536

538537
const handler = routeHandlers['GET /teams/me'];
539538
await handler(mockRequest, mockReply);
@@ -547,20 +546,7 @@ describe('Teams Route', () => {
547546
});
548547

549548
it('should handle membership lookup errors gracefully', async () => {
550-
const userTeams = [
551-
{
552-
id: 'team-1',
553-
name: 'Team 1',
554-
slug: 'team-1',
555-
description: 'First team',
556-
owner_id: 'user-123',
557-
created_at: new Date(),
558-
updated_at: new Date(),
559-
},
560-
];
561-
562-
mockTeamService.getUserTeams.mockResolvedValue(userTeams);
563-
mockTeamService.getTeamMembership.mockRejectedValue(new Error('Membership lookup failed'));
549+
mockTeamService.getUserTeamsWithRoles.mockRejectedValue(new Error('Membership lookup failed'));
564550

565551
const handler = routeHandlers['GET /teams/me'];
566552
await handler(mockRequest, mockReply);

0 commit comments

Comments
 (0)