74 lines
2.2 KiB
TypeScript
74 lines
2.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
isGithubShorthand,
|
|
isGithubUrl,
|
|
isHttpUrl,
|
|
normalizeGithubImportSource,
|
|
} from "../commands/client/company.js";
|
|
|
|
describe("isHttpUrl", () => {
|
|
it("matches http URLs", () => {
|
|
expect(isHttpUrl("http://example.com/foo")).toBe(true);
|
|
});
|
|
|
|
it("matches https URLs", () => {
|
|
expect(isHttpUrl("https://example.com/foo")).toBe(true);
|
|
});
|
|
|
|
it("rejects local paths", () => {
|
|
expect(isHttpUrl("/tmp/my-company")).toBe(false);
|
|
expect(isHttpUrl("./relative")).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("isGithubUrl", () => {
|
|
it("matches GitHub URLs", () => {
|
|
expect(isGithubUrl("https://github.com/org/repo")).toBe(true);
|
|
});
|
|
|
|
it("rejects non-GitHub HTTP URLs", () => {
|
|
expect(isGithubUrl("https://example.com/foo")).toBe(false);
|
|
});
|
|
|
|
it("rejects local paths", () => {
|
|
expect(isGithubUrl("/tmp/my-company")).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("isGithubShorthand", () => {
|
|
it("matches owner/repo/path shorthands", () => {
|
|
expect(isGithubShorthand("paperclipai/companies/gstack")).toBe(true);
|
|
expect(isGithubShorthand("paperclipai/companies")).toBe(true);
|
|
});
|
|
|
|
it("rejects local-looking paths", () => {
|
|
expect(isGithubShorthand("./exports/acme")).toBe(false);
|
|
expect(isGithubShorthand("/tmp/acme")).toBe(false);
|
|
expect(isGithubShorthand("C:\\temp\\acme")).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("normalizeGithubImportSource", () => {
|
|
it("normalizes shorthand imports to canonical GitHub sources", () => {
|
|
expect(normalizeGithubImportSource("paperclipai/companies/gstack")).toBe(
|
|
"https://github.com/paperclipai/companies?ref=main&path=gstack",
|
|
);
|
|
});
|
|
|
|
it("applies --ref to shorthand imports", () => {
|
|
expect(normalizeGithubImportSource("paperclipai/companies/gstack", "feature/demo")).toBe(
|
|
"https://github.com/paperclipai/companies?ref=feature%2Fdemo&path=gstack",
|
|
);
|
|
});
|
|
|
|
it("applies --ref to existing GitHub tree URLs without losing the package path", () => {
|
|
expect(
|
|
normalizeGithubImportSource(
|
|
"https://github.com/paperclipai/companies/tree/main/gstack",
|
|
"release/2026-03-23",
|
|
),
|
|
).toBe(
|
|
"https://github.com/paperclipai/companies?ref=release%2F2026-03-23&path=gstack",
|
|
);
|
|
});
|
|
});
|