55 lines
2.1 KiB
TypeScript
55 lines
2.1 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import { createMskRouter } from "./msk";
|
|
import { type mskService } from "../services/msk";
|
|
|
|
function createService() {
|
|
return {
|
|
listClusters: async () => [{ ClusterName: "orders" }],
|
|
createCluster: async () => ({ ClusterArn: "arn:cluster:orders" }),
|
|
listTopics: async () => [{ name: "orders", partitionCount: 1 }],
|
|
createTopic: async () => {},
|
|
deleteTopic: async () => {},
|
|
produceMessage: async () => [{ topicName: "orders", partition: 0, baseOffset: "0" }],
|
|
peekMessages: async () => [{ value: "hello" }],
|
|
consumerGroupLag: async () => [{ topic: "orders", totalLag: 0, partitions: [] }],
|
|
} as unknown as typeof mskService;
|
|
}
|
|
|
|
describe("msk routes", () => {
|
|
test("serves clusters", async () => {
|
|
const app = createMskRouter(createService());
|
|
|
|
const clusters = await app.request("/clusters");
|
|
expect(clusters.status).toBe(200);
|
|
expect(await clusters.json()).toEqual([{ ClusterName: "orders" }]);
|
|
|
|
});
|
|
|
|
test("serves topic, message, and consumer group operations through the API", async () => {
|
|
const app = createMskRouter(createService());
|
|
|
|
const topic = await app.request("/clusters/cluster-arn/topics");
|
|
expect(await topic.json()).toEqual([{ name: "orders", partitionCount: 1 }]);
|
|
|
|
const create = await app.request("/clusters/cluster-arn/topics", {
|
|
method: "POST",
|
|
headers: { "content-type": "application/json" },
|
|
body: JSON.stringify({ topic: "events" }),
|
|
});
|
|
expect(create.status).toBe(201);
|
|
|
|
const produced = await app.request("/clusters/cluster-arn/topics/orders/messages", {
|
|
method: "POST",
|
|
headers: { "content-type": "application/json" },
|
|
body: JSON.stringify({ value: "hello" }),
|
|
});
|
|
expect(produced.status).toBe(201);
|
|
|
|
const messages = await app.request("/clusters/cluster-arn/topics/orders/messages?limit=1");
|
|
expect(await messages.json()).toEqual([{ value: "hello" }]);
|
|
|
|
const lag = await app.request("/clusters/cluster-arn/consumer-groups/orders-workers/lag");
|
|
expect(await lag.json()).toEqual([{ topic: "orders", totalLag: 0, partitions: [] }]);
|
|
});
|
|
});
|