78 lines
2.6 KiB
TypeScript
78 lines
2.6 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { DeepSeekWebExecutor } from "../../open-sse/executors/deepseek-web.ts";
|
|
|
|
// Skip if live test credentials are not set
|
|
if (!process.env.DEEPSEEK_WEB_SESSION_COOKIE) {
|
|
console.log("Skipping DeepSeek Web live test: DEEPSEEK_WEB_SESSION_COOKIE not set");
|
|
test.skip("Live test credentials not set", () => {});
|
|
} else {
|
|
test("DeepSeek Web: live completion request", async () => {
|
|
const executor = new DeepSeekWebExecutor();
|
|
|
|
const result = await executor.execute({
|
|
model: "deepseek-v4-flash",
|
|
body: {
|
|
messages: [{ role: "user", content: "Say hello in one word." }],
|
|
temperature: 0.7,
|
|
max_tokens: 10,
|
|
},
|
|
stream: false,
|
|
credentials: {
|
|
cookies: process.env.DEEPSEEK_WEB_SESSION_COOKIE!,
|
|
} as any,
|
|
signal: AbortSignal.timeout(30000),
|
|
});
|
|
|
|
assert.ok(result.response, "Should return a response");
|
|
assert.equal(
|
|
new URL(result.url).hostname,
|
|
"chat.deepseek.com",
|
|
"Should target chat.deepseek.com"
|
|
);
|
|
|
|
if (result.response.ok) {
|
|
const ct = result.response.headers.get("content-type") || "";
|
|
// Should be JSON, not HTML (SPA fallback)
|
|
assert.ok(!ct.includes("text/html"), "Should not return HTML");
|
|
const text = await result.response.text();
|
|
const parsed = JSON.parse(text);
|
|
// Should not have DeepSeek error codes
|
|
assert.equal(parsed.code, undefined, "Should not have error code");
|
|
assert.ok(parsed.choices || parsed.data, "Should have choices or data");
|
|
} else {
|
|
// Even errors are valid — proves we reached the real API
|
|
const status = result.response.status;
|
|
assert.ok([401, 403, 429].includes(status), `Unexpected status: ${status}`);
|
|
}
|
|
});
|
|
|
|
test("DeepSeek Web: live streaming request", async () => {
|
|
const executor = new DeepSeekWebExecutor();
|
|
|
|
const result = await executor.execute({
|
|
model: "deepseek-v4-flash",
|
|
body: {
|
|
messages: [{ role: "user", content: "Say hi" }],
|
|
temperature: 0.7,
|
|
max_tokens: 20,
|
|
},
|
|
stream: true,
|
|
credentials: {
|
|
cookies: process.env.DEEPSEEK_WEB_SESSION_COOKIE!,
|
|
} as any,
|
|
signal: AbortSignal.timeout(30000),
|
|
});
|
|
|
|
assert.ok(result.response, "Should return a response");
|
|
|
|
if (result.response.ok) {
|
|
const ct = result.response.headers.get("content-type") || "";
|
|
assert.ok(
|
|
ct.includes("text/event-stream") || ct.includes("application/json"),
|
|
`Expected SSE or JSON, got: ${ct}`
|
|
);
|
|
}
|
|
});
|
|
}
|