import { afterEach, describe, expect, mock, test } from "bun:test";
const fakeEnv: Record<string, string | undefined> = {};
mock.module("cloudflare:workers", () => ({ env: fakeEnv, waitUntil: () => undefined }));
mock.module("./db", () => ({ first: async () => ({ kind: "org" }) }));
const { analyticsConfig, captureServerEvent } = await import("./analytics");
const { handleIngestProxy, ingestPath, ingestTarget, ingestUpstream } = await import("./analytics-proxy");
const { scrubErrorMessage } = await import("~/lib/scrub-error");
const PROD = { POSTHOG_KEY: "phc_abc123", PUBLIC_URL: "https://gitfor.dev" };
afterEach(() => {
for (const key of Object.keys(fakeEnv)) delete fakeEnv[key];
});
describe("analyticsConfig environments", () => {
test("on in production", () => {
Object.assign(fakeEnv, PROD);
expect(analyticsConfig()).toEqual({ key: "phc_abc123", host: "https://us.i.posthog.com" });
});
test("off in local dev, on loopback and in named non-production environments", () => {
Object.assign(fakeEnv, PROD, { GITFOR_LOCAL: "true" });
expect(analyticsConfig()).toBeNull();
Object.assign(fakeEnv, PROD, { GITFOR_LOCAL: undefined, PUBLIC_URL: "http://localhost:3000" });
expect(analyticsConfig()).toBeNull();
Object.assign(fakeEnv, PROD, { GITFOR_ENV: "staging" });
expect(analyticsConfig()).toBeNull();
fakeEnv.GITFOR_ENV = "production";
expect(analyticsConfig()).not.toBeNull();
});
});
describe("captureServerEvent", () => {
test("org-owned events carry $groups", async () => {
Object.assign(fakeEnv, PROD);
const bodies: string[] = [];
const original = globalThis.fetch;
globalThis.fetch = (async (_url: string, init: RequestInit) => {