import { describe, it, expect } from 'vitest';
import { DriverSummaryViewModel } from './DriverSummaryViewModel';
import type { GetDriverOutputDTO } from '../types/generated/GetDriverOutputDTO';

const driverDto: GetDriverOutputDTO = {
  id: 'driver-1',
  iracingId: 'ir-123',
  name: 'Test Driver',
  country: 'DE',
  joinedAt: '2024-01-01T00:00:00Z',
};

describe('DriverSummaryViewModel', () => {
  it('maps driver and optional fields from DTO', () => {
    const viewModel = new DriverSummaryViewModel({
      driver: driverDto,
      rating: 2500,
      rank: 10,
    });

    expect(viewModel.driver).toBe(driverDto);
    expect(viewModel.rating).toBe(2500);
    expect(viewModel.rank).toBe(10);
  });

  it('defaults nullable rating and rank when undefined', () => {
    const viewModel = new DriverSummaryViewModel({
      driver: driverDto,
    });

    expect(viewModel.rating).toBeNull();
    expect(viewModel.rank).toBeNull();
  });

  it('keeps explicit null rating and rank', () => {
    const viewModel = new DriverSummaryViewModel({
      driver: driverDto,
      rating: null,
      rank: null,
    });

    expect(viewModel.rating).toBeNull();
    expect(viewModel.rank).toBeNull();
  });
});
