Spaces:
Paused
Paused
| import { crawlController } from '../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' }); | |
| }); | |
| }); |