Files
gridpilot.gg/apps/website/lib/view-models/DriverViewModel.test.ts
2026-01-24 01:25:46 +01:00

139 lines
3.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import type { DriverData } from "../view-data/LeagueStandingsViewData";
import { DriverViewModel } from "./DriverViewModel";
describe("DriverViewModel", () => {
it("should create instance with all properties", () => {
const viewData: DriverData = {
id: "driver-123",
name: "John Doe",
avatarUrl: "https://example.com/avatar.jpg",
iracingId: "iracing-456",
rating: 1500,
country: "US",
};
const viewModel = new DriverViewModel(viewData);
expect(viewModel.id).toBe("driver-123");
expect(viewModel.name).toBe("John Doe");
expect(viewModel.avatarUrl).toBe("https://example.com/avatar.jpg");
expect(viewModel.iracingId).toBe("iracing-456");
expect(viewModel.rating).toBe(1500);
expect(viewModel.country).toBe("US");
});
it("should create instance with only required properties", () => {
const viewData: DriverData = {
id: "driver-123",
name: "John Doe",
avatarUrl: null,
};
const viewModel = new DriverViewModel(viewData);
expect(viewModel.id).toBe("driver-123");
expect(viewModel.name).toBe("John Doe");
expect(viewModel.avatarUrl).toBeNull();
expect(viewModel.iracingId).toBeUndefined();
expect(viewModel.rating).toBeUndefined();
expect(viewModel.country).toBeUndefined();
});
it("should return true for hasIracingId when iracingId exists", () => {
const viewData: DriverData = {
id: "driver-123",
name: "John Doe",
avatarUrl: null,
iracingId: "iracing-456",
};
const viewModel = new DriverViewModel(viewData);
expect(viewModel.hasIracingId).toBe(true);
});
it("should return false for hasIracingId when iracingId is undefined", () => {
const viewData: DriverData = {
id: "driver-123",
name: "John Doe",
avatarUrl: null,
};
const viewModel = new DriverViewModel(viewData);
expect(viewModel.hasIracingId).toBe(false);
});
it("should return false for hasIracingId when iracingId is empty string", () => {
const viewData: DriverData = {
id: "driver-123",
name: "John Doe",
avatarUrl: null,
iracingId: "",
};
const viewModel = new DriverViewModel(viewData);
expect(viewModel.hasIracingId).toBe(false);
});
it("should format rating correctly when rating exists", () => {
const viewData: DriverData = {
id: "driver-123",
name: "John Doe",
avatarUrl: null,
rating: 1547.89,
};
const viewModel = new DriverViewModel(viewData);
expect(viewModel.formattedRating).toBe("1548");
});
it("should return \"Unrated\" when rating is undefined", () => {
const viewData: DriverData = {
id: "driver-123",
name: "John Doe",
avatarUrl: null,
};
const viewModel = new DriverViewModel(viewData);
expect(viewModel.formattedRating).toBe("Unrated");
});
it("should handle zero rating", () => {
const viewData: DriverData = {
id: "driver-123",
name: "John Doe",
avatarUrl: null,
rating: 0,
};
const viewModel = new DriverViewModel(viewData);
expect(viewModel.formattedRating).toBe("Unrated");
});
it("should round rating to nearest integer", () => {
const viewData1: DriverData = {
id: "driver-123",
name: "John Doe",
avatarUrl: null,
rating: 1500.4,
};
const viewData2: DriverData = {
id: "driver-123",
name: "John Doe",
avatarUrl: null,
rating: 1500.6,
};
const viewModel1 = new DriverViewModel(viewData1);
const viewModel2 = new DriverViewModel(viewData2);
expect(viewModel1.formattedRating).toBe("1500");
expect(viewModel2.formattedRating).toBe("1501");
});
});