Files
edgeever/apps/extension/github-repo.test.mjs

198 lines
8.7 KiB
JavaScript

import { describe, expect, test } from "bun:test";
import { createWindow } from "@mixmark-io/domino";
import { createContext, runInContext } from "node:vm";
import { bundleTestScripts } from "./bundle-test-scripts.mjs";
import {
cleanRepoDescription,
githubRepoFactsFromSource,
githubRepoNoteMarkdown,
githubRepoNoteTitle,
githubRepoTarget,
readmeLead,
} from "./src/github-repo.ts";
const labels = {
capturedAt: "2026-10-01T00:00:00.000Z",
sourceLabel: "来源",
capturedAtLabel: "抓取时间",
homepageLabel: "主页",
languageLabel: "语言",
licenseLabel: "许可证",
topicsLabel: "话题",
};
const source = (overrides = {}) => ({
pageUrl: "https://github.com/tianma-if/edgeever",
openGraphDescription: "",
embeddedJsonChunks: [],
aboutText: "",
homepage: "",
topics: [],
license: "",
language: "",
readmeParagraphs: [],
...overrides,
});
const sidebarPayload = (overrides = {}) => JSON.stringify({
payload: {
sidebarAbout: {
description: "Open-source, AI-native knowledge base.",
website: "https://edgeever.org",
topics: [{ name: "notes" }, { name: "mcp" }, { name: "notes" }],
ownerLogin: "tianma-if",
repoName: "edgeever",
stargazerCount: 1915,
forksCount: 995,
repo: { license: { spdxId: "AGPL-3.0", name: "GNU Affero General Public License v3.0" } },
...overrides,
},
},
});
describe("github repository addresses", () => {
test("accepts a repository home and a code tree, and ignores other GitHub pages", () => {
expect(githubRepoTarget("https://github.com/tianma-if/edgeever")).toEqual({
owner: "tianma-if",
name: "edgeever",
canonicalUrl: "https://github.com/tianma-if/edgeever",
});
expect(githubRepoTarget("https://www.github.com/tianma-if/edgeever/?tab=readme-ov-file#readme")?.canonicalUrl)
.toBe("https://github.com/tianma-if/edgeever");
expect(githubRepoTarget("https://github.com/tianma-if/edgeever/tree/main")?.canonicalUrl)
.toBe("https://github.com/tianma-if/edgeever");
expect(githubRepoTarget("https://github.com/tianma-if/edgeever/tree/release/1.0/apps")?.canonicalUrl)
.toBe("https://github.com/tianma-if/edgeever");
expect(githubRepoTarget("https://github.com/tianma-if/edgeever/issues/12")).toBeNull();
expect(githubRepoTarget("https://github.com/tianma-if/edgeever/pull/4")).toBeNull();
expect(githubRepoTarget("https://github.com/tianma-if/edgeever/blob/main/README.md")).toBeNull();
expect(githubRepoTarget("https://github.com/tianma-if/edgeever/tree")).toBeNull();
expect(githubRepoTarget("https://github.com/tianma-if")).toBeNull();
expect(githubRepoTarget("https://gist.github.com/tianma-if/edgeever")).toBeNull();
expect(githubRepoTarget("https://example.com/tianma-if/edgeever")).toBeNull();
});
});
describe("github repository card", () => {
test("captures rendered repository facts when initial JSON is missing or too large", () => {
const [script] = bundleTestScripts(["capture-github"]);
for (const json of ["", JSON.stringify({ ownerLogin: "tianma-if", readme: "x".repeat(500_000) })]) {
const window = createWindow(`
<meta name="octolytics-dimension-repository_nwo" content="tianma-if/edgeever">
<script type="application/json">${json}</script>
<div class="sidebarSection__oqw6Y8">
<h2>About</h2><p class="description__ej4leF">A portable notes workspace.</p>
<div class="websiteRow__c4vvco"><a href="https://edgeever.org">edgeever.org</a></div>
<a href="/topics/notes">notes</a>
<a href="#license"><svg class="octicon-law"></svg>AGPL-3.0 license</a>
</div>`, "https://github.com/tianma-if/edgeever/tree/main");
Object.getPrototypeOf(window.document.querySelectorAll("span"))[Symbol.iterator] ??= Array.prototype[Symbol.iterator];
let result;
runInContext(script, createContext({
document: window.document,
location: window.location,
__edgeeverGithubClipPayload: { requestId: "regression" },
chrome: { runtime: { sendMessage: (message) => { result = message.result; } } },
}));
expect(result?.ok).toBe(true);
expect(result.source.embeddedJsonChunks).toEqual([]);
expect(githubRepoFactsFromSource(result.source)).toMatchObject({
owner: "tianma-if", name: "edgeever", intro: "A portable notes workspace.",
homepage: "https://edgeever.org/", topics: ["notes"], license: "AGPL-3.0",
});
expect(githubRepoFactsFromSource({ ...result.source, repositoryNwo: "other/repo" })).toBeNull();
expect(githubRepoFactsFromSource({ ...result.source, repositoryNwo: undefined })).toBeNull();
expect(githubRepoFactsFromSource({ ...result.source, pageUrl: "https://github.com/features/copilot" })).toBeNull();
}
});
test("drops GitHub's generated description and the repository suffix", () => {
expect(cleanRepoDescription(
"Open-source notes. - tianma-if/edgeever",
"tianma-if",
"edgeever",
)).toBe("Open-source notes.");
expect(cleanRepoDescription(
"Open-source notes &amp; sync. - edgeever/apps at main · tianma-if/edgeever",
"tianma-if",
"edgeever",
)).toBe("Open-source notes & sync.");
expect(cleanRepoDescription(
"Contribute to tianma-if/edgeever development by creating an account on GitHub.",
"tianma-if",
"edgeever",
)).toBe("");
});
test("uses the first real README paragraph when the about text is empty", () => {
expect(readmeLead(["", "ok", "This is the project introduction."])).toBe("This is the project introduction.");
expect(readmeLead(["字".repeat(900)]).endsWith("…")).toBe(true);
expect(readmeLead(["字".repeat(900)]).length).toBe(801);
});
test("builds a card from the repository payload and leaves out live counters", () => {
const facts = githubRepoFactsFromSource(source({
pageUrl: "https://github.com/Tianma-IF/EdgeEver/tree/main/apps",
openGraphDescription: "Open-source, AI-native knowledge base. - tianma-if/edgeever",
embeddedJsonChunks: [sidebarPayload()],
language: "TypeScript 62.1%",
topics: ["notes", "sqlite"],
}));
expect(facts).toMatchObject({
owner: "tianma-if",
name: "edgeever",
canonicalUrl: "https://github.com/tianma-if/edgeever",
intro: "Open-source, AI-native knowledge base.",
homepage: "https://edgeever.org/",
language: "TypeScript",
license: "AGPL-3.0",
topics: ["notes", "mcp", "sqlite"],
});
const markdown = githubRepoNoteMarkdown({ ...facts, ...labels });
expect(githubRepoNoteTitle(facts.owner, facts.name)).toBe("tianma-if/edgeever");
expect(markdown.startsWith("Open-source, AI-native knowledge base.")).toBe(true);
expect(markdown).toContain("主页: [edgeever.org](https://edgeever.org/)");
expect(markdown).toContain("语言: TypeScript");
expect(markdown).toContain("许可证: AGPL-3.0");
expect(markdown).toContain("话题: notes, mcp, sqlite");
expect(markdown).toContain("[https://github.com/tianma-if/edgeever](https://github.com/tianma-if/edgeever)");
expect(markdown).toContain("抓取时间: 2026-10-01T00:00:00.000Z");
expect(markdown).not.toContain("1915");
expect(markdown).not.toContain("995");
});
test("reads a code tree that only identifies the repository, then uses the README lead", () => {
const facts = githubRepoFactsFromSource(source({
pageUrl: "https://github.com/tianma-if/edgeever/tree/main",
openGraphDescription: "Contribute to tianma-if/edgeever development by creating an account on GitHub.",
embeddedJsonChunks: [JSON.stringify({
payload: {
codeViewLayoutRoute: {
repo: { ownerLogin: "tianma-if", name: "edgeever", defaultBranch: "main" },
},
},
})],
readmeParagraphs: ["Go", "A portable notes workspace for long-term writing."],
}));
expect(facts?.intro).toBe("A portable notes workspace for long-term writing.");
expect(facts?.homepage).toBe("");
expect(facts?.topics).toEqual([]);
const markdown = githubRepoNoteMarkdown({ ...facts, ...labels });
expect(markdown).not.toContain("主页:");
expect(markdown).not.toContain("话题:");
expect(markdown).toContain("来源: [https://github.com/tianma-if/edgeever](https://github.com/tianma-if/edgeever)");
});
test("does not treat an unrelated GitHub page as the repository in the address", () => {
expect(githubRepoFactsFromSource(source({
pageUrl: "https://github.com/features/copilot",
openGraphDescription: "AI pair programmer.",
embeddedJsonChunks: [sidebarPayload()],
}))).toBeNull();
expect(githubRepoFactsFromSource(source({
pageUrl: "https://github.com/tianma-if/edgeever/issues/8",
embeddedJsonChunks: [sidebarPayload()],
}))).toBeNull();
});
});