From 83ca303e1f08157e598a3e579291d3eca2dd1a42 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Fri, 30 Aug 2019 11:30:22 -0400 Subject: [PATCH 1/2] Disable attachmentInput when file is attached (with tests this time) --- js/components/__tests__/upload_input.test.js | 36 ++++++++++++++++++++ js/components/upload_input.js | 2 ++ js/lib/upload.js | 2 +- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/js/components/__tests__/upload_input.test.js b/js/components/__tests__/upload_input.test.js index c2853cc7..aa9a593d 100644 --- a/js/components/__tests__/upload_input.test.js +++ b/js/components/__tests__/upload_input.test.js @@ -1,6 +1,7 @@ import { mount } from '@vue/test-utils' import uploadinput from '../upload_input' +import { MockUploader } from '../../lib/upload' import { makeTestWrapper } from '../../test_utils/component_test_helpers' @@ -60,4 +61,39 @@ describe('UploadInput Test', () => { const messageArea = wrapper.find('.usa-input__message') expect(messageArea.html()).toContain('Test Error Message') }) + + it('should disable the file input when a file is uploaded', done => { + const wrapper = mount(UploadErrorWrapper, { + propsData: { + initialData: {}, + }, + }) + + const component = wrapper.find(uploadinput) + const event = { target: { value: '', files: [{ name: '' }] } } + + component.setMethods({ + getUploader: async () => new MockUploader('token', 'objectName'), + }) + + component.vm.addAttachment(event).then(() => { + expect(component.vm.$refs.attachmentInput.disabled).toBe(true) + done() + }) + }) + + it('should enable the file input when the attachment is removed', () => { + const wrapper = mount(UploadErrorWrapper, { + propsData: { + initialData: { filename: 'filename.pdf', objectName: 'abcd' }, + }, + }) + + const event = { preventDefault: () => {}, target: { value: 'val' } } + const component = wrapper.find(uploadinput) + + component.vm.removeAttachment(event) + + expect(component.vm.$refs.attachmentInput.disabled).toBe(false) + }) }) diff --git a/js/components/upload_input.js b/js/components/upload_input.js index a0ad494c..3e9e6d63 100644 --- a/js/components/upload_input.js +++ b/js/components/upload_input.js @@ -81,6 +81,8 @@ export default { this.attachment = e.target.value this.$refs.attachmentFilename.value = file.name this.$refs.attachmentObjectName.value = response.objectName + this.$refs.attachmentInput.disabled = true + this.downloadLink = await this.getDownloadLink( file.name, response.objectName diff --git a/js/lib/upload.js b/js/lib/upload.js index 50fe3edd..41b87a37 100644 --- a/js/lib/upload.js +++ b/js/lib/upload.js @@ -77,7 +77,7 @@ class AwsUploader { } } -class MockUploader { +export class MockUploader { constructor(token, objectName) { this.token = token this.objectName = objectName From f05d6908ef0337ab3390d709c8caa113e7825919 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Fri, 30 Aug 2019 16:18:31 -0400 Subject: [PATCH 2/2] Mock out getDownloadLink --- js/components/__tests__/upload_input.test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/js/components/__tests__/upload_input.test.js b/js/components/__tests__/upload_input.test.js index aa9a593d..43ae48a8 100644 --- a/js/components/__tests__/upload_input.test.js +++ b/js/components/__tests__/upload_input.test.js @@ -74,6 +74,7 @@ describe('UploadInput Test', () => { component.setMethods({ getUploader: async () => new MockUploader('token', 'objectName'), + getDownloadLink: async (_f, _o) => 'downloadLink', }) component.vm.addAttachment(event).then(() => {