File size: 2,635 Bytes
aec3094 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | import nock from 'nock';
import { paginatedRequest } from '../strapi-utils';
describe('Strapi utils', () => {
describe('paginatedRequest', () => {
const baseUrl = 'https://strapi.test/api/nodes';
afterEach(() => {
nock.cleanAll();
});
it('should fetch and combine multiple pages of data', async () => {
const page1 = [
{
id: 1,
attributes: { name: 'Node1', nodeDescription: { name: 'n1', version: 1 } },
},
];
const page2 = [
{
id: 2,
attributes: { name: 'Node2', nodeDescription: { name: 'n2', version: 2 } },
},
];
nock('https://strapi.test')
.get('/api/nodes')
.query(true)
.reply(200, {
data: page1,
meta: {
pagination: {
page: 1,
pageSize: 25,
pageCount: 2,
total: 2,
},
},
});
nock('https://strapi.test')
.get('/api/nodes')
.query(true)
.reply(200, {
data: page2,
meta: {
pagination: {
page: 2,
pageSize: 25,
pageCount: 2,
total: 2,
},
},
});
const result = await paginatedRequest<(typeof page1)[number]['attributes']>(
'https://strapi.test/api/nodes',
);
expect(result).toHaveLength(2);
expect(result[0].name).toBe('Node1');
expect(result[1].name).toBe('Node2');
});
it('should return empty array if no data', async () => {
nock('https://strapi.test')
.get('/api/nodes')
.query(true)
.reply(200, {
data: [],
meta: {
pagination: {
page: 1,
pageSize: 25,
pageCount: 0,
total: 0,
},
},
});
const result = await paginatedRequest(baseUrl);
expect(result).toEqual([]);
});
it('should return single page data', async () => {
const singlePage = [
{
id: 1,
attributes: {
name: 'NodeSingle',
nodeDescription: { name: 'n1', version: 1 },
},
},
];
nock('https://strapi.test')
.get('/api/nodes')
.query(true)
.reply(200, {
data: singlePage,
meta: {
pagination: {
page: 1,
pageSize: 25,
pageCount: 1,
total: 1,
},
},
});
const result = await paginatedRequest<(typeof singlePage)[number]['attributes']>(baseUrl);
expect(result).toHaveLength(1);
expect(result[0].name).toBe('NodeSingle');
});
it('should return an empty array if the request fails', async () => {
const endpoint = '/nodes';
nock(baseUrl).get(endpoint).query(true).replyWithError('Request failed');
const result = await paginatedRequest(`${baseUrl}${endpoint}`);
expect(result).toEqual([]);
});
});
});
|