mirror of
https://github.com/mendableai/firecrawl.git
synced 2024-11-16 11:42:24 +08:00
tests
This commit is contained in:
parent
45091430ab
commit
be5e6da5ff
|
@ -10,142 +10,142 @@ dotenv.config();
|
|||
const TEST_URL = "http://127.0.0.1:3002";
|
||||
|
||||
describe("E2E Tests for Extract API Routes", () => {
|
||||
describe("POST /v1/extract", () => {
|
||||
it.concurrent("should return authors of blog posts on firecrawl.dev", async () => {
|
||||
const response = await request(TEST_URL)
|
||||
.post("/v1/extract")
|
||||
.set("Authorization", `Bearer ${process.env.TEST_API_KEY}`)
|
||||
.set("Content-Type", "application/json")
|
||||
.send({
|
||||
urls: ["https://firecrawl.dev"],
|
||||
prompt: "Who are the authors of the blog posts?",
|
||||
schema: {
|
||||
type: "object",
|
||||
properties: { authors: { type: "array", items: { type: "string" } } },
|
||||
},
|
||||
});
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.body).toHaveProperty("data");
|
||||
expect(response.body.data).toHaveProperty("founders");
|
||||
it.concurrent("should return authors of blog posts on firecrawl.dev", async () => {
|
||||
const response = await request(TEST_URL)
|
||||
.post("/v1/extract")
|
||||
.set("Authorization", `Bearer ${process.env.TEST_API_KEY}`)
|
||||
.set("Content-Type", "application/json")
|
||||
.send({
|
||||
urls: ["https://firecrawl.dev"],
|
||||
prompt: "Who are the authors of the blog posts?",
|
||||
schema: {
|
||||
type: "object",
|
||||
properties: { authors: { type: "array", items: { type: "string" } } },
|
||||
},
|
||||
});
|
||||
|
||||
let gotItRight = 0;
|
||||
for (const author of response.body.data?.authors) {
|
||||
if (author.includes("Caleb Peffer")) gotItRight++;
|
||||
if (author.includes("Gergő Móricz")) gotItRight++;
|
||||
if (author.includes("Eric Ciarla")) gotItRight++;
|
||||
if (author.includes("Nicolas Camara")) gotItRight++;
|
||||
}
|
||||
console.log(response.body);
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.body).toHaveProperty("data");
|
||||
expect(response.body.data).toHaveProperty("authors");
|
||||
|
||||
expect(gotItRight).toBeGreaterThan(3);
|
||||
}, 60000);
|
||||
let gotItRight = 0;
|
||||
for (const author of response.body.data?.authors) {
|
||||
if (author.includes("Caleb Peffer")) gotItRight++;
|
||||
if (author.includes("Gergő Móricz")) gotItRight++;
|
||||
if (author.includes("Eric Ciarla")) gotItRight++;
|
||||
if (author.includes("Nicolas Camara")) gotItRight++;
|
||||
}
|
||||
|
||||
it.concurrent("should return founders of firecrawl.dev (allowExternalLinks = true)", async () => {
|
||||
const response = await request(TEST_URL)
|
||||
.post("/v1/extract")
|
||||
.set("Authorization", `Bearer ${process.env.TEST_API_KEY}`)
|
||||
.set("Content-Type", "application/json")
|
||||
.send({
|
||||
urls: ["mendable.ai"],
|
||||
prompt: "Who are the founders of the company?",
|
||||
allowExternalLinks: true,
|
||||
schema: {
|
||||
type: "object",
|
||||
properties: { founders: { type: "array", items: { type: "string" } } },
|
||||
},
|
||||
});
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.body).toHaveProperty("data");
|
||||
expect(response.body.data).toHaveProperty("founders");
|
||||
expect(gotItRight).toBeGreaterThan(1);
|
||||
}, 60000);
|
||||
|
||||
let gotItRight = 0;
|
||||
for (const founder of response.body.data?.founders) {
|
||||
if (founder.includes("Caleb")) gotItRight++;
|
||||
if (founder.includes("Eric")) gotItRight++;
|
||||
if (founder.includes("Nicolas")) gotItRight++;
|
||||
}
|
||||
it.concurrent("should return founders of firecrawl.dev (allowExternalLinks = true)", async () => {
|
||||
const response = await request(TEST_URL)
|
||||
.post("/v1/extract")
|
||||
.set("Authorization", `Bearer ${process.env.TEST_API_KEY}`)
|
||||
.set("Content-Type", "application/json")
|
||||
.send({
|
||||
urls: ["mendable.ai"],
|
||||
prompt: "Who are the founders of the company?",
|
||||
allowExternalLinks: true,
|
||||
schema: {
|
||||
type: "object",
|
||||
properties: { founders: { type: "array", items: { type: "string" } } },
|
||||
},
|
||||
});
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.body).toHaveProperty("data");
|
||||
expect(response.body.data).toHaveProperty("founders");
|
||||
|
||||
expect(gotItRight).toBe(3);
|
||||
}, 60000);
|
||||
let gotItRight = 0;
|
||||
for (const founder of response.body.data?.founders) {
|
||||
if (founder.includes("Caleb")) gotItRight++;
|
||||
if (founder.includes("Eric")) gotItRight++;
|
||||
if (founder.includes("Nicolas")) gotItRight++;
|
||||
}
|
||||
|
||||
it.concurrent("should return hiring opportunities on firecrawl.dev (allowExternalLinks = true)", async () => {
|
||||
const response = await request(TEST_URL)
|
||||
.post("/v1/extract")
|
||||
.set("Authorization", `Bearer ${process.env.TEST_API_KEY}`)
|
||||
.set("Content-Type", "application/json")
|
||||
.send({
|
||||
urls: ["https://firecrawl.dev"],
|
||||
prompt: "What are they hiring for?",
|
||||
allowExternalLinks: true,
|
||||
schema: {
|
||||
type: "array",
|
||||
items: {
|
||||
type: "string"
|
||||
}
|
||||
},
|
||||
});
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.body).toHaveProperty("data");
|
||||
console.log(response.body.data);
|
||||
expect(gotItRight).toBe(3);
|
||||
}, 60000);
|
||||
|
||||
let gotItRight = 0;
|
||||
for (const hiring of response.body.data?.items) {
|
||||
if (hiring.includes("Developer Relations Specialist")) gotItRight++;
|
||||
if (hiring.includes("Web Automation Engineer")) gotItRight++;
|
||||
if (hiring.includes("Developer Experience Engineer")) gotItRight++;
|
||||
if (hiring.includes("Developer Support Engineer")) gotItRight++;
|
||||
if (hiring.includes("Dev Ops Engineer")) gotItRight++;
|
||||
if (hiring.includes("Founding Web Automation Engineer")) gotItRight++;
|
||||
}
|
||||
it.concurrent("should return hiring opportunities on firecrawl.dev (allowExternalLinks = true)", async () => {
|
||||
const response = await request(TEST_URL)
|
||||
.post("/v1/extract")
|
||||
.set("Authorization", `Bearer ${process.env.TEST_API_KEY}`)
|
||||
.set("Content-Type", "application/json")
|
||||
.send({
|
||||
urls: ["https://firecrawl.dev"],
|
||||
prompt: "What are they hiring for?",
|
||||
allowExternalLinks: true,
|
||||
schema: {
|
||||
type: "array",
|
||||
items: {
|
||||
type: "string"
|
||||
}
|
||||
},
|
||||
});
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.body).toHaveProperty("data");
|
||||
console.log(response.body.data);
|
||||
|
||||
expect(gotItRight).toBeGreaterThan(5);
|
||||
}, 60000);
|
||||
let gotItRight = 0;
|
||||
for (const hiring of response.body.data?.items) {
|
||||
if (hiring.includes("Developer Relations Specialist")) gotItRight++;
|
||||
if (hiring.includes("Web Automation Engineer")) gotItRight++;
|
||||
if (hiring.includes("Developer Experience Engineer")) gotItRight++;
|
||||
if (hiring.includes("Developer Support Engineer")) gotItRight++;
|
||||
if (hiring.includes("Dev Ops Engineer")) gotItRight++;
|
||||
if (hiring.includes("Founding Web Automation Engineer")) gotItRight++;
|
||||
}
|
||||
|
||||
it.concurrent("should return PCI DSS compliance for Fivetran", async () => {
|
||||
const response = await request(TEST_URL)
|
||||
.post("/v1/extract")
|
||||
.set("Authorization", `Bearer ${process.env.TEST_API_KEY}`)
|
||||
.set("Content-Type", "application/json")
|
||||
.send({
|
||||
urls: ["fivetran.com"],
|
||||
prompt: "Does Fivetran have PCI DSS compliance?",
|
||||
allowExternalLinks: true,
|
||||
schema: {
|
||||
expect(gotItRight).toBeGreaterThan(5);
|
||||
}, 60000);
|
||||
|
||||
it.concurrent("should return PCI DSS compliance for Fivetran", async () => {
|
||||
const response = await request(TEST_URL)
|
||||
.post("/v1/extract")
|
||||
.set("Authorization", `Bearer ${process.env.TEST_API_KEY}`)
|
||||
.set("Content-Type", "application/json")
|
||||
.send({
|
||||
urls: ["fivetran.com"],
|
||||
prompt: "Does Fivetran have PCI DSS compliance?",
|
||||
allowExternalLinks: true,
|
||||
schema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
pciDssCompliance: { type: "boolean" }
|
||||
}
|
||||
},
|
||||
});
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.body).toHaveProperty("data");
|
||||
expect(response.body.data?.pciDssCompliance).toBe(true);
|
||||
}, 60000);
|
||||
|
||||
it.concurrent("should return Azure Data Connectors for Fivetran", async () => {
|
||||
const response = await request(TEST_URL)
|
||||
.post("/v1/extract")
|
||||
.set("Authorization", `Bearer ${process.env.TEST_API_KEY}`)
|
||||
.set("Content-Type", "application/json")
|
||||
.send({
|
||||
urls: ["fivetran.com"],
|
||||
prompt: "What are the Azure Data Connectors they offer?",
|
||||
schema: {
|
||||
type: "array",
|
||||
items: {
|
||||
type: "object",
|
||||
properties: {
|
||||
pciDssCompliance: { type: "boolean" }
|
||||
}
|
||||
},
|
||||
});
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.body).toHaveProperty("data");
|
||||
expect(response.body.data?.pciDssCompliance).toBe(true);
|
||||
}, 60000);
|
||||
|
||||
it.concurrent("should return Azure Data Connectors for Fivetran", async () => {
|
||||
const response = await request(TEST_URL)
|
||||
.post("/v1/extract")
|
||||
.set("Authorization", `Bearer ${process.env.TEST_API_KEY}`)
|
||||
.set("Content-Type", "application/json")
|
||||
.send({
|
||||
urls: ["fivetran.com"],
|
||||
prompt: "What are the Azure Data Connectors they offer?",
|
||||
schema: {
|
||||
type: "array",
|
||||
items: {
|
||||
type: "object",
|
||||
properties: {
|
||||
connector: { type: "string" },
|
||||
description: { type: "string" },
|
||||
supportsCaptureDelete: { type: "boolean" }
|
||||
}
|
||||
connector: { type: "string" },
|
||||
description: { type: "string" },
|
||||
supportsCaptureDelete: { type: "boolean" }
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
console.log(response.body);
|
||||
// expect(response.statusCode).toBe(200);
|
||||
// expect(response.body).toHaveProperty("data");
|
||||
// expect(response.body.data?.pciDssCompliance).toBe(true);
|
||||
}, 60000);
|
||||
});
|
||||
console.log(response.body);
|
||||
// expect(response.statusCode).toBe(200);
|
||||
// expect(response.body).toHaveProperty("data");
|
||||
// expect(response.body.data?.pciDssCompliance).toBe(true);
|
||||
}, 60000);
|
||||
});
|
||||
|
|
|
@ -106,6 +106,15 @@ export interface FirecrawlCrawlStatusResponse {
|
|||
error?: string;
|
||||
}
|
||||
|
||||
export interface FirecrawlExtractResponse {
|
||||
statusCode: number;
|
||||
body: {
|
||||
success: boolean;
|
||||
data: any[];
|
||||
};
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export enum RateLimiterMode {
|
||||
Crawl = "crawl",
|
||||
CrawlStatus = "crawlStatus",
|
||||
|
|
Loading…
Reference in New Issue
Block a user