Skip to content

Commit 32a55fd

Browse files
authored
fix: handle long metadata requests [DHIS2-18402] (#123)
1 parent d32131a commit 32a55fd

File tree

2 files changed

+383
-13
lines changed

2 files changed

+383
-13
lines changed
Lines changed: 315 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,315 @@
1+
import { getMetadataByRequest } from '../useFetchExchange.js'
2+
3+
const MOCK_ENGINE = {
4+
query: (_, variables) => ({ query: 'query_name', variables }),
5+
}
6+
7+
describe('getMetadataByRequest', () => {
8+
it('chunks dx items', () => {
9+
const MOCK_VARIABLES = {
10+
dx: [
11+
'dx_01',
12+
'dx_02',
13+
'dx_03',
14+
'dx_04',
15+
'dx_05',
16+
'dx_06',
17+
'dx_07',
18+
'dx_08',
19+
],
20+
pe: ['pe_01', 'pe_02'],
21+
ou: ['ou_01', 'ou_02', 'ou_03'],
22+
}
23+
24+
const result = getMetadataByRequest({
25+
engine: MOCK_ENGINE,
26+
variables: MOCK_VARIABLES,
27+
index: 1,
28+
chunkSize: 5,
29+
})
30+
31+
const EXPECTED = [
32+
{
33+
request: {
34+
query: 'query_name',
35+
variables: {
36+
variables: {
37+
dx: ['dx_01'],
38+
ou: ['ou_01', 'ou_02', 'ou_03'],
39+
pe: ['pe_01'],
40+
},
41+
},
42+
},
43+
index: 1,
44+
},
45+
{
46+
request: {
47+
query: 'query_name',
48+
variables: {
49+
variables: {
50+
dx: ['dx_01', 'dx_02', 'dx_03', 'dx_04', 'dx_05'],
51+
ou: ['ou_01'],
52+
pe: ['pe_01'],
53+
},
54+
},
55+
},
56+
index: 1,
57+
},
58+
{
59+
request: {
60+
query: 'query_name',
61+
variables: {
62+
variables: {
63+
dx: ['dx_06', 'dx_07', 'dx_08'],
64+
ou: ['ou_01'],
65+
pe: ['pe_01'],
66+
},
67+
},
68+
},
69+
index: 1,
70+
},
71+
{
72+
request: {
73+
query: 'query_name',
74+
variables: {
75+
variables: {
76+
dx: ['dx_01'],
77+
ou: ['ou_01'],
78+
pe: ['pe_01', 'pe_02'],
79+
},
80+
},
81+
},
82+
index: 1,
83+
},
84+
]
85+
expect(result).toEqual(EXPECTED)
86+
})
87+
it('chunks ou items', () => {
88+
const MOCK_VARIABLES = {
89+
dx: ['dx_01', 'dx_02', 'dx_03', 'dx_04'],
90+
pe: ['pe_01', 'pe_02'],
91+
ou: [
92+
'ou_01',
93+
'ou_02',
94+
'ou_03',
95+
'ou_04',
96+
'ou_05',
97+
'ou_06',
98+
'ou_07',
99+
'ou_08',
100+
'ou_09',
101+
'ou_10',
102+
'ou_11',
103+
'ou_12',
104+
],
105+
}
106+
107+
const result = getMetadataByRequest({
108+
engine: MOCK_ENGINE,
109+
variables: MOCK_VARIABLES,
110+
index: 1,
111+
chunkSize: 5,
112+
})
113+
114+
const EXPECTED = [
115+
{
116+
request: {
117+
query: 'query_name',
118+
variables: {
119+
variables: {
120+
dx: ['dx_01'],
121+
ou: ['ou_01', 'ou_02', 'ou_03', 'ou_04', 'ou_05'],
122+
pe: ['pe_01'],
123+
},
124+
},
125+
},
126+
index: 1,
127+
},
128+
{
129+
request: {
130+
query: 'query_name',
131+
variables: {
132+
variables: {
133+
dx: ['dx_01'],
134+
ou: ['ou_06', 'ou_07', 'ou_08', 'ou_09', 'ou_10'],
135+
pe: ['pe_01'],
136+
},
137+
},
138+
},
139+
index: 1,
140+
},
141+
{
142+
request: {
143+
query: 'query_name',
144+
variables: {
145+
variables: {
146+
dx: ['dx_01'],
147+
ou: ['ou_11', 'ou_12'],
148+
pe: ['pe_01'],
149+
},
150+
},
151+
},
152+
index: 1,
153+
},
154+
{
155+
request: {
156+
query: 'query_name',
157+
variables: {
158+
variables: {
159+
dx: ['dx_01', 'dx_02', 'dx_03', 'dx_04'],
160+
ou: ['ou_01'],
161+
pe: ['pe_01'],
162+
},
163+
},
164+
},
165+
index: 1,
166+
},
167+
{
168+
request: {
169+
query: 'query_name',
170+
variables: {
171+
variables: {
172+
dx: ['dx_01'],
173+
ou: ['ou_01'],
174+
pe: ['pe_01', 'pe_02'],
175+
},
176+
},
177+
},
178+
index: 1,
179+
},
180+
]
181+
expect(result).toEqual(EXPECTED)
182+
})
183+
it('chunks mix of items', () => {
184+
const MOCK_VARIABLES = {
185+
dx: ['dx_01', 'dx_02', 'dx_03', 'dx_04', 'dx_05', 'dx_06', 'dx_07'],
186+
pe: [
187+
'pe_01',
188+
'pe_02',
189+
'pe_03',
190+
'pe_04',
191+
'pe_05',
192+
'pe_06',
193+
'pe_07',
194+
'pe_08',
195+
'pe_09',
196+
],
197+
ou: [
198+
'ou_01',
199+
'ou_02',
200+
'ou_03',
201+
'ou_04',
202+
'ou_05',
203+
'ou_06',
204+
'ou_07',
205+
'ou_08',
206+
'ou_09',
207+
'ou_10',
208+
'ou_11',
209+
'ou_12',
210+
],
211+
}
212+
213+
const result = getMetadataByRequest({
214+
engine: MOCK_ENGINE,
215+
variables: MOCK_VARIABLES,
216+
index: 1,
217+
chunkSize: 5,
218+
})
219+
220+
const EXPECTED = [
221+
{
222+
request: {
223+
query: 'query_name',
224+
variables: {
225+
variables: {
226+
dx: ['dx_01'],
227+
ou: ['ou_01', 'ou_02', 'ou_03', 'ou_04', 'ou_05'],
228+
pe: ['pe_01'],
229+
},
230+
},
231+
},
232+
index: 1,
233+
},
234+
{
235+
request: {
236+
query: 'query_name',
237+
variables: {
238+
variables: {
239+
dx: ['dx_01'],
240+
ou: ['ou_06', 'ou_07', 'ou_08', 'ou_09', 'ou_10'],
241+
pe: ['pe_01'],
242+
},
243+
},
244+
},
245+
index: 1,
246+
},
247+
{
248+
request: {
249+
query: 'query_name',
250+
variables: {
251+
variables: {
252+
dx: ['dx_01'],
253+
ou: ['ou_11', 'ou_12'],
254+
pe: ['pe_01'],
255+
},
256+
},
257+
},
258+
index: 1,
259+
},
260+
{
261+
request: {
262+
query: 'query_name',
263+
variables: {
264+
variables: {
265+
dx: ['dx_01', 'dx_02', 'dx_03', 'dx_04', 'dx_05'],
266+
ou: ['ou_01'],
267+
pe: ['pe_01'],
268+
},
269+
},
270+
},
271+
index: 1,
272+
},
273+
{
274+
request: {
275+
query: 'query_name',
276+
variables: {
277+
variables: {
278+
dx: ['dx_06', 'dx_07'],
279+
ou: ['ou_01'],
280+
pe: ['pe_01'],
281+
},
282+
},
283+
},
284+
index: 1,
285+
},
286+
{
287+
request: {
288+
query: 'query_name',
289+
variables: {
290+
variables: {
291+
dx: ['dx_01'],
292+
ou: ['ou_01'],
293+
pe: ['pe_01', 'pe_02', 'pe_03', 'pe_04', 'pe_05'],
294+
},
295+
},
296+
},
297+
index: 1,
298+
},
299+
{
300+
request: {
301+
query: 'query_name',
302+
variables: {
303+
variables: {
304+
dx: ['dx_01'],
305+
ou: ['ou_01'],
306+
pe: ['pe_06', 'pe_07', 'pe_08', 'pe_09'],
307+
},
308+
},
309+
},
310+
index: 1,
311+
},
312+
]
313+
expect(result).toEqual(EXPECTED)
314+
})
315+
})

0 commit comments

Comments
 (0)