@@ -22,41 +22,36 @@ import CollectionCounts from 'gmp/collection/collectioncounts';
22
22
import { setLocale } from 'gmp/locale/lang' ;
23
23
24
24
import Filter from 'gmp/models/filter' ;
25
- import CPE from 'gmp/models/cpe' ;
25
+ import Cpe from 'gmp/models/cpe' ;
26
26
27
27
import { entitiesLoadingActions } from 'web/store/entities/cpes' ;
28
28
29
+ import {
30
+ cpeEntity ,
31
+ createExportCpesByIdsQueryMock ,
32
+ createExportCpesByFilterQueryMock ,
33
+ createGetCpesQueryMock ,
34
+ } from 'web/graphql/__mocks__/cpes' ;
35
+
29
36
import { setTimezone , setUsername } from 'web/store/usersettings/actions' ;
30
37
import { defaultFilterLoadingActions } from 'web/store/usersettings/defaultfilters/actions' ;
31
38
import { loadingActions } from 'web/store/usersettings/defaults/actions' ;
32
39
33
- import { rendererWith , fireEvent , screen , wait } from 'web/utils/testing' ;
40
+ import {
41
+ rendererWith ,
42
+ waitFor ,
43
+ fireEvent ,
44
+ screen ,
45
+ wait ,
46
+ } from 'web/utils/testing' ;
34
47
35
48
import CpesPage , { ToolBarIcons } from '../listpage' ;
36
49
37
50
setLocale ( 'en' ) ;
38
51
39
52
window . URL . createObjectURL = jest . fn ( ) ;
40
53
41
- const cpe = CPE . fromElement ( {
42
- _id : 'cpe:/a:foo' ,
43
- name : 'foo' ,
44
- title : 'bar' ,
45
- creation_time : '2019-06-24T11:55:30Z' ,
46
- modification_time : '2019-06-24T10:12:27Z' ,
47
- update_time : '2019-06-24T10:12:27Z' ,
48
- cve_refs : '3' ,
49
- cves : {
50
- cve : [
51
- { entry : { cvss : { base_metrics : { score : 9.8 } } , _id : 'CVE-2020-1234' } } ,
52
- { entry : { cvss : { base_metrics : { score : 7.8 } } , _id : 'CVE-2020-5678' } } ,
53
- { entry : { cvss : { base_metrics : { score : 7.8 } } , _id : 'CVE-2019-5678' } } ,
54
- ] ,
55
- } ,
56
- score : 98 ,
57
- status : '' ,
58
- nvd_id : '' ,
59
- } ) ;
54
+ const cpeObject = Cpe . fromObject ( cpeEntity ) ;
60
55
61
56
const reloadInterval = - 1 ;
62
57
const manualUrl = 'test/' ;
@@ -105,7 +100,7 @@ beforeEach(() => {
105
100
) ;
106
101
107
102
getCpes = jest . fn ( ) . mockResolvedValue ( {
108
- data : [ cpe ] ,
103
+ data : [ cpeObject ] ,
109
104
meta : {
110
105
filter : Filter . fromString ( ) ,
111
106
counts : new CollectionCounts ( ) ,
@@ -135,17 +130,24 @@ describe('CpesPage tests', () => {
135
130
user : { currentSettings, getSetting} ,
136
131
} ;
137
132
133
+ const filterString = 'foo=bar rows=2' ;
134
+ const defaultSettingfilter = Filter . fromString ( filterString ) ;
135
+ const [ mock , resultFunc ] = createGetCpesQueryMock ( {
136
+ filterString,
137
+ first : 2 ,
138
+ } ) ;
139
+
138
140
const { render, store} = rendererWith ( {
139
141
gmp,
140
142
capabilities : true ,
141
143
store : true ,
142
144
router : true ,
145
+ queryMocks : [ mock ] ,
143
146
} ) ;
144
147
145
148
store . dispatch ( setTimezone ( 'CET' ) ) ;
146
149
store . dispatch ( setUsername ( 'admin' ) ) ;
147
150
148
- const defaultSettingfilter = Filter . fromString ( 'foo=bar' ) ;
149
151
store . dispatch ( loadingActions . success ( { rowsperpage : { value : '2' } } ) ) ;
150
152
store . dispatch (
151
153
defaultFilterLoadingActions . success ( 'cpe' , defaultSettingfilter ) ,
@@ -161,13 +163,17 @@ describe('CpesPage tests', () => {
161
163
const filter = Filter . fromString ( 'first=1 rows=10' ) ;
162
164
const loadedFilter = Filter . fromString ( 'first=1 rows=10' ) ;
163
165
store . dispatch (
164
- entitiesLoadingActions . success ( [ cpe ] , filter , loadedFilter , counts ) ,
166
+ entitiesLoadingActions . success ( [ cpeObject ] , filter , loadedFilter , counts ) ,
165
167
) ;
166
168
167
169
const { baseElement} = render ( < CpesPage /> ) ;
168
170
169
171
await wait ( ) ;
170
172
173
+ expect ( resultFunc ) . toHaveBeenCalled ( ) ;
174
+
175
+ await waitFor ( ( ) => baseElement . querySelectorAll ( 'table' ) ) ;
176
+
171
177
const display = screen . getAllByTestId ( 'grid-item' ) ;
172
178
const inputs = baseElement . querySelectorAll ( 'input' ) ;
173
179
const selects = screen . getAllByTestId ( 'select-selected-value' ) ;
@@ -209,28 +215,18 @@ describe('CpesPage tests', () => {
209
215
210
216
expect ( row [ 1 ] ) . toHaveTextContent ( 'foo' ) ;
211
217
expect ( row [ 1 ] ) . toHaveTextContent ( 'bar' ) ;
212
- expect ( row [ 1 ] ) . toHaveTextContent ( 'Mon, Jun 24, 2019 12:12 PM CEST' ) ;
218
+ expect ( row [ 1 ] ) . toHaveTextContent ( 'Tue, Sep 29, 2020 2:16 PM CEST' ) ;
213
219
expect ( row [ 1 ] ) . toHaveTextContent ( '3' ) ;
214
220
expect ( row [ 1 ] ) . toHaveTextContent ( '9.8 (High)' ) ;
215
221
} ) ;
216
222
217
223
test ( 'should allow to bulk action on page contents' , async ( ) => {
218
- const deleteByFilter = jest . fn ( ) . mockResolvedValue ( {
219
- foo : 'bar' ,
220
- } ) ;
221
-
222
- const exportByFilter = jest . fn ( ) . mockResolvedValue ( {
223
- foo : 'bar' ,
224
- } ) ;
225
-
226
224
const gmp = {
227
225
dashboard : {
228
226
getSetting : getDashboardSetting ,
229
227
} ,
230
228
cpes : {
231
229
get : getCpes ,
232
- deleteByFilter,
233
- exportByFilter,
234
230
getActiveDaysAggregates : getAggregates ,
235
231
getCreatedAggregates : getAggregates ,
236
232
getSeverityAggregates : getAggregates ,
@@ -242,18 +238,30 @@ describe('CpesPage tests', () => {
242
238
settings : { manualUrl, reloadInterval} ,
243
239
user : { renewSession, currentSettings, getSetting : getSetting } ,
244
240
} ;
241
+ const filterString = 'foo=bar rows=2' ;
242
+ const defaultSettingfilter = Filter . fromString ( filterString ) ;
243
+
244
+ const [ mock , resultFunc ] = createGetCpesQueryMock ( {
245
+ filterString,
246
+ first : 2 ,
247
+ } ) ;
248
+
249
+ const [
250
+ exportByIdsMock ,
251
+ exportByIdsResult ,
252
+ ] = createExportCpesByIdsQueryMock ( [ 'cpe:/a:foo' ] ) ;
245
253
246
254
const { render, store} = rendererWith ( {
247
255
gmp,
248
256
capabilities : true ,
249
257
store : true ,
250
258
router : true ,
259
+ queryMocks : [ mock , exportByIdsMock ] ,
251
260
} ) ;
252
261
253
262
store . dispatch ( setTimezone ( 'CET' ) ) ;
254
263
store . dispatch ( setUsername ( 'admin' ) ) ;
255
264
256
- const defaultSettingfilter = Filter . fromString ( 'foo=bar' ) ;
257
265
store . dispatch ( loadingActions . success ( { rowsperpage : { value : '2' } } ) ) ;
258
266
store . dispatch (
259
267
defaultFilterLoadingActions . success ( 'cpe' , defaultSettingfilter ) ,
@@ -269,13 +277,15 @@ describe('CpesPage tests', () => {
269
277
const filter = Filter . fromString ( 'first=1 rows=10' ) ;
270
278
const loadedFilter = Filter . fromString ( 'first=1 rows=10' ) ;
271
279
store . dispatch (
272
- entitiesLoadingActions . success ( [ cpe ] , filter , loadedFilter , counts ) ,
280
+ entitiesLoadingActions . success ( [ cpeObject ] , filter , loadedFilter , counts ) ,
273
281
) ;
274
282
275
283
render ( < CpesPage /> ) ;
276
284
277
285
await wait ( ) ;
278
286
287
+ expect ( resultFunc ) . toHaveBeenCalled ( ) ;
288
+
279
289
// export page contents
280
290
const exportIcon = screen . getAllByTitle ( 'Export page contents' ) ;
281
291
@@ -284,26 +294,16 @@ describe('CpesPage tests', () => {
284
294
285
295
await wait ( ) ;
286
296
287
- expect ( exportByFilter ) . toHaveBeenCalled ( ) ;
297
+ expect ( exportByIdsResult ) . toHaveBeenCalled ( ) ;
288
298
} ) ;
289
299
290
300
test ( 'should allow to bulk action on selected cpes' , async ( ) => {
291
- const deleteByIds = jest . fn ( ) . mockResolvedValue ( {
292
- foo : 'bar' ,
293
- } ) ;
294
-
295
- const exportByIds = jest . fn ( ) . mockResolvedValue ( {
296
- foo : 'bar' ,
297
- } ) ;
298
-
299
301
const gmp = {
300
302
dashboard : {
301
303
getSetting : getDashboardSetting ,
302
304
} ,
303
305
cpes : {
304
306
get : getCpes ,
305
- delete : deleteByIds ,
306
- export : exportByIds ,
307
307
getActiveDaysAggregates : getAggregates ,
308
308
getCreatedAggregates : getAggregates ,
309
309
getSeverityAggregates : getAggregates ,
@@ -315,18 +315,30 @@ describe('CpesPage tests', () => {
315
315
settings : { manualUrl, reloadInterval} ,
316
316
user : { renewSession, currentSettings, getSetting} ,
317
317
} ;
318
+ const filterString = 'foo=bar rows=2' ;
319
+ const defaultSettingfilter = Filter . fromString ( filterString ) ;
320
+
321
+ const [ mock , resultFunc ] = createGetCpesQueryMock ( {
322
+ filterString,
323
+ first : 2 ,
324
+ } ) ;
325
+
326
+ const [
327
+ exportByIdsMock ,
328
+ exportByIdsResult ,
329
+ ] = createExportCpesByIdsQueryMock ( [ 'cpe:/a:foo' ] ) ;
318
330
319
331
const { render, store} = rendererWith ( {
320
332
gmp,
321
333
capabilities : true ,
322
334
store : true ,
323
335
router : true ,
336
+ queryMocks : [ mock , exportByIdsMock ] ,
324
337
} ) ;
325
338
326
339
store . dispatch ( setTimezone ( 'CET' ) ) ;
327
340
store . dispatch ( setUsername ( 'admin' ) ) ;
328
341
329
- const defaultSettingfilter = Filter . fromString ( 'foo=bar' ) ;
330
342
store . dispatch ( loadingActions . success ( { rowsperpage : { value : '2' } } ) ) ;
331
343
store . dispatch (
332
344
defaultFilterLoadingActions . success ( 'cpe' , defaultSettingfilter ) ,
@@ -342,13 +354,15 @@ describe('CpesPage tests', () => {
342
354
const filter = Filter . fromString ( 'first=1 rows=10' ) ;
343
355
const loadedFilter = Filter . fromString ( 'first=1 rows=10' ) ;
344
356
store . dispatch (
345
- entitiesLoadingActions . success ( [ cpe ] , filter , loadedFilter , counts ) ,
357
+ entitiesLoadingActions . success ( [ cpeObject ] , filter , loadedFilter , counts ) ,
346
358
) ;
347
359
348
- const { element } = render ( < CpesPage /> ) ;
360
+ const { baseElement } = render ( < CpesPage /> ) ;
349
361
350
362
await wait ( ) ;
351
363
364
+ expect ( resultFunc ) . toHaveBeenCalled ( ) ;
365
+
352
366
const selectFields = screen . getAllByTestId ( 'select-open-button' ) ;
353
367
fireEvent . click ( selectFields [ 1 ] ) ;
354
368
@@ -358,7 +372,7 @@ describe('CpesPage tests', () => {
358
372
const selected = screen . getAllByTestId ( 'select-selected-value' ) ;
359
373
expect ( selected [ 1 ] ) . toHaveTextContent ( 'Apply to selection' ) ;
360
374
361
- const inputs = element . querySelectorAll ( 'input' ) ;
375
+ const inputs = baseElement . querySelectorAll ( 'input' ) ;
362
376
363
377
// select a cpe
364
378
fireEvent . click ( inputs [ 1 ] ) ;
@@ -372,26 +386,16 @@ describe('CpesPage tests', () => {
372
386
373
387
await wait ( ) ;
374
388
375
- expect ( exportByIds ) . toHaveBeenCalled ( ) ;
389
+ expect ( exportByIdsResult ) . toHaveBeenCalled ( ) ;
376
390
} ) ;
377
391
378
392
test ( 'should allow to bulk action on filtered cpes' , async ( ) => {
379
- const deleteByFilter = jest . fn ( ) . mockResolvedValue ( {
380
- foo : 'bar' ,
381
- } ) ;
382
-
383
- const exportByFilter = jest . fn ( ) . mockResolvedValue ( {
384
- foo : 'bar' ,
385
- } ) ;
386
-
387
393
const gmp = {
388
394
dashboard : {
389
395
getSetting : getDashboardSetting ,
390
396
} ,
391
397
cpes : {
392
398
get : getCpes ,
393
- deleteByFilter,
394
- exportByFilter,
395
399
getActiveDaysAggregates : getAggregates ,
396
400
getCreatedAggregates : getAggregates ,
397
401
getSeverityAggregates : getAggregates ,
@@ -403,18 +407,32 @@ describe('CpesPage tests', () => {
403
407
settings : { manualUrl, reloadInterval} ,
404
408
user : { renewSession, currentSettings, getSetting : getSetting } ,
405
409
} ;
410
+ const filterString = 'foo=bar rows=2' ;
411
+ const defaultSettingfilter = Filter . fromString ( filterString ) ;
412
+ const filter = Filter . fromString ( 'first=1 rows=10' ) ;
413
+ const loadedFilter = Filter . fromString ( 'first=1 rows=10' ) ;
414
+
415
+ const [ mock , resultFunc ] = createGetCpesQueryMock ( {
416
+ filterString,
417
+ first : 2 ,
418
+ } ) ;
419
+
420
+ const [
421
+ exportByFilterMock ,
422
+ exportByFilterResult ,
423
+ ] = createExportCpesByFilterQueryMock ( 'foo=bar rows=-1 first=1' ) ;
406
424
407
425
const { render, store} = rendererWith ( {
408
426
gmp,
409
427
capabilities : true ,
410
428
store : true ,
411
429
router : true ,
430
+ queryMocks : [ mock , exportByFilterMock ] ,
412
431
} ) ;
413
432
414
433
store . dispatch ( setTimezone ( 'CET' ) ) ;
415
434
store . dispatch ( setUsername ( 'admin' ) ) ;
416
435
417
- const defaultSettingfilter = Filter . fromString ( 'foo=bar' ) ;
418
436
store . dispatch ( loadingActions . success ( { rowsperpage : { value : '2' } } ) ) ;
419
437
store . dispatch (
420
438
defaultFilterLoadingActions . success ( 'cpe' , defaultSettingfilter ) ,
@@ -427,16 +445,17 @@ describe('CpesPage tests', () => {
427
445
length : 1 ,
428
446
rows : 10 ,
429
447
} ) ;
430
- const filter = Filter . fromString ( 'first=1 rows=10' ) ;
431
- const loadedFilter = Filter . fromString ( 'first=1 rows=10' ) ;
448
+
432
449
store . dispatch (
433
- entitiesLoadingActions . success ( [ cpe ] , filter , loadedFilter , counts ) ,
450
+ entitiesLoadingActions . success ( [ cpeObject ] , filter , loadedFilter , counts ) ,
434
451
) ;
435
452
436
453
render ( < CpesPage /> ) ;
437
454
438
455
await wait ( ) ;
439
456
457
+ expect ( resultFunc ) . toHaveBeenCalled ( ) ;
458
+
440
459
const selectFields = screen . getAllByTestId ( 'select-open-button' ) ;
441
460
fireEvent . click ( selectFields [ 1 ] ) ;
442
461
@@ -456,7 +475,7 @@ describe('CpesPage tests', () => {
456
475
457
476
await wait ( ) ;
458
477
459
- expect ( exportByFilter ) . toHaveBeenCalled ( ) ;
478
+ expect ( exportByFilterResult ) . toHaveBeenCalled ( ) ;
460
479
} ) ;
461
480
} ) ;
462
481
0 commit comments