Files
webstudio/apps/builder/app/shared/context.server.test.ts

101 lines
2.4 KiB
TypeScript

import { beforeEach, describe, expect, test, vi } from "vitest";
const env = vi.hoisted(() => ({
TRPC_SERVER_API_TOKEN: undefined as string | undefined,
POSTGREST_URL: "http://localhost:3000",
POSTGREST_API_KEY: "",
PUBLISHER_HOST: "wstd.work",
}));
const authenticator = vi.hoisted(() => ({
isAuthenticated: vi.fn(),
}));
const builderAuthenticator = vi.hoisted(() => ({
isAuthenticated: vi.fn(),
}));
const isBuilder = vi.hoisted(() => vi.fn(() => false));
const isCanvas = vi.hoisted(() => vi.fn(() => false));
vi.mock("~/env/env.server", () => ({
default: env,
}));
vi.mock("~/env/env.static.server", () => ({
staticEnv: {},
}));
vi.mock("~/services/auth.server", () => ({
authenticator,
}));
vi.mock("~/services/builder-auth.server", () => ({
builderAuthenticator,
}));
vi.mock("~/services/trpc.server", () => ({
trpcSharedClient: {
domain: {},
deployment: {},
},
}));
vi.mock("~/shared/entri/entri-api.server", () => ({
entryApi: {},
}));
vi.mock("@webstudio-is/plans", () => ({
defaultPlanFeatures: {},
}));
vi.mock("@webstudio-is/plans/index.server", () => ({
getAuthorizationOwnerId: vi.fn(),
getPlanInfo: vi.fn(),
}));
vi.mock("@webstudio-is/postgrest/index.server", () => ({
createClient: vi.fn(),
}));
vi.mock("~/services/session.server", () => ({
readLoginSessionBloomFilter: vi.fn(),
}));
vi.mock("./router-utils", () => ({
isBuilder,
isCanvas,
}));
import { extractAuthFromRequest } from "./context.server";
describe("extractAuthFromRequest", () => {
beforeEach(() => {
env.TRPC_SERVER_API_TOKEN = undefined;
authenticator.isAuthenticated.mockResolvedValue(undefined);
builderAuthenticator.isAuthenticated.mockResolvedValue(undefined);
isBuilder.mockReturnValue(false);
isCanvas.mockReturnValue(false);
});
test("does not treat an empty service token as service authorization", async () => {
env.TRPC_SERVER_API_TOKEN = "";
const request = new Request("https://webstudio.is/trpc", {
headers: { Authorization: "" },
});
const auth = await extractAuthFromRequest(request);
expect(auth.isServiceCall).toBe(false);
});
test("accepts a matching non-empty service token", async () => {
env.TRPC_SERVER_API_TOKEN = "service-token";
const request = new Request("https://webstudio.is/trpc", {
headers: { Authorization: "service-token" },
});
const auth = await extractAuthFromRequest(request);
expect(auth.isServiceCall).toBe(true);
});
});