import { z } from "zod"; import NatsAdaptor from "../src/adaptors/nats.ts"; import { Message } from "../src/messages.ts"; import Service from "../src/service.ts"; import { assertEquals, assertThrows } from "std/assert/mod.ts"; import { afterEach, beforeEach, it } from "std/testing/bdd.ts"; let srv!: Service; const natsServer = "127.0.0.1:4222"; const serviceName = "test-service"; const adaptorName = "nats"; const subject = "test"; beforeEach(() => { srv = new Service(serviceName); }); afterEach(async () => { await srv.stop(); }); it("request success", async () => { const dataExpected = "hello success"; const statusCodeExpected = 200; srv.addAdaptor(adaptorName, new NatsAdaptor({ servers: [natsServer] })); srv.subscribe(adaptorName, subject, async (msg) => { return { data: msg.data, statusCode: statusCodeExpected }; }, z.string()); await srv.listen(); const res = await srv.request(adaptorName, { service: serviceName, subject: subject, data: dataExpected, }, z.string()); assertEquals(res.data, dataExpected); assertEquals(res.statusCode, statusCodeExpected); }); it("request error", async () => { const dataExpected = "hello error"; const statusCodeExpected = 500; srv.addAdaptor(adaptorName, new NatsAdaptor({ servers: [natsServer] })); srv.subscribe(adaptorName, subject, async (msg) => { return { data: msg.data, statusCode: statusCodeExpected }; }, z.string()); await srv.listen(); assertThrows(async () => { await srv.request(adaptorName, { service: serviceName, subject: subject, data: dataExpected, }); }); }); it("request adaptor not found", async () => { const dataExpected = "hello success"; const statusCodeExpected = 200; srv.addAdaptor(adaptorName, new NatsAdaptor({ servers: [natsServer] })); srv.subscribe(adaptorName, subject, async (msg) => { return { data: msg.data, statusCode: statusCodeExpected }; }); await srv.listen(); assertThrows(async () => { await srv.request("bad adaptor", { service: serviceName, subject: subject, data: dataExpected, }); }); });