Files
hyperframes/packages/cli/src/capture/pageBlockDetection.test.ts
T

107 lines
2.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { detectBlockedPage } from "./pageBlockDetection.js";
describe("detectBlockedPage", () => {
it.each([
{
label: "local Fuji response",
evidence: {
httpStatus: 403,
title: "403 - Forbidden",
textLength: 50,
bodyChildCount: 1,
hasChallengeElement: false,
},
},
{
label: "EC2-style soft-block response",
evidence: {
httpStatus: 200,
title: "Access denied",
textLength: 18,
bodyChildCount: 2,
hasChallengeElement: false,
},
},
{
label: "classic Cloudflare interstitial",
evidence: {
httpStatus: 503,
title: "Attention Required! | Cloudflare",
textLength: 120,
bodyChildCount: 3,
hasChallengeElement: false,
},
},
])("rejects a minimal protection page: $label", ({ evidence }) => {
expect(detectBlockedPage(evidence)).toMatch(/capture blocked/i);
});
it("rejects a structural challenge on a minimal page", () => {
expect(
detectBlockedPage({
httpStatus: 200,
title: "Please verify you are human",
textLength: 300,
bodyChildCount: 3,
hasChallengeElement: true,
}),
).toMatch(/capture blocked/i);
});
it.each([
{
label: "an image-led page with little text",
evidence: {
httpStatus: 200,
title: "Photography portfolio",
textLength: 18,
bodyChildCount: 4,
hasChallengeElement: false,
},
},
{
label: "a real page discussing access denial",
evidence: {
httpStatus: 200,
title: "Why websites say Access Denied",
textLength: 2_000,
bodyChildCount: 20,
hasChallengeElement: false,
},
},
{
label: "a full page with an embedded CAPTCHA",
evidence: {
httpStatus: 200,
title: "Contact us",
textLength: 2_000,
bodyChildCount: 20,
hasChallengeElement: true,
},
},
{
label: "a minimal photography page named Forbidden Fruit Photography",
evidence: {
httpStatus: 200,
title: "Forbidden Fruit Photography",
textLength: 40,
bodyChildCount: 4,
hasChallengeElement: false,
},
},
{
label: "a minimal photo essay named Attention Required",
evidence: {
httpStatus: 200,
title: "Attention Required: A Photo Essay",
textLength: 60,
bodyChildCount: 5,
hasChallengeElement: false,
},
},
])("allows $label", ({ evidence }) => {
expect(detectBlockedPage(evidence)).toBeUndefined();
});
});