66 lines
1.5 KiB
TypeScript
66 lines
1.5 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import { analyzePages } from "../src/registry/analyzer";
|
|
import type { Page } from "@siax/c0py-types";
|
|
|
|
const pages: Page[] = [
|
|
{
|
|
id: "1",
|
|
registryId: "r1",
|
|
url: "https://example.com/",
|
|
path: "/",
|
|
title: "Home",
|
|
description: null,
|
|
statusCode: 200,
|
|
contentType: "text/html",
|
|
discoveredAt: new Date(),
|
|
analysis: null,
|
|
},
|
|
{
|
|
id: "2",
|
|
registryId: "r1",
|
|
url: "https://example.com/about",
|
|
path: "/about",
|
|
title: "About",
|
|
description: null,
|
|
statusCode: 200,
|
|
contentType: "text/html",
|
|
discoveredAt: new Date(),
|
|
analysis: null,
|
|
},
|
|
{
|
|
id: "3",
|
|
registryId: "r1",
|
|
url: "https://example.com/missing",
|
|
path: "/missing",
|
|
title: null,
|
|
description: null,
|
|
statusCode: 404,
|
|
contentType: "text/html",
|
|
discoveredAt: new Date(),
|
|
analysis: null,
|
|
},
|
|
];
|
|
|
|
describe("analyzePages", () => {
|
|
it("counts pages correctly", () => {
|
|
const result = analyzePages(pages);
|
|
expect(result.totalPages).toBe(3);
|
|
expect(result.brokenLinks).toBe(1);
|
|
expect(result.hasBrokenLinks).toBe(true);
|
|
expect(result.uniqueDomains).toBe(1);
|
|
});
|
|
|
|
it("aggregates status codes", () => {
|
|
const result = analyzePages(pages);
|
|
expect(result.statusCodes[200]).toBe(2);
|
|
expect(result.statusCodes[404]).toBe(1);
|
|
});
|
|
|
|
it("handles empty input", () => {
|
|
const result = analyzePages([]);
|
|
expect(result.totalPages).toBe(0);
|
|
expect(result.avgStatusCode).toBe(0);
|
|
expect(result.hasBrokenLinks).toBe(false);
|
|
});
|
|
});
|