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"); }); });