From bc7bbb59b43b251cf923855c618f53d2edd4fa41 Mon Sep 17 00:00:00 2001 From: Joe Mou Date: Mon, 26 Jan 2026 15:36:23 -0500 Subject: GitHub scraper test --- src/scraper.test.ts | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/scraper.test.ts (limited to 'src/scraper.test.ts') diff --git a/src/scraper.test.ts b/src/scraper.test.ts new file mode 100644 index 0000000..3784190 --- /dev/null +++ b/src/scraper.test.ts @@ -0,0 +1,70 @@ +import assert from "node:assert"; +import { describe, it } from "node:test"; +import { getGitHubBlob, getGitHubRepo, getGitHubTree } from "./scraper.ts"; + +describe("GitHub scraper", () => { + describe("actions/deploy-pages repository", () => { + it("should fetch repository", async () => { + const data = await getGitHubRepo("actions", "deploy-pages"); + + assert.strictEqual(data.repo.owner, "actions"); + assert.strictEqual(data.repo.name, "deploy-pages"); + assert.strictEqual(data.branch, "main"); + assert.strictEqual(data.path, "/"); + + assert.strictEqual( + data.info.description, + "GitHub Action to publish artifacts to GitHub Pages for deployments", + ); + assert.strictEqual(data.info.website, "https://pages.github.com"); + assert.strictEqual(data.info.stars?.length, 3); + assert.strictEqual(data.info.watchers?.length, 2); + assert.strictEqual(data.info.forks?.length, 3); + assert.strictEqual(data.info.numReleases, 36); + + assert.ok(data.items.length > 0); + assert.ok(Object.keys(data.overviewHtml ?? {}).includes("README.md")); + }); + + it("should fetch tree", async () => { + const data = await getGitHubTree("actions", "deploy-pages", "main", "src"); + + assert.strictEqual(data.repo.owner, "actions"); + assert.strictEqual(data.repo.name, "deploy-pages"); + assert.strictEqual(data.branch, "main"); + assert.strictEqual(data.path, "src"); + + assert.deepStrictEqual(data.items, [ + { + name: "__tests__", + path: "src/__tests__", + contentType: "directory", + }, + { + name: "internal", + path: "src/internal", + contentType: "directory", + }, + { + name: "index.js", + path: "src/index.js", + contentType: "file", + }, + ]); + }); + + it("should fetch blob", async () => { + const data = await getGitHubBlob("actions", "deploy-pages", "main", "LICENSE"); + + assert.strictEqual(data.repo.owner, "actions"); + assert.strictEqual(data.repo.name, "deploy-pages"); + assert.strictEqual(data.branch, "main"); + assert.strictEqual(data.path, "LICENSE"); + + assert.strictEqual(data.size, 1068); + assert.strictEqual(data.language, "Text"); + assert.match(data.rawContent, /^MIT License\n\n/); + assert.match(data.content, /^MIT License\n\n/); + }); + }); +}); -- cgit v1.3.1