97 lines
3.2 KiB
TypeScript
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);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|