mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-11-14 13:27:13 +00:00
107 lines
2.7 KiB
TypeScript
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();
|
|
});
|
|
});
|