Echo-AI-official's picture
Upload 280 files
0e759d2 verified
import { crawlController } from "../v0/crawl";
import { Request, Response } from "express";
import { authenticateUser } from "../auth"; // Ensure this import is correct
import { createIdempotencyKey } from "../../services/idempotency/create";
import { validateIdempotencyKey } from "../../services/idempotency/validate";
import { v4 as uuidv4 } from "uuid";
jest.mock("../auth", () => ({
authenticateUser: jest.fn().mockResolvedValue({
success: true,
team_id: "team123",
error: null,
status: 200,
}),
reduce: jest.fn(),
}));
jest.mock("../../services/idempotency/validate");
describe("crawlController", () => {
it("should prevent duplicate requests using the same idempotency key", async () => {
const req = {
headers: {
"x-idempotency-key": await uuidv4(),
Authorization: `Bearer ${process.env.TEST_API_KEY}`,
},
body: {
url: "https://mendable.ai",
},
} as unknown as Request;
const res = {
status: jest.fn().mockReturnThis(),
json: jest.fn(),
} as unknown as Response;
// Mock the idempotency key validation to return false for the second call
(validateIdempotencyKey as jest.Mock)
.mockResolvedValueOnce(true)
.mockResolvedValueOnce(false);
// First request should succeed
await crawlController(req, res);
expect(res.status).not.toHaveBeenCalledWith(409);
// Second request with the same key should fail
await crawlController(req, res);
expect(res.status).toHaveBeenCalledWith(409);
expect(res.json).toHaveBeenCalledWith({
error: "Idempotency key already used",
});
});
});