Files
pi-perplexity/test/e2e-models.test.ts
T
Ivan Pereira bbb5623f25 refactor(runtime): replace Bun dependency with Node fetch
Run Perplexity search and auth requests through pi's Node runtime instead of
shelling out to Bun. Move development and CI commands to npm, add a Node test
build path, and keep OTP auth fail-fast when Set-Cookie headers are not
available.
2026-06-23 15:51:16 +01:00

69 lines
1.8 KiB
TypeScript

import { describe, expect, test } from "./test-helpers.js";
import { loadToken } from "../src/auth/storage.js";
import { searchPerplexity } from "../src/search/client.js";
const DEFAULT_MODELS = [
"pplx_pro_upgraded",
"experimental",
"pplx_reasoning",
"gpt54",
"claude46sonnetthinking",
];
const runE2E = process.env.PI_PERPLEXITY_E2E === "1";
const maybeTest = runE2E ? test : test.skip;
function configuredModels(): string[] {
const raw = process.env.PI_PERPLEXITY_E2E_MODELS;
if (!raw) return DEFAULT_MODELS;
return raw
.split(",")
.map((model) => model.trim())
.filter(Boolean);
}
function configuredDelayMs(): number {
const raw = Number(process.env.PI_PERPLEXITY_E2E_DELAY_MS ?? "1500");
return Number.isFinite(raw) && raw >= 0 ? raw : 1500;
}
async function delay(ms: number): Promise<void> {
await new Promise((resolve) => setTimeout(resolve, ms));
}
describe("Perplexity model selection e2e", () => {
maybeTest(
"sends requested model slugs and receives matching display_model values",
{ timeout: 180_000 },
async () => {
const token = await loadToken();
if (!token) {
throw new Error("No cached Perplexity token. Run /perplexity-login before PI_PERPLEXITY_E2E=1 npm test.");
}
const models = configuredModels();
const delayMs = configuredDelayMs();
for (const model of models) {
const result = await searchPerplexity(
{
query: "Say exactly OK",
model,
incognito: true,
limit: 1,
},
token.access,
);
expect(result.answer.trim().startsWith("OK")).toBe(true);
expect(result.displayModel).toBe(model);
if (delayMs > 0 && model !== models.at(-1)) {
await delay(delayMs);
}
}
},
);
});