Skip to content

Commit 5adb514

Browse files
authored
Merge pull request #23 from odranoelBR/develop
Develop
2 parents 44599bb + b650003 commit 5adb514

File tree

3 files changed

+209
-27
lines changed

3 files changed

+209
-27
lines changed

test/jest/__tests__/Crud.spec.js

Lines changed: 200 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import response from './response.json'
66

77
jest.mock('axios');
88

9-
axios.get.mockResolvedValue([]);
10-
119
beforeAll(() => {
1210
jest.spyOn(console, 'warn').mockImplementation(() => { });
1311
jest.spyOn(console, 'error').mockImplementation(() => { });
@@ -22,11 +20,12 @@ const defaultPropsData = () => ({
2220
})
2321

2422
let returnData = [
25-
{ id: 1, first_name: 'Brominator', 'email': 'bro@gmail.com' },
26-
{ id: 2, first_name: 'Foo f', 'email': 'foo@gmail.com' }
23+
{ id: 1, first_name: 'Brominator', email: 'bro@gmail.com' },
24+
{ id: 2, first_name: 'Foo f', email: 'foo@gmail.com' }
2725
]
2826

2927
test('all columns enabled to create', () => {
28+
axios.get.mockResolvedValueOnce([]);
3029

3130
const wrapper = mountQuasar(Crud, {
3231
propsData: defaultPropsData()
@@ -36,7 +35,7 @@ test('all columns enabled to create', () => {
3635
})
3736

3837
test('at least one row was selected', () => {
39-
axios.get.mockResolvedValue(returnData);
38+
axios.get.mockResolvedValueOnce(returnData);
4039

4140
const wrapper = mountQuasar(Crud, {
4241
propsData: defaultPropsData()
@@ -47,6 +46,8 @@ test('at least one row was selected', () => {
4746
})
4847

4948
test('using customSelected slot', () => {
49+
axios.get.mockResolvedValueOnce([]);
50+
5051
const wrapper = mountQuasar(Crud, {
5152
propsData: defaultPropsData(),
5253
slots: {
@@ -58,6 +59,8 @@ test('using customSelected slot', () => {
5859
})
5960

6061
test('get fields with validation', () => {
62+
axios.get.mockResolvedValueOnce([]);
63+
6164
const props = defaultPropsData()
6265

6366
const wrapper = mountQuasar(Crud, {
@@ -69,8 +72,7 @@ test('get fields with validation', () => {
6972
})
7073

7174
test('custom message delete with function after user select', () => {
72-
73-
axios.get.mockResolvedValue(returnData);
75+
axios.get.mockResolvedValueOnce(returnData);
7476

7577
const props = defaultPropsData()
7678
props.msgDelete = row => `Deleted ${row.first_name} ?`
@@ -86,7 +88,7 @@ test('custom message delete with function after user select', () => {
8688

8789
test('custom title delete with function after user select', () => {
8890

89-
axios.get.mockResolvedValue(returnData);
91+
axios.get.mockResolvedValueOnce(returnData);
9092

9193
const props = defaultPropsData()
9294
props.titleDelete = row => `Do you want delete ${row.first_name} ?`
@@ -103,6 +105,8 @@ test('custom title delete with function after user select', () => {
103105

104106
test('get fields with validation', () => {
105107

108+
axios.get.mockResolvedValueOnce();
109+
106110
const props = defaultPropsData()
107111

108112
const wrapper = mountQuasar(Crud, {
@@ -117,15 +121,14 @@ test('get fields with validation', () => {
117121
test('mount component without make requests', () => {
118122

119123
const props = defaultPropsData()
120-
121124
props.getOnStart = false
122125

123-
const spyOnGet = jest.spyOn(Crud.methods, 'get')
124-
125126
const wrapper = mountQuasar(Crud, {
126127
propsData: props
127128
})
128129

130+
const spyOnGet = jest.spyOn(wrapper.vm, 'get')
131+
129132
expect(spyOnGet).not.toBeCalled()
130133
})
131134

@@ -136,12 +139,12 @@ test('make a get request ONLY when param change', async () => {
136139
props.getOnStart = false
137140
props.getOnParamChange = true
138141

139-
const spyOnGet = jest.spyOn(Crud.methods, 'get')
140-
141142
const wrapper = mountQuasar(Crud, {
142143
propsData: props
143144
})
144145

146+
const spyOnGet = jest.spyOn(wrapper.vm, 'get')
147+
145148
expect(spyOnGet).not.toBeCalled()
146149

147150
await wrapper.setProps({ params: 'id=5' })
@@ -162,7 +165,7 @@ test('only email column are visible to create', () => {
162165
expect(wrapper.vm.columnsToRender).toHaveLength(1)
163166
})
164167

165-
test('api url mounting defalt mouting', () => {
168+
test('api url mounting default mouting', () => {
166169

167170
const props = defaultPropsData()
168171

@@ -175,6 +178,20 @@ test('api url mounting defalt mouting', () => {
175178
expect(wrapper.vm.apiUri).toBe('people?page=1&per_page=3&sort=,asc')
176179
})
177180

181+
test('api url mounting no server side pagination', () => {
182+
183+
const props = defaultPropsData()
184+
185+
props.api = 'people'
186+
props.paginationServerSide = false
187+
188+
const wrapper = mountQuasar(Crud, {
189+
propsData: props
190+
})
191+
192+
expect(wrapper.vm.apiUri).toBe('people')
193+
})
194+
178195
test('object to save mounting empty', () => {
179196

180197
axios.get.mockResolvedValue([]);
@@ -261,13 +278,13 @@ test('open modal without data', () => {
261278
const wrapper = mountQuasar(Crud, {
262279
propsData: props
263280
})
264-
const spyOnResetColumnsValuesMethod = jest.spyOn(wrapper.vm, 'resetColumnsValues')
281+
const spyOnResetColumnValuesMethod = jest.spyOn(wrapper.vm, 'resetColumnValues')
265282

266283
expect(wrapper.vm.modalOpened).toBeFalsy()
267284
wrapper.vm.toggleModal()
268285

269286
expect(wrapper.vm.modalOpened).toBeTruthy()
270-
expect(spyOnResetColumnsValuesMethod).toHaveBeenCalled()
287+
expect(spyOnResetColumnValuesMethod).toHaveBeenCalled()
271288
})
272289
test('open modal with data after select a row ', () => {
273290

@@ -280,13 +297,13 @@ test('open modal with data after select a row ', () => {
280297

281298
wrapper.setData({ selected: [returnData[0]] })// select a row
282299

283-
const spyOnResetColumnsValuesMethod = jest.spyOn(wrapper.vm, 'populateColumnsWithSelectedRow')
300+
const spyOnPopulateColumnsWithSelectedRow = jest.spyOn(wrapper.vm, 'populateColumnsWithSelectedRow')
284301

285302
expect(wrapper.vm.modalOpened).toBeFalsy()
286303
wrapper.vm.toggleModalWithData()
287304

288305
expect(wrapper.vm.modalOpened).toBeTruthy()
289-
expect(spyOnResetColumnsValuesMethod).toHaveBeenCalled()
306+
expect(spyOnPopulateColumnsWithSelectedRow).toHaveBeenCalled()
290307
})
291308

292309
test('get $emit successOnGet event', async () => {
@@ -322,6 +339,22 @@ test('o succefull get set the total size from api', async () => {
322339
expect(wrapper.vm.pagination.rowsNumber).toBe(12)
323340
})
324341

342+
test('get $emit errorOnGet event', async () => {
343+
344+
axios.get.mockRejectedValue('error msg')
345+
346+
const props = defaultPropsData()
347+
348+
const wrapper = mountQuasar(Crud, {
349+
propsData: props
350+
})
351+
352+
await wrapper.vm.$nextTick()
353+
await wrapper.vm.$nextTick()
354+
355+
expect(wrapper.emitted().errorOnGet).toBeTruthy()
356+
})
357+
325358
test('delete $emit successOnDelete event', async () => {
326359

327360
axios.delete.mockResolvedValue();
@@ -340,6 +373,25 @@ test('delete $emit successOnDelete event', async () => {
340373

341374
})
342375

376+
test('delete $emit errorOnDelete event', async () => {
377+
378+
axios.delete.mockRejectedValue('error msg')
379+
380+
const props = defaultPropsData()
381+
382+
const wrapper = mountQuasar(Crud, {
383+
propsData: props
384+
})
385+
386+
wrapper.setData({ selected: [returnData[0]] })
387+
wrapper.vm.delete()
388+
389+
await wrapper.vm.$nextTick()
390+
await wrapper.vm.$nextTick()
391+
392+
expect(wrapper.emitted().errorOnDelete).toBeTruthy()
393+
})
394+
343395
test('put $emit successOnPut event', async () => {
344396

345397
axios.put.mockResolvedValue();
@@ -350,14 +402,33 @@ test('put $emit successOnPut event', async () => {
350402
propsData: props
351403
})
352404
wrapper.setData({ selected: [returnData[0]] })
405+
wrapper.vm.save()
353406

354-
wrapper.vm.put()
355407
await wrapper.vm.$nextTick()
356408

357409
expect(wrapper.emitted().successOnPut).toBeTruthy()
358410

359411
})
360412

413+
test('put $emit errorOnPut event', async () => {
414+
415+
axios.put.mockRejectedValue('error msg')
416+
417+
const props = defaultPropsData()
418+
419+
const wrapper = mountQuasar(Crud, {
420+
propsData: props
421+
})
422+
423+
wrapper.setData({ selected: [returnData[0]] })
424+
wrapper.vm.save()
425+
426+
await wrapper.vm.$nextTick()
427+
await wrapper.vm.$nextTick()
428+
429+
expect(wrapper.emitted().errorOnPut).toBeTruthy()
430+
})
431+
361432
test('post $emit successOnPost event', async () => {
362433

363434
axios.post.mockResolvedValue();
@@ -367,15 +438,32 @@ test('post $emit successOnPost event', async () => {
367438
const wrapper = mountQuasar(Crud, {
368439
propsData: props
369440
})
370-
wrapper.setData({ selected: [returnData[0]] })
371441

372-
wrapper.vm.post()
442+
wrapper.vm.save()
373443
await wrapper.vm.$nextTick()
374444

375445
expect(wrapper.emitted().successOnPost).toBeTruthy()
376446

377447
})
378448

449+
test('post $emit errorOnPost event', async () => {
450+
451+
axios.post.mockRejectedValue('error msg')
452+
453+
const props = defaultPropsData()
454+
455+
const wrapper = mountQuasar(Crud, {
456+
propsData: props
457+
})
458+
459+
wrapper.vm.save()
460+
461+
await wrapper.vm.$nextTick()
462+
await wrapper.vm.$nextTick()
463+
464+
expect(wrapper.emitted().errorOnPost).toBeTruthy()
465+
})
466+
379467
test('reset validation when saving with validation errors, dont make requests', () => {
380468

381469
axios.get.mockResolvedValue(returnData);
@@ -440,3 +528,94 @@ test('save start put request because at least one row are selected', () => {
440528
expect(spyOnPut).toBeCalled()
441529
expect(spyOnPost).not.toBeCalled()
442530
})
531+
532+
test('request update pagination', () => {
533+
534+
const props = defaultPropsData()
535+
const wrapper = mountQuasar(Crud, {
536+
propsData: props
537+
})
538+
539+
wrapper.vm.request({ pagination: { page: 5, rowsPerPage: 10 } })
540+
541+
expect(wrapper.vm.pagination).toStrictEqual({ page: 5, rowsPerPage: 10 })
542+
})
543+
544+
// test('request fetch remote data', async () => {
545+
546+
// const props = defaultPropsData()
547+
// const wrapper = await mountQuasar(Crud, {
548+
// propsData: props
549+
// })
550+
551+
552+
// const spyOnGet = jest.spyOn(wrapper.vm, 'get')
553+
554+
// wrapper.vm.request({ pagination: { page: 5, rowsPerPage: 10 } })
555+
556+
// await wrapper.vm.$nextTick()
557+
// expect(spyOnGet).toHaveBeenCalledTimes(2)
558+
// })
559+
560+
test('reset column values with proper types (string and array)', async () => {
561+
562+
returnData[1]['first_name'] = 'boy'
563+
returnData[1]['email'] = [{}, {}]
564+
axios.get.mockResolvedValue(returnData);
565+
566+
const props = defaultPropsData()
567+
568+
const wrapper = await mountQuasar(Crud, {
569+
propsData: props
570+
})
571+
572+
wrapper.setData({ selected: [returnData[1]] })
573+
wrapper.vm.populateColumnsWithSelectedRow()
574+
wrapper.vm.resetColumnValues()
575+
576+
expect(wrapper.vm.columns[0].value).toBe("")
577+
expect(wrapper.vm.columns[1].value).toStrictEqual([])
578+
})
579+
test('reset column values with proper types ( Boolean and Number)', async () => {
580+
581+
returnData[1].first_name = 199
582+
returnData[1].email = true
583+
axios.get.mockResolvedValue(returnData);
584+
585+
const props = defaultPropsData()
586+
587+
const wrapper = await mountQuasar(Crud, {
588+
propsData: props
589+
})
590+
591+
wrapper.setData({ selected: [returnData[1]] })
592+
wrapper.vm.populateColumnsWithSelectedRow()
593+
wrapper.vm.resetColumnValues()
594+
595+
expect(wrapper.vm.columns[0].value).toBe(0)
596+
expect(wrapper.vm.columns[1].value).toBe("")
597+
})
598+
599+
test('reset column values static config', async () => {
600+
601+
returnData[1].first_name = 'Brother Lee'
602+
axios.get.mockResolvedValue(returnData);
603+
604+
const props = defaultPropsData()
605+
props.columns[0].static = true
606+
607+
const wrapper = await mountQuasar(Crud, {
608+
propsData: props
609+
})
610+
611+
wrapper.setData({ selected: [returnData[1]] })
612+
613+
expect(wrapper.vm.columns[0].value).toStrictEqual("")
614+
615+
wrapper.vm.populateColumnsWithSelectedRow()
616+
expect(wrapper.vm.columns[0].value).toStrictEqual("Brother Lee")
617+
618+
wrapper.vm.resetColumnValues()
619+
expect(wrapper.vm.columns[0].value).toStrictEqual("Brother Lee")
620+
621+
})

test/jest/__tests__/columns.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ export default [
2121
field: 'email',
2222
sortable: true,
2323
qComponent: 'QInput',
24-
static: true,
2524
value: '',
2625
size: '6',
2726
showCreate: true,

0 commit comments

Comments
 (0)