Enable auth-service/api-gateway on production, build their images in CI
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
import "reflect-metadata";
|
||||
|
||||
describe("AuthProxyController", () => {
|
||||
const originalFetch = global.fetch;
|
||||
let AuthProxyController: typeof import("../src/proxy/auth-proxy.controller").AuthProxyController;
|
||||
|
||||
beforeAll(async () => {
|
||||
// `../src/config.ts` reads this at module-import time, so it must be set
|
||||
// before the dynamic import below, not in a plain top-of-file import.
|
||||
process.env.AUTH_SERVICE_URL = "http://auth-service.test";
|
||||
({ AuthProxyController } = await import("../src/proxy/auth-proxy.controller"));
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
global.fetch = originalFetch;
|
||||
});
|
||||
|
||||
it("forwards method, body, and Authorization header to auth-service and relays the response verbatim", async () => {
|
||||
const mockFetch = jest.fn().mockResolvedValue({
|
||||
status: 201,
|
||||
headers: new Headers({ "content-type": "application/json" }),
|
||||
text: async () => JSON.stringify({ username: "demo", role: "user" }),
|
||||
});
|
||||
global.fetch = mockFetch as unknown as typeof fetch;
|
||||
|
||||
const controller = new AuthProxyController();
|
||||
const req = {
|
||||
method: "POST",
|
||||
originalUrl: "/auth/register",
|
||||
headers: { authorization: "Bearer abc" },
|
||||
body: { username: "demo", password: "1" },
|
||||
} as unknown as import("express").Request;
|
||||
const res = {
|
||||
status: jest.fn().mockReturnThis(),
|
||||
setHeader: jest.fn().mockReturnThis(),
|
||||
send: jest.fn(),
|
||||
} as unknown as import("express").Response;
|
||||
|
||||
await controller.proxy(req, res);
|
||||
|
||||
expect(mockFetch).toHaveBeenCalledWith(
|
||||
"http://auth-service.test/auth/register",
|
||||
expect.objectContaining({
|
||||
method: "POST",
|
||||
headers: expect.objectContaining({ Authorization: "Bearer abc" }),
|
||||
body: JSON.stringify({ username: "demo", password: "1" }),
|
||||
})
|
||||
);
|
||||
expect(res.status).toHaveBeenCalledWith(201);
|
||||
expect(res.send).toHaveBeenCalledWith(JSON.stringify({ username: "demo", role: "user" }));
|
||||
});
|
||||
|
||||
it("sends no body for a GET (e.g. /auth/me)", async () => {
|
||||
const mockFetch = jest.fn().mockResolvedValue({
|
||||
status: 200,
|
||||
headers: new Headers({ "content-type": "application/json" }),
|
||||
text: async () => JSON.stringify({ username: "demo", role: "user" }),
|
||||
});
|
||||
global.fetch = mockFetch as unknown as typeof fetch;
|
||||
|
||||
const controller = new AuthProxyController();
|
||||
const req = {
|
||||
method: "GET",
|
||||
originalUrl: "/auth/me",
|
||||
headers: { authorization: "Bearer abc" },
|
||||
body: {},
|
||||
} as unknown as import("express").Request;
|
||||
const res = {
|
||||
status: jest.fn().mockReturnThis(),
|
||||
setHeader: jest.fn().mockReturnThis(),
|
||||
send: jest.fn(),
|
||||
} as unknown as import("express").Response;
|
||||
|
||||
await controller.proxy(req, res);
|
||||
|
||||
expect(mockFetch).toHaveBeenCalledWith(
|
||||
"http://auth-service.test/auth/me",
|
||||
expect.objectContaining({ method: "GET", body: undefined })
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user