66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
cloudEventSchema,
|
|
velocityAccessRequestSchema,
|
|
velocityAccessResponseSchema,
|
|
velocityConnectionRequestSchema,
|
|
} from "../src/index";
|
|
|
|
describe("shared service contracts", () => {
|
|
it("accepts a game login event in CloudEvents format", () => {
|
|
const event = cloudEventSchema.parse({
|
|
id: "8cf5b035-4368-4fa8-b9bb-2835da752f20",
|
|
specversion: "1.0",
|
|
source: "/velocity/main",
|
|
type: "games.minecraft.account-manager.game.login.allowed",
|
|
subject: "minecraft-account/8667ba71b85a4004af54457a9734eed7",
|
|
time: "2026-03-06T12:00:00.000Z",
|
|
datacontenttype: "application/json",
|
|
data: { username: "Notch" },
|
|
});
|
|
|
|
expect(event.specversion).toBe("1.0");
|
|
});
|
|
|
|
it("requires Velocity to send a Java UUID, username, and IP address", () => {
|
|
const request = velocityAccessRequestSchema.parse({
|
|
requestId: "6f1fd065-5298-42fa-b1ad-87a8916c6a8a",
|
|
serverId: "velocity-main",
|
|
minecraftUuid: "069a79f444e94726a5befca90e38aaf5",
|
|
username: "Notch",
|
|
ipAddress: "203.0.113.10",
|
|
occurredAt: "2026-03-06T12:00:00.000Z",
|
|
});
|
|
|
|
expect(request.username).toBe("Notch");
|
|
expect(() =>
|
|
velocityAccessRequestSchema.parse({ ...request, minecraftUuid: "not-a-uuid" }),
|
|
).toThrow();
|
|
});
|
|
|
|
it("validates a confirmed Velocity connection report", () => {
|
|
const request = velocityConnectionRequestSchema.parse({
|
|
requestId: "8dd9dbdc-020a-4077-983c-77747522de8f",
|
|
serverId: "velocity-main",
|
|
minecraftUuid: "069a79f444e94726a5befca90e38aaf5",
|
|
username: "Notch",
|
|
occurredAt: "2026-03-06T12:00:01.000Z",
|
|
});
|
|
|
|
expect(request.username).toBe("Notch");
|
|
expect(() => velocityConnectionRequestSchema.parse({ ...request, username: "bad name" })).toThrow();
|
|
});
|
|
|
|
it("only returns explicit allow or deny decisions to Velocity", () => {
|
|
expect(
|
|
velocityAccessResponseSchema.parse({
|
|
allowed: false,
|
|
message: "Please register your Minecraft account before joining.",
|
|
}),
|
|
).toEqual({
|
|
allowed: false,
|
|
message: "Please register your Minecraft account before joining.",
|
|
});
|
|
});
|
|
});
|