From 0fab3497c0f9a6791734b400ec54cab63a66f8e9 Mon Sep 17 00:00:00 2001 From: Troy Morehouse <troymore@nbnet.nb.ca> Date: Tue, 7 Apr 2020 16:42:32 -0300 Subject: [PATCH 1/7] chore(b-form-file): additional unit tests --- src/components/form-file/form-file.spec.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/components/form-file/form-file.spec.js b/src/components/form-file/form-file.spec.js index fc1d1fe3d57..fd6dffe3e2f 100644 --- a/src/components/form-file/form-file.spec.js +++ b/src/components/form-file/form-file.spec.js @@ -232,22 +232,35 @@ describe('form-file', () => { // Emulate the files array wrapper.vm.setFiles(files) + awaitwaitNT(wrapper.vm) expect(wrapper.emitted('input')).toBeDefined() expect(wrapper.emitted('input').length).toEqual(1) expect(wrapper.emitted('input')[0][0]).toEqual(files) // Setting to same array of files should not emit event wrapper.vm.setFiles(files) + awaitwaitNT(wrapper.vm) expect(wrapper.emitted('input')).toBeDefined() expect(wrapper.emitted('input').length).toEqual(1) // Setting to new array of same files should not emit event wrapper.vm.setFiles([file1, file2]) + awaitwaitNT(wrapper.vm) expect(wrapper.emitted('input').length).toEqual(1) // Setting to array of new files should emit event wrapper.vm.setFiles(files.slice().reverse()) + awaitwaitNT(wrapper.vm) expect(wrapper.emitted('input').length).toEqual(2) + expect(wrapper.emitted('input')[1][0]).toEqual(files.slice().reverse()) + + // Internally setting `selectedFile` to `null` should emit empty array + wrapper.setData({ + selectedFile: null + }) + awaitwaitNT(wrapper.vm) + expect(wrapper.emitted('input').length).toEqual(3) + expect(wrapper.emitted('input')[2][0]).toEqual([]) wrapper.destroy() }) From ce6064cb68003239a393592d2c2fd5868016315c Mon Sep 17 00:00:00 2001 From: Troy Morehouse <troymore@nbnet.nb.ca> Date: Tue, 7 Apr 2020 16:44:40 -0300 Subject: [PATCH 2/7] Update form-file.spec.js --- src/components/form-file/form-file.spec.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/form-file/form-file.spec.js b/src/components/form-file/form-file.spec.js index fd6dffe3e2f..dd0f37f39b1 100644 --- a/src/components/form-file/form-file.spec.js +++ b/src/components/form-file/form-file.spec.js @@ -232,25 +232,25 @@ describe('form-file', () => { // Emulate the files array wrapper.vm.setFiles(files) - awaitwaitNT(wrapper.vm) + await waitNT(wrapper.vm) expect(wrapper.emitted('input')).toBeDefined() expect(wrapper.emitted('input').length).toEqual(1) expect(wrapper.emitted('input')[0][0]).toEqual(files) // Setting to same array of files should not emit event wrapper.vm.setFiles(files) - awaitwaitNT(wrapper.vm) + await waitNT(wrapper.vm) expect(wrapper.emitted('input')).toBeDefined() expect(wrapper.emitted('input').length).toEqual(1) // Setting to new array of same files should not emit event wrapper.vm.setFiles([file1, file2]) - awaitwaitNT(wrapper.vm) + await waitNT(wrapper.vm) expect(wrapper.emitted('input').length).toEqual(1) // Setting to array of new files should emit event wrapper.vm.setFiles(files.slice().reverse()) - awaitwaitNT(wrapper.vm) + await waitNT(wrapper.vm) expect(wrapper.emitted('input').length).toEqual(2) expect(wrapper.emitted('input')[1][0]).toEqual(files.slice().reverse()) @@ -258,7 +258,7 @@ describe('form-file', () => { wrapper.setData({ selectedFile: null }) - awaitwaitNT(wrapper.vm) + await waitNT(wrapper.vm) expect(wrapper.emitted('input').length).toEqual(3) expect(wrapper.emitted('input')[2][0]).toEqual([]) From 8ac054a99a3c0e8b9e9275e755db8eb2487bfec1 Mon Sep 17 00:00:00 2001 From: Troy Morehouse <troymore@nbnet.nb.ca> Date: Tue, 7 Apr 2020 16:58:45 -0300 Subject: [PATCH 3/7] Update form-file.spec.js --- src/components/form-file/form-file.spec.js | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/components/form-file/form-file.spec.js b/src/components/form-file/form-file.spec.js index dd0f37f39b1..69cccfde108 100644 --- a/src/components/form-file/form-file.spec.js +++ b/src/components/form-file/form-file.spec.js @@ -511,6 +511,36 @@ describe('form-file', () => { wrapper.destroy() }) + it('drag placeholder works', async () => { + const wrapper = mount(BFormFile, { + propsData: { + id: 'foo', + placeholder: 'PLACEHOLDER', + dropPlaceholder: 'DROPHERE' + } + }) + + expect(wrapper.isVueInstance()).toBe(true) + const $label = wrapper.find('label') + expect($label.exists()).toBe(true) + expect($label.text()).toContain('PLACEHOLDER') + expect($label.text()).not.toContain('DROPHERE') + + wrapper.trigger('dragover') + await waitNT(wrapper.vm) + + expect($label.text()).not.toContain('PLACEHOLDER') + expect($label.text()).toContain('DROPHERE') + + wrapper.trigger('dragleave') + await waitNT(wrapper.vm) + + expect($label.text()).toContain('PLACEHOLDER') + expect($label.text()).not.toContain('DROPHERE') + + wrapper.destroy() + }) + // These tests are wrapped in a new describe to limit the scope of the getBCR Mock describe('prop `autofocus`', () => { const origGetBCR = Element.prototype.getBoundingClientRect From ecad0885e1a4d60d077b49564dd2fe96d3fc0bae Mon Sep 17 00:00:00 2001 From: Troy Morehouse <troymore@nbnet.nb.ca> Date: Tue, 7 Apr 2020 17:01:12 -0300 Subject: [PATCH 4/7] Update form-file.js --- src/components/form-file/form-file.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/form-file/form-file.js b/src/components/form-file/form-file.js index 72787d75d80..96e22e4281b 100644 --- a/src/components/form-file/form-file.js +++ b/src/components/form-file/form-file.js @@ -225,16 +225,18 @@ export const BFormFile = /*#__PURE__*/ Vue.extend({ // Triggered when the parent form (if any) is reset this.selectedFile = this.multiple ? [] : null }, - onDragover(evt) /* istanbul ignore next: difficult to test in JSDOM */ { + onDragover(evt) { evt.preventDefault() evt.stopPropagation() if (this.noDrop || !this.custom) { return } this.dragging = true - evt.dataTransfer.dropEffect = 'copy' + try { + evt.dataTransfer.dropEffect = 'copy' + } catch {} }, - onDragleave(evt) /* istanbul ignore next: difficult to test in JSDOM */ { + onDragleave(evt) { evt.preventDefault() evt.stopPropagation() this.dragging = false From 451e5f7d5a6b1f24333bfb1b34327355a629b6d5 Mon Sep 17 00:00:00 2001 From: Troy Morehouse <troymore@nbnet.nb.ca> Date: Tue, 7 Apr 2020 17:11:53 -0300 Subject: [PATCH 5/7] Update form-file.spec.js --- src/components/form-file/form-file.spec.js | 40 ++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/components/form-file/form-file.spec.js b/src/components/form-file/form-file.spec.js index 69cccfde108..e01360f7b9b 100644 --- a/src/components/form-file/form-file.spec.js +++ b/src/components/form-file/form-file.spec.js @@ -511,14 +511,19 @@ describe('form-file', () => { wrapper.destroy() }) - it('drag placeholder works', async () => { + it('drag placeholder and drop works', async () => { const wrapper = mount(BFormFile, { propsData: { id: 'foo', placeholder: 'PLACEHOLDER', - dropPlaceholder: 'DROPHERE' + dropPlaceholder: 'DROPHERE', + noDrop: true } }) + const file = new File(['foo'], 'foo.txt', { + type: 'text/plain', + lastModified: Date.now() + }) expect(wrapper.isVueInstance()).toBe(true) const $label = wrapper.find('label') @@ -529,6 +534,20 @@ describe('form-file', () => { wrapper.trigger('dragover') await waitNT(wrapper.vm) + expect($label.text()).toContain('PLACEHOLDER') + expect($label.text()).not.toContain('DROPHERE') + + wrapper.setProps({ + noDrop: false + }) + await waitNT(wrapper.vm) + + expect($label.text()).toContain('PLACEHOLDER') + expect($label.text()).not.toContain('DROPHERE') + + wrapper.trigger('dragover') + await waitNT(wrapper.vm) + expect($label.text()).not.toContain('PLACEHOLDER') expect($label.text()).toContain('DROPHERE') @@ -538,6 +557,23 @@ describe('form-file', () => { expect($label.text()).toContain('PLACEHOLDER') expect($label.text()).not.toContain('DROPHERE') + wrapper.trigger('dragover') + await waitNT(wrapper.vm) + + expect($label.text()).not.toContain('PLACEHOLDER') + expect($label.text()).toContain('DROPHERE') + + wrapper.trigger('drop', { + dataTransfer: { + files: [file] + } + }) + await waitNT(wrapper.vm) + + expect($label.text()).not.toContain('PLACEHOLDER') + expect($label.text()).not.toContain('DROPHERE') + expect($label.text()).toContain(file.name) + wrapper.destroy() }) From 922654f39f8d70cff906b5588b206c7526394099 Mon Sep 17 00:00:00 2001 From: Troy Morehouse <troymore@nbnet.nb.ca> Date: Tue, 7 Apr 2020 17:16:22 -0300 Subject: [PATCH 6/7] Update form-file.js --- src/components/form-file/form-file.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/form-file/form-file.js b/src/components/form-file/form-file.js index 96e22e4281b..e9c7b64be11 100644 --- a/src/components/form-file/form-file.js +++ b/src/components/form-file/form-file.js @@ -241,7 +241,7 @@ export const BFormFile = /*#__PURE__*/ Vue.extend({ evt.stopPropagation() this.dragging = false }, - onDrop(evt) /* istanbul ignore next: difficult to test in JSDOM */ { + onDrop(evt) { evt.preventDefault() evt.stopPropagation() if (this.noDrop) { From 1c7889e19fc8ce2f0e1c001ed008d17e81bfc5ec Mon Sep 17 00:00:00 2001 From: Troy Morehouse <troymore@nbnet.nb.ca> Date: Tue, 7 Apr 2020 17:29:10 -0300 Subject: [PATCH 7/7] Update form-file.spec.js --- src/components/form-file/form-file.spec.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/components/form-file/form-file.spec.js b/src/components/form-file/form-file.spec.js index e01360f7b9b..5a5233a26fb 100644 --- a/src/components/form-file/form-file.spec.js +++ b/src/components/form-file/form-file.spec.js @@ -537,6 +537,17 @@ describe('form-file', () => { expect($label.text()).toContain('PLACEHOLDER') expect($label.text()).not.toContain('DROPHERE') + wrapper.trigger('drop', { + dataTransfer: { + files: [file] + } + }) + await waitNT(wrapper.vm) + + expect($label.text()).toContain('PLACEHOLDER') + expect($label.text()).not.toContain('DROPHERE') + expect($label.text()).not.toContain(file.name) + wrapper.setProps({ noDrop: false })