Skip to content

Commit 4feee00

Browse files
committed
More tests
1 parent df33cdb commit 4feee00

4 files changed

Lines changed: 123 additions & 74 deletions

File tree

‎test/cookies.ts‎

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import {gzipSync} from 'node:zlib';
33
import test from 'ava';
44
import * as toughCookie from 'tough-cookie';
55
import delay from 'delay';
6-
import {CookieJar} from 'tough-cookie';
76
import got, {RequestError, Options} from '../source/index.js';
87
import {createRawHttpServer} from './helpers/server-tools.js';
98
import withServer from './helpers/with-server.js';
@@ -740,7 +739,7 @@ test('a request can disable cookies without creating a child instance', withServ
740739
response.end(request.headers.cookie ?? 'no-cookie');
741740
});
742741

743-
const cookieJar = new CookieJar();
742+
const cookieJar = new toughCookie.CookieJar();
744743
cookieJar.setCookieSync('session=value', server.url);
745744
const instance = client.extend({cookieJar});
746745

@@ -752,15 +751,15 @@ test('resetting the jar preserves an explicit Cookie header', withServer, async
752751
response.end(request.headers.cookie ?? 'no-cookie');
753752
});
754753

755-
const cookieJar = new CookieJar();
754+
const cookieJar = new toughCookie.CookieJar();
756755
cookieJar.setCookieSync('session=jar', server.url);
757756
const instance = client.extend({cookieJar});
758757

759758
t.is(await instance('', {cookieJar: undefined, headers: {cookie: 'session=explicit'}}).text(), 'session=explicit');
760759
});
761760

762761
test('direct merge resets an already normalized cookie jar', t => {
763-
const options = new Options('https://example.com/', {cookieJar: new CookieJar()});
762+
const options = new Options('https://example.com/', {cookieJar: new toughCookie.CookieJar()});
764763
options.merge({cookieJar: undefined});
765764

766765
t.is(options.cookieJar, undefined);
@@ -772,15 +771,15 @@ test('omitting cookieJar from request options preserves inherited cookies', with
772771
response.end(request.headers.cookie ?? 'no-cookie');
773772
});
774773

775-
const cookieJar = new CookieJar();
774+
const cookieJar = new toughCookie.CookieJar();
776775
cookieJar.setCookieSync('session=value', server.url);
777776
const instance = client.extend({cookieJar});
778777

779778
t.is(await instance('', {headers: {'x-test': 'unrelated'}}).text(), 'session=value');
780779
});
781780

782781
test('a cookie jar reset survives replay when merging an instance', t => {
783-
const instance = got.extend({cookieJar: new CookieJar()}).extend({cookieJar: undefined});
782+
const instance = got.extend({cookieJar: new toughCookie.CookieJar()}).extend({cookieJar: undefined});
784783
const replayed = got.extend(instance, {headers: {'x-test': 'unrelated'}});
785784

786785
t.is(replayed.defaults.options.cookieJar, undefined);
@@ -791,9 +790,9 @@ test('a replacement jar works after a reset', withServer, async (t, server, clie
791790
response.end(request.headers.cookie ?? 'no-cookie');
792791
});
793792

794-
const originalJar = new CookieJar();
793+
const originalJar = new toughCookie.CookieJar();
795794
originalJar.setCookieSync('session=original', server.url);
796-
const replacementJar = new CookieJar();
795+
const replacementJar = new toughCookie.CookieJar();
797796
replacementJar.setCookieSync('session=replacement', server.url);
798797
const instance = client.extend({cookieJar: originalJar}).extend({cookieJar: undefined});
799798

@@ -806,7 +805,7 @@ test('a per-request reset does not disable cookies for later requests', withServ
806805
response.end(request.headers.cookie ?? 'no-cookie');
807806
});
808807

809-
const cookieJar = new CookieJar();
808+
const cookieJar = new toughCookie.CookieJar();
810809
cookieJar.setCookieSync('session=value', server.url);
811810
const instance = client.extend({cookieJar});
812811

@@ -821,7 +820,7 @@ test('a per-request reset does not store response cookies in the inherited jar',
821820
response.end('ok');
822821
});
823822

824-
const cookieJar = new CookieJar();
823+
const cookieJar = new toughCookie.CookieJar();
825824
cookieJar.setCookieSync('session=original; Path=/', server.url);
826825
const instance = client.extend({cookieJar});
827826

@@ -835,13 +834,13 @@ test('a reset jar ignores invalid response cookies', withServer, async (t, serve
835834
response.end('ok');
836835
});
837836

838-
const instance = client.extend({cookieJar: new CookieJar()});
837+
const instance = client.extend({cookieJar: new toughCookie.CookieJar()});
839838

840839
t.is(await instance('', {cookieJar: undefined}).text(), 'ok');
841840
});
842841

843842
test('an init hook can supply an explicit cookie jar reset', t => {
844-
const defaults = new Options({cookieJar: new CookieJar()});
843+
const defaults = new Options({cookieJar: new toughCookie.CookieJar()});
845844
const options = new Options('https://example.com/', {
846845
hooks: {
847846
init: [plainOptions => {
@@ -854,7 +853,7 @@ test('an init hook can supply an explicit cookie jar reset', t => {
854853
});
855854

856855
test('explicit undefined resets an inherited cookie jar', t => {
857-
const cookieJar = new CookieJar();
856+
const cookieJar = new toughCookie.CookieJar();
858857
const defaults = new Options({cookieJar});
859858
const options = new Options('https://example.com/', {cookieJar: undefined}, defaults);
860859

@@ -863,7 +862,7 @@ test('explicit undefined resets an inherited cookie jar', t => {
863862
});
864863

865864
test('extending an instance can reset its cookie jar', t => {
866-
const cookieJar = new CookieJar();
865+
const cookieJar = new toughCookie.CookieJar();
867866
const parent = got.extend({cookieJar});
868867
const child = parent.extend({cookieJar: undefined});
869868

@@ -881,7 +880,7 @@ test('resetting the cookie jar removes cookies from subsequent requests', withSe
881880
response.end(request.headers.cookie ?? 'no-cookie');
882881
});
883882

884-
const cookieJar = new CookieJar();
883+
const cookieJar = new toughCookie.CookieJar();
885884
const instance = got.extend({cookieJar});
886885

887886
t.is(await instance('').text(), 'no-cookie');
@@ -899,7 +898,7 @@ test('resetting the cookie jar removes cookies from subsequent requests', withSe
899898
});
900899

901900
test('retry does not resend a cookie expired by the previous response', withServer, async (t, server, got) => {
902-
const cookieJar = new CookieJar();
901+
const cookieJar = new toughCookie.CookieJar();
903902
await cookieJar.setCookie('session=old; Path=/', server.url);
904903
const cookies: Array<string | undefined> = [];
905904
server.get('/', (request, response) => {
@@ -919,7 +918,7 @@ test('retry does not resend a cookie expired by the previous response', withServ
919918

920919
for (const statusCode of [302, 307]) {
921920
test(`a ${statusCode} redirect does not resend a cookie expired by the previous response`, withServer, async (t, server, got) => {
922-
const cookieJar = new CookieJar();
921+
const cookieJar = new toughCookie.CookieJar();
923922
await cookieJar.setCookie('session=old; Path=/', server.url);
924923
const cookies: Array<string | undefined> = [];
925924
server.use((request, response) => {
@@ -947,7 +946,7 @@ for (const cookie of ['explicit=value', '', undefined]) {
947946
});
948947

949948
await got('', {
950-
cookieJar: new CookieJar(),
949+
cookieJar: new toughCookie.CookieJar(),
951950
headers: {cookie},
952951
retry: {limit: 1, backoffLimit: 0, noise: 0},
953952
});

‎test/pagination-options.ts‎

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,3 +392,72 @@ test('pagination searchParams overrides the next URL query string', withServer,
392392

393393
t.deepEqual(items, ['first', '/next?page=2']);
394394
});
395+
396+
test('pagination searchParams apply only to the page they are returned with', withServer, async (t, server, client) => {
397+
server.get('/first', (_request, response) => {
398+
response.json(['first']);
399+
});
400+
server.get('/second', (request, response) => {
401+
response.json([request.url]);
402+
});
403+
server.get('/third', (request, response) => {
404+
response.json([request.url]);
405+
});
406+
407+
const items = await client.paginate.all<string>('first', {
408+
pagination: {
409+
requestLimit: 3,
410+
paginate({response}) {
411+
const {pathname} = new URL(response.url);
412+
413+
if (pathname === '/first') {
414+
return {url: '/second?keep=1', searchParams: {page: 2}};
415+
}
416+
417+
if (pathname === '/second') {
418+
return {url: '/third?keep=1'};
419+
}
420+
421+
return false;
422+
},
423+
},
424+
});
425+
426+
t.deepEqual(items, ['first', '/second?page=2', '/third?keep=1']);
427+
});
428+
429+
test('pagination searchParams merge with the inherited query when no url is returned', withServer, async (t, server, client) => {
430+
server.get('/', (request, response) => {
431+
response.json([request.url]);
432+
});
433+
434+
const items = await client.paginate.all<string>('', {
435+
searchParams: {page: 1, filter: 'open'},
436+
pagination: {
437+
requestLimit: 3,
438+
paginate({response}) {
439+
const page = Number((response.request.options.searchParams as URLSearchParams).get('page'));
440+
return page === 1 ? {searchParams: {page: 2}} : {searchParams: {filter: undefined}};
441+
},
442+
},
443+
});
444+
445+
// Replaced keys are appended after the inherited ones.
446+
t.deepEqual(items, ['/?page=1&filter=open', '/?filter=open&page=2', '/?page=2']);
447+
});
448+
449+
test('returning searchParams undefined clears the query for the next page', withServer, async (t, server, client) => {
450+
server.get('/', (request, response) => {
451+
response.json([request.url]);
452+
});
453+
454+
const items = await client.paginate.all<string>('', {
455+
searchParams: {page: 1},
456+
pagination: {
457+
requestLimit: 2,
458+
paginate: () => ({searchParams: undefined}),
459+
},
460+
});
461+
462+
t.deepEqual(items, ['/?page=1', '/']);
463+
});

0 commit comments

Comments
 (0)