import { describe, it, expect } from "bun:test";
describe("import-bulk — helper exports", () => {
it("exports importOneRepo + sanitizeRepoName + scrubSecrets", async () => {
const helper = await import("../lib/import-helper");
expect(typeof helper.importOneRepo).toBe("function");
expect(typeof helper.sanitizeRepoName).toBe("function");
expect(typeof helper.scrubSecrets).toBe("function");
expect(typeof helper.buildCloneUrl).toBe("function");
expect(typeof helper.parseGithubUrl).toBe("function");
});
it("scrubSecrets redacts token + embedded-creds URL", async () => {
const { scrubSecrets } = await import("../lib/import-helper");
const token = "ghp_abc123secret";
const msg = `fatal: could not read from https://${token}@github.com/foo/bar.git (token=${token})`;
const out = scrubSecrets(msg, token);
expect(out).not.toContain(token);
expect(out).toContain("***");
});
it("scrubSecrets also redacts https://<creds>@github.com form without a token arg", async () => {
const { scrubSecrets } = await import("../lib/import-helper");
const out = scrubSecrets(
"remote: fatal https://someleak@github.com/x/y.git",
null
);
expect(out).toContain("***@github.com");
expect(out).not.toContain("someleak");
});
it("buildCloneUrl injects the token only when provided", async () => {
const { buildCloneUrl } = await import("../lib/import-helper");
expect(buildCloneUrl("https://github.com/a/b.git", null)).toBe(
"https://github.com/a/b.git"
);
expect(buildCloneUrl("https://github.com/a/b.git", "tok")).toBe(
"https://tok@github.com/a/b.git"
);
});
});
describe("import-bulk — route smoke (auth gate)", () => {
it("GET /import/bulk without auth → 302 /login", async () => {
let mod: any;
try {
mod = await import("../routes/import-bulk");
} catch {
return;
}
const res = await mod.default.request("/import/bulk");
expect(res.status).toBe(302);
expect(res.headers.get("location") || "").toMatch(/^\/login/);
});
it("POST /import/bulk without auth → 302 /login", async () => {
let mod: any;
try {
mod = await import("../routes/import-bulk");
} catch {
return;
}
const res = await mod.default.request("/import/bulk", {
method: "POST",
body: new URLSearchParams({ githubOrg: "x", githubToken: "y" }),
headers: { "content-type": "application/x-www-form-urlencoded" },
});
expect(res.status).toBe(302);
expect(res.headers.get("location") || "").toMatch(/^\/login/);
});
});
|