Files
gridpilot.gg/apps/website/lib/view-models/LeagueMemberViewModel.test.ts
2025-12-20 00:31:31 +01:00

66 lines
2.1 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { LeagueMemberViewModel } from './LeagueMemberViewModel';
import type { LeagueMemberDTO } from '../types/generated/LeagueMemberDTO';
const createLeagueMemberDto = (overrides: Partial<LeagueMemberDTO> = {}): LeagueMemberDTO => ({
driverId: 'driver-1',
leagueId: 'league-1',
joinedAt: '2024-01-01T00:00:00Z',
role: 'member',
...overrides,
});
describe('LeagueMemberViewModel', () => {
it('maps basic fields from DTO and sets defaults', () => {
const dto = createLeagueMemberDto({ driverId: 'driver-123' });
const vm = new LeagueMemberViewModel(dto, 'current-user');
expect(vm.driverId).toBe('driver-123');
expect(vm.role).toBe('member');
expect(typeof vm.joinedAt).toBe('string');
});
it('computes formattedJoinedAt as a localized date string', () => {
const dto = createLeagueMemberDto({ joinedAt: '2024-01-01T00:00:00Z' });
const vm = new LeagueMemberViewModel(dto, 'current-user');
const formatted = vm.formattedJoinedAt;
expect(typeof formatted).toBe('string');
expect(formatted.length).toBeGreaterThan(0);
});
it('derives roleBadgeVariant based on current role value', () => {
const vm = new LeagueMemberViewModel(createLeagueMemberDto(), 'current-user');
vm.role = 'owner';
expect(vm.roleBadgeVariant).toBe('primary');
vm.role = 'admin';
expect(vm.roleBadgeVariant).toBe('secondary');
vm.role = 'member';
expect(vm.roleBadgeVariant).toBe('default');
vm.role = 'something-else' as any;
expect(vm.roleBadgeVariant).toBe('default');
});
it('identifies owner and current user correctly based on role and driverId', () => {
const dto = createLeagueMemberDto({ driverId: 'driver-1' });
const vmForOwner = new LeagueMemberViewModel(dto, 'driver-1');
vmForOwner.role = 'owner';
const vmForAnotherUser = new LeagueMemberViewModel(dto, 'driver-2');
vmForAnotherUser.role = 'owner';
expect(vmForOwner.isOwner).toBe(true);
expect(vmForOwner.isCurrentUser).toBe(true);
expect(vmForAnotherUser.isOwner).toBe(true);
expect(vmForAnotherUser.isCurrentUser).toBe(false);
});
});