diff --git a/test/_helper.js b/test/_helper.js index 53b893cf..b2154476 100644 --- a/test/_helper.js +++ b/test/_helper.js @@ -65,17 +65,7 @@ const validateRequest = (query = {}, params = {}, body = {}, additionalHeaders = }; const request = mockServer.getLastRequest(); const expectedQuery = getExpectedQuery(query); - if (query !== false) { - try { - expect(request.query).toEqual(expectedQuery); - } catch (err) { - // Debug log to check what was actually in request. - // It is happening that the "_batchAddRequests() works" randomly fails on CI, it can be caused by tests concurrency. - // If so we need to update how mockServer.getLastRequest() works. - console.log('Request:', request.route.path, request.route.methods, request.query); - throw err; - } - } + if (query !== false) expect(request.query).toEqual(expectedQuery); if (params !== false) expect(request.params).toEqual(params); if (body !== false) expect(request.body).toEqual(body); Object.entries(headers).forEach(([key, value]) => { diff --git a/test/request_queues.test.js b/test/request_queues.test.js index 73f662f1..37286404 100644 --- a/test/request_queues.test.js +++ b/test/request_queues.test.js @@ -331,35 +331,7 @@ describe('Request Queue methods', () => { ); }); - test('batchAddRequests() chunks large payload', async () => { - const queueId = 'some-id'; - const requestsLength = 30; - const longString = 'a'.repeat(940_000); - const requests = new Array(requestsLength).fill(0).map((_, i) => ({ url: `http://example.com/${i}`, userData: { longString } })); - - await client.requestQueue(queueId).batchAddRequests(requests); - // Based on size of one request and limit 9MB as max payload size only 10 requests should be sent in one batch - const firedRequests = mockServer.getLastRequests(requestsLength / 10); - const processedRequestUrls = []; - firedRequests.map((req) => { - expect(req.url).toEqual(`/${queueId}/requests/batch`); - req.body.forEach(({ url }) => { - processedRequestUrls.push(url); - }); - }); - expect(processedRequestUrls.length).toEqual(requestsLength); - expect(processedRequestUrls).toEqual( - expect.arrayContaining(requests.map((req) => req.url)), - ); - - // It throws error when single request is too big - const bigRequest = { url: `http://example.com/x`, userData: { longString: 'a'.repeat(9_500_000) } }; - const requestsWithBigRequest = [...requests, bigRequest]; - await expect(client.requestQueue(queueId).batchAddRequests(requestsWithBigRequest)) - .rejects.toThrow(`RequestQueueClient.batchAddRequests: The size of the request with index: ${requestsWithBigRequest.length - 1}`); - }); - - test('_batchAddRequests() works', async () => { + test('batchAddRequests() propagates forefront', async () => { const queueId = 'some-id'; const options = { forefront: true }; const requests = new Array(10).fill(0).map((_, i) => ({ url: `http://example.com/${i}` })); @@ -491,5 +463,35 @@ describe('Request Queue methods', () => { expect(browserRes.items).toEqual(browserRequests); validateRequest({ limit: maxPageLimit }, { queueId }); }); + + // NOTE: This test needs to be last otherwise it will break other tests + test('batchAddRequests() chunks large payload', async () => { + const queueId = 'some-id'; + const requestsLength = 30; + const longString = 'a'.repeat(940_000); + const requests = new Array(requestsLength).fill(0).map((_, i) => ({ url: `http://example.com/${i}`, userData: { longString } })); + + await client.requestQueue(queueId).batchAddRequests(requests); + // Based on size of one request and limit 9MB as max payload size only 10 requests should be sent in one batch + const firedRequests = mockServer.getLastRequests(requestsLength / 10); + const processedRequestUrls = []; + firedRequests.map((req) => { + expect(req.url).toEqual(`/${queueId}/requests/batch`); + req.body.forEach(({ url }) => { + processedRequestUrls.push(url); + }); + }); + expect(processedRequestUrls.length).toEqual(requestsLength); + expect(processedRequestUrls).toEqual( + expect.arrayContaining(requests.map((req) => req.url)), + ); + + // It throws error when single request is too big + const bigRequest = { url: `http://example.com/x`, userData: { longString: 'b'.repeat(9_500_000) } }; + const requestsWithBigRequest = [...requests, bigRequest]; + await expect(client.requestQueue(queueId).batchAddRequests(requestsWithBigRequest)) + .rejects.toThrow(`RequestQueueClient.batchAddRequests: The size of the request with index: ${requestsWithBigRequest.length - 1}`); + validateRequest({}, { queueId }, false); + }); }); });