mirror of
https://github.com/germondai/trawl.git
synced 2026-08-17 12:11:23 +02:00
84 lines
2.5 KiB
TypeScript
84 lines
2.5 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
import type { BrowserHandle } from "@trawl/browser"
|
|
import type { SessionData } from "@trawl/types"
|
|
import { runTier2 } from "../src/tiers/2"
|
|
|
|
const session: SessionData = {
|
|
cookies: [
|
|
{
|
|
name: "cf_clearance",
|
|
value: "cached-token",
|
|
domain: ".example.com",
|
|
path: "/",
|
|
expires: 2_000_000_000,
|
|
httpOnly: true,
|
|
secure: true,
|
|
sameSite: "Lax",
|
|
},
|
|
],
|
|
userAgent: "cached-user-agent",
|
|
savedAt: 1,
|
|
}
|
|
|
|
const handleWithContext = (context: BrowserHandle["context"]): BrowserHandle => ({
|
|
id: 3,
|
|
lease: 7,
|
|
context,
|
|
browser: {},
|
|
fingerprint: {
|
|
userAgent: "pool-user-agent",
|
|
platform: "Linux x86_64",
|
|
locale: "en-US",
|
|
timezone: "UTC",
|
|
},
|
|
})
|
|
|
|
describe("runTier2", () => {
|
|
test("returns an error when the acquired pool context is already closed", async () => {
|
|
const playwrightError = "browserContext.newPage: Target page, context or browser has been closed"
|
|
const handle = handleWithContext({
|
|
newPage: () => Promise.reject(new Error(playwrightError)),
|
|
})
|
|
|
|
const result = await runTier2("https://example.com", handle, session, 100)
|
|
|
|
expect(result.status).toBe("error")
|
|
expect(result.reason).toBe(playwrightError)
|
|
})
|
|
|
|
test("uses the acquired pool context, injects session cookies, and returns content", async () => {
|
|
let injectedCookies: unknown
|
|
let userAgent: Record<string, string> | undefined
|
|
let pageClosed = false
|
|
const page = {
|
|
url: () => "https://example.com/final?ok=1",
|
|
setExtraHTTPHeaders: async (headers: Record<string, string>) => {
|
|
userAgent = headers
|
|
},
|
|
on: () => {},
|
|
goto: async () => {},
|
|
waitForLoadState: async () => {},
|
|
content: async () => "<html><body>pool context content</body></html>",
|
|
close: async () => {
|
|
pageClosed = true
|
|
},
|
|
}
|
|
const context = {
|
|
newPage: async () => page,
|
|
addCookies: async (cookies: unknown) => {
|
|
injectedCookies = cookies
|
|
},
|
|
cookies: async () => session.cookies,
|
|
}
|
|
|
|
const result = await runTier2("https://example.com", handleWithContext(context), session, 100)
|
|
|
|
expect(result.status).toBe("success")
|
|
expect(result.html).toContain("pool context content")
|
|
expect(result.effectiveUrl).toBe("https://example.com/final?ok=1")
|
|
expect(injectedCookies).toEqual(session.cookies)
|
|
expect(userAgent).toEqual({ "User-Agent": session.userAgent })
|
|
expect(pageClosed).toBe(true)
|
|
})
|
|
})
|