Files
Ota-dashboard/lib/api.test.ts
2025-12-12 12:21:03 +01:00

97 lines
3.2 KiB
TypeScript

import { expect, test, describe } from "bun:test";
import { VehicleSchema, VehicleGroupSchema, FirmwareUpdateSchema, DeploymentSchema } from "./api";
describe("Schema Validation", () => {
describe("VehicleSchema", () => {
test("should validate valid vehicle object", () => {
const validVehicle = {
vin: "TEST12345",
status: "Online",
currentVersion: "1.0.0",
lastHeartbeat: "2023-01-01T12:00:00Z",
groupId: 1,
group: {
id: 1,
name: "Test Group"
}
};
const result = VehicleSchema.safeParse(validVehicle);
expect(result.success).toBe(true);
});
test("should fail on missing required fields", () => {
const invalidVehicle = {
vin: "TEST12345",
// status missing
currentVersion: "1.0.0"
};
const result = VehicleSchema.safeParse(invalidVehicle);
expect(result.success).toBe(false);
});
test("should allow null/optional fields", () => {
const vehicleWithoutGroup = {
vin: "TEST_NO_GROUP",
status: "Offline",
currentVersion: "2.0",
lastHeartbeat: "2023-01-01T10:00:00Z",
groupId: null,
group: null
};
const result = VehicleSchema.safeParse(vehicleWithoutGroup);
expect(result.success).toBe(true);
});
});
describe("VehicleGroupSchema", () => {
test("should validate valid group", () => {
const validGroup = {
id: 10,
name: "Production",
description: "Main fleet",
vehicles: []
};
const result = VehicleGroupSchema.safeParse(validGroup);
expect(result.success).toBe(true);
});
test("should fail with invalid types", () => {
const invalidGroup = {
id: "should be number",
name: "Test"
};
const result = VehicleGroupSchema.safeParse(invalidGroup);
expect(result.success).toBe(false);
});
});
describe("FirmwareUpdateSchema", () => {
test("should validate update object", () => {
const update = {
id: 5,
version: "1.2.3",
uploadedAt: "2023-10-10",
description: "Security Patch"
};
expect(FirmwareUpdateSchema.safeParse(update).success).toBe(true);
});
});
describe("DeploymentSchema", () => {
test("should validate deployment", () => {
const deployment = {
id: 1,
updateId: 5,
status: "Pending",
createdAt: "2023-10-11",
update: {
id: 5,
version: "1.2.3",
uploadedAt: "2023-10-10"
}
};
expect(DeploymentSchema.safeParse(deployment).success).toBe(true);
});
});
});