Ctrl K
ComunidadGuías…

tests/support/sandbox-resolution-fixture.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { afterAll, afterEach, beforeAll, beforeEach } from "vitest";

type RunningSandbox = {
  id: string;
  status?: string;
  persistent?: boolean;
  last_boot_error?: string | null;
};
export const OWNED_REPO_ID = "00000000-0000-4000-8000-000000000001";

let supabaseAdmin: typeof import("@/lib/supabase/admin").supabaseAdmin;
let originalFrom: typeof supabaseAdmin.from;
const originalFetch = global.fetch;
const originalSecret = process.env.INTERNAL_API_SECRET;
const originalSupabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL;
const originalServiceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY;

export function installSandboxRows(
  running: RunningSandbox[],
  repoLookup?: { id: string } | null,
  repoLookupError: { message: string } | null = null
) {
  const resolvedRepoLookup =
    repoLookup === undefined ? { id: OWNED_REPO_ID } : repoLookup;
  let status: string | undefined;
  const rows = () =>
    running
      .filter((row) => !status || (row.status ?? "running") === status)
      .map((row) => ({ status: "running", persistent: true, ...row }));
  const sandboxQuery = {
    select: () => sandboxQuery,
    eq: (column: string, value: string) => {
      if (column === "status") status = value;
      return sandboxQuery;
    },
    order: async () => ({ data: running, error: null }),
    limit: async () => ({ data: running, error: null }),
    maybeSingle: async () => ({ data: rows()[0] ?? null, error: null }),
  };
  const repoQuery = {
    select: () => repoQuery,
    eq: () => repoQuery,
    maybeSingle: async () => ({
      data: resolvedRepoLookup,
      error: repoLookupError,
    }),
  };
  Object.defineProperty(supabaseAdmin, "from", {
    configurable: true,
    writable: true,
    value: (table: string) =>
      table === "sandboxes" ? sandboxQuery : repoQuery,
  });
}

beforeAll(async () => {
  process.env.NEXT_PUBLIC_SUPABASE_URL = "https://example.supabase.co";
  process.env.SUPABASE_SERVICE_ROLE_KEY = "test-service-role-key";
  ({ supabaseAdmin } = await import("@/lib/supabase/admin"));
  originalFrom = supabaseAdmin.from.bind(supabaseAdmin);
});

afterAll(() => {
  if (originalSupabaseUrl === undefined)
    delete process.env.NEXT_PUBLIC_SUPABASE_URL;
  else process.env.NEXT_PUBLIC_SUPABASE_URL = originalSupabaseUrl;
  if (originalServiceRoleKey === undefined)
    delete process.env.SUPABASE_SERVICE_ROLE_KEY;
  else process.env.SUPABASE_SERVICE_ROLE_KEY = originalServiceRoleKey;
});

beforeEach(() => {
  process.env.INTERNAL_API_SECRET = "internal-secret";
  installSandboxRows([]);
});

afterEach(() => {
  Object.defineProperty(supabaseAdmin, "from", {
    configurable: true,
    writable: true,
    value: originalFrom,
  });
  Object.defineProperty(global, "fetch", {
    configurable: true,
    writable: true,
    value: originalFetch,
  });
  if (originalSecret === undefined) delete process.env.INTERNAL_API_SECRET;
  else process.env.INTERNAL_API_SECRET = originalSecret;
});