60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import { DriverTeamViewModel } from "./DriverTeamViewModel";
|
|
import type { TeamDetailData } from "../view-data/TeamDetailViewData";
|
|
|
|
const createTeamViewData = (overrides: Partial<TeamDetailData> = {}): TeamDetailData => ({
|
|
id: "team-1",
|
|
name: "Test Team",
|
|
tag: "TT",
|
|
ownerId: "owner-1",
|
|
leagues: ["league-1"],
|
|
canManage: true,
|
|
membership: {
|
|
role: "manager",
|
|
joinedAt: "2024-01-01T00:00:00Z",
|
|
isActive: true,
|
|
},
|
|
...overrides,
|
|
});
|
|
|
|
describe("DriverTeamViewModel", () => {
|
|
it("exposes team fields from ViewData", () => {
|
|
const viewData = createTeamViewData();
|
|
const viewModel = new DriverTeamViewModel(viewData);
|
|
|
|
expect(viewModel.teamId).toBe("team-1");
|
|
expect(viewModel.teamName).toBe("Test Team");
|
|
expect(viewModel.tag).toBe("TT");
|
|
expect(viewModel.role).toBe("manager");
|
|
expect(viewModel.isOwner).toBe(false);
|
|
expect(viewModel.canManage).toBe(true);
|
|
});
|
|
|
|
it("derives displayRole with capitalized first letter", () => {
|
|
const viewData = createTeamViewData({
|
|
membership: {
|
|
role: "owner",
|
|
joinedAt: "2024-01-01T00:00:00Z",
|
|
isActive: true,
|
|
},
|
|
});
|
|
|
|
const viewModel = new DriverTeamViewModel(viewData);
|
|
|
|
expect(viewModel.displayRole).toBe("Owner");
|
|
expect(viewModel.isOwner).toBe(true);
|
|
});
|
|
|
|
it("defaults role when membership is missing", () => {
|
|
const viewData = createTeamViewData({
|
|
membership: null,
|
|
});
|
|
|
|
const viewModel = new DriverTeamViewModel(viewData);
|
|
|
|
expect(viewModel.role).toBe("member");
|
|
expect(viewModel.displayRole).toBe("Member");
|
|
expect(viewModel.isOwner).toBe(false);
|
|
});
|
|
});
|