From 7b91141759b40bd76a5eb015aca3bd9fb078ce0c Mon Sep 17 00:00:00 2001 From: Harry Maynard Date: Tue, 13 Oct 2020 17:56:01 -0400 Subject: [PATCH 01/13] Added `FileUploader` component. --- package.json | 5 + .../file-uploader/FileUploader.stories.js | 16 + .../file-uploader/FileUploader.stories.mdx | 41 + .../file-uploader/FileUploader.test.js | 12 + src/components/file-uploader/FileUploader.vue | 942 ++++++++++++++++++ src/components/file-uploader/Thumbnail.vue | 67 ++ .../__snapshots__/FileUploader.test.js.snap | 20 + .../file-uploader/images/cloud-upload-alt.svg | 1 + src/components/file-uploader/images/plus.svg | 1 + 9 files changed, 1105 insertions(+) create mode 100644 src/components/file-uploader/FileUploader.stories.js create mode 100644 src/components/file-uploader/FileUploader.stories.mdx create mode 100644 src/components/file-uploader/FileUploader.test.js create mode 100644 src/components/file-uploader/FileUploader.vue create mode 100644 src/components/file-uploader/Thumbnail.vue create mode 100644 src/components/file-uploader/__snapshots__/FileUploader.test.js.snap create mode 100644 src/components/file-uploader/images/cloud-upload-alt.svg create mode 100644 src/components/file-uploader/images/plus.svg diff --git a/package.json b/package.json index f5851b4..ae4e8eb 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,16 @@ }, "dependencies": { "@bcgov/bootstrap-theme": "github:bcgov/bootstrap-theme", + "blueimp-load-image": "^5.14.0", "bootstrap": "^4.5.3", "core-js": "^3.6.5", "history": "^5.0.0", "jquery": "^3.5.1", "mdi-vue": "^1.8.1", + "pdfjs-dist": "^2.5.207", + "rxjs": "^6.6.3", + "sha1": "^1.1.1", + "uuid": "^8.3.1", "vue": "^2.6.11" }, "devDependencies": { diff --git a/src/components/file-uploader/FileUploader.stories.js b/src/components/file-uploader/FileUploader.stories.js new file mode 100644 index 0000000..9f4fd36 --- /dev/null +++ b/src/components/file-uploader/FileUploader.stories.js @@ -0,0 +1,16 @@ +import FileUploader from "./FileUploader.vue"; + +export default { + title: 'FileUploader', + component: FileUploader, +}; + +const Template = (args, { argTypes }) => ({ + props: Object.keys(argTypes), + components: { FileUploader }, + template: '', +}); + +export const Example = Template.bind({}); +Example.args = { +}; diff --git a/src/components/file-uploader/FileUploader.stories.mdx b/src/components/file-uploader/FileUploader.stories.mdx new file mode 100644 index 0000000..2aee1f8 --- /dev/null +++ b/src/components/file-uploader/FileUploader.stories.mdx @@ -0,0 +1,41 @@ +import { Meta, Story } from "@storybook/addon-docs/blocks"; +import FileUploader from "./FileUploader.vue"; + + + +# FileUploader + +Component which stores blob image data from user selected images and/or PDFs. + +## When to Use + +Use for getting the blob data of user selected images or PDFs. + +## When not to Use + +Don't use as file uploader for non-images or non-PDF. + +## API + +Note: Requires the following NPM packages: +```bash +npm i blueimp-load-image --save +npm i pdfjs-dist --save +npm i rxjs --save +npm i sha1 --save +npm i uuid --save +``` + +| Prop | Type | Required | Description | Default | +| ----------- | ------------- | -------- | ------------------------------------------------------------------- | ------- | +| v-model | Array | true | Stores the collection of images selected by the user. | | +| instructionText | String | false | Subtitle text to display in the component. . | Please upload your documents. | +| id | String | false | Attribute to uniquely identify the component | Empty string. | + +
+ +## Example Usage + +```html + +``` diff --git a/src/components/file-uploader/FileUploader.test.js b/src/components/file-uploader/FileUploader.test.js new file mode 100644 index 0000000..fb66a75 --- /dev/null +++ b/src/components/file-uploader/FileUploader.test.js @@ -0,0 +1,12 @@ +import FileUploader from "./FileUploader.vue"; +import { mount } from "@vue/test-utils"; + +describe("FileUploader component", () => { + test("matches the success snapshot", () => { + const wrapper = mount(FileUploader, { + propsData: {} + }); + + expect(wrapper.html()).toMatchSnapshot(); + }); +}); diff --git a/src/components/file-uploader/FileUploader.vue b/src/components/file-uploader/FileUploader.vue new file mode 100644 index 0000000..b51be73 --- /dev/null +++ b/src/components/file-uploader/FileUploader.vue @@ -0,0 +1,942 @@ + + + + + diff --git a/src/components/file-uploader/Thumbnail.vue b/src/components/file-uploader/Thumbnail.vue new file mode 100644 index 0000000..3961b01 --- /dev/null +++ b/src/components/file-uploader/Thumbnail.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap b/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap new file mode 100644 index 0000000..afc3595 --- /dev/null +++ b/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap @@ -0,0 +1,20 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`FileUploader component matches the success snapshot 1`] = ` +
+
+
+
+
+
+
+
+ Add +
+
+
+
+
+
+
+`; diff --git a/src/components/file-uploader/images/cloud-upload-alt.svg b/src/components/file-uploader/images/cloud-upload-alt.svg new file mode 100644 index 0000000..2dd56d7 --- /dev/null +++ b/src/components/file-uploader/images/cloud-upload-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/file-uploader/images/plus.svg b/src/components/file-uploader/images/plus.svg new file mode 100644 index 0000000..4a42a54 --- /dev/null +++ b/src/components/file-uploader/images/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file From 3c876946b0adfef4a6413b9e692eff76d253d98a Mon Sep 17 00:00:00 2001 From: Harry Maynard Date: Tue, 13 Oct 2020 18:13:57 -0400 Subject: [PATCH 02/13] Fixed accessibility for Adding images. --- src/components/file-uploader/FileUploader.vue | 23 ++++--------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/src/components/file-uploader/FileUploader.vue b/src/components/file-uploader/FileUploader.vue index b51be73..2476038 100644 --- a/src/components/file-uploader/FileUploader.vue +++ b/src/components/file-uploader/FileUploader.vue @@ -22,7 +22,7 @@ - + @@ -307,22 +307,6 @@ export default { console.log('completed loading image'); } ); - - const imagePlaceholderEnterKeyStream = merge( - fromEvent(this.$refs.imagePlaceholderRef, 'keyup'), - ).pipe(filter((evt) => evt.key === 'Enter')); - - merge( - fromEvent(this.$refs.imagePlaceholderRef, 'click'), - imagePlaceholderEnterKeyStream - ).pipe( - map((event) => { - event.preventDefault(); - return event; - }) - ).subscribe( (event) => { - this.$refs.browseFileRef.dispatchEvent(new MouseEvent('click')); - }); }, methods: { @@ -346,7 +330,8 @@ export default { }, /** Opens the file upload dialog from the browser. */ - openFileDialog: function() { + openFileDialog: function(event) { + event.preventDefault(); console.log('opening file dialog'); this.$refs.browseFileRef.dispatchEvent(new MouseEvent('click')); }, From 7941043497b81675c77741236fa063431b589459 Mon Sep 17 00:00:00 2001 From: Harry Maynard Date: Wed, 14 Oct 2020 13:31:07 -0400 Subject: [PATCH 03/13] Fixed linting error in `FileUploader`. --- src/components/file-uploader/FileUploader.vue | 79 +++++-------------- 1 file changed, 19 insertions(+), 60 deletions(-) diff --git a/src/components/file-uploader/FileUploader.vue b/src/components/file-uploader/FileUploader.vue index 2476038..cf54589 100644 --- a/src/components/file-uploader/FileUploader.vue +++ b/src/components/file-uploader/FileUploader.vue @@ -43,9 +43,8 @@ - - diff --git a/src/components/file-uploader/Thumbnail.css b/src/components/file-uploader/Thumbnail.css new file mode 100644 index 0000000..f6cb860 --- /dev/null +++ b/src/components/file-uploader/Thumbnail.css @@ -0,0 +1,10 @@ +.image-thumbnail { + max-height: 100px; + height: auto; + max-width: 100%; +} +.image-thumbnail-width-priority { + max-width: 270px; + width: auto; + max-height: 100%; +} diff --git a/src/components/file-uploader/Thumbnail.vue b/src/components/file-uploader/Thumbnail.vue index 3961b01..7367e4f 100644 --- a/src/components/file-uploader/Thumbnail.vue +++ b/src/components/file-uploader/Thumbnail.vue @@ -8,6 +8,7 @@ - - \ No newline at end of file diff --git a/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap b/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap index afc3595..0dc04f6 100644 --- a/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap +++ b/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap @@ -3,17 +3,15 @@ exports[`FileUploader component matches the success snapshot 1`] = `
-
-
-
+
+ -
+
From d16b49092c2d48c677df89652d552bf7a6ed6358 Mon Sep 17 00:00:00 2001 From: Harry Maynard Date: Thu, 15 Oct 2020 15:14:01 -0400 Subject: [PATCH 05/13] Added unit tests to `FileUploader` component. --- .../file-uploader/FileUploader.test.js | 48 +++++++++++++ .../file-uploader/Thumbnail.test.js | 71 +++++++++++++++++++ src/components/file-uploader/Thumbnail.vue | 6 +- .../__snapshots__/Thumbnail.test.js.snap | 13 ++++ 4 files changed, 133 insertions(+), 5 deletions(-) create mode 100644 src/components/file-uploader/Thumbnail.test.js create mode 100644 src/components/file-uploader/__snapshots__/Thumbnail.test.js.snap diff --git a/src/components/file-uploader/FileUploader.test.js b/src/components/file-uploader/FileUploader.test.js index 9b03cc5..c62ce60 100644 --- a/src/components/file-uploader/FileUploader.test.js +++ b/src/components/file-uploader/FileUploader.test.js @@ -1,9 +1,57 @@ import FileUploader from "./FileUploader.vue"; import { mount } from "@vue/test-utils"; +import { render, fireEvent } from "@testing-library/vue"; +import {jest} from '@jest/globals'; + + describe("FileUploader component", () => { test("matches the success snapshot", () => { const wrapper = mount(FileUploader, {}); expect(wrapper.html()).toMatchSnapshot(); }); + + test("dragover event", () => { + const { container } = render(FileUploader, { + propsData: { + value: [], + } + }); + fireEvent.dragOver(container.querySelector(".dropzone")); + }); + + test("drop event", () => { + const { container } = render(FileUploader, { + propsData: { + value: [], + } + }); + const dragEventInit = { + dataTransfer: {} + }; + fireEvent.drop(container.querySelector(".dropzone"), dragEventInit); + }); + + test("change event", () => { + const { container } = render(FileUploader, { + propsData: { + value: [], + id: 'test' + } + }); + //const image = new Image(1,1); + //const blob = dataURItoBlob('data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='); + const blob = null; + const changeEventInit = { + target: { + files: [new File([blob], 'test.jpg')] + } + }; + // const observableFromFilesSpy = jest.spyOn(FileUploader.methods, 'observableFromFiles'); + // const checkImageExistsSpy = jest.spyOn(FileUploader.methods, 'checkImageExists'); + + fireEvent.change(container.querySelector("#test"), changeEventInit); + // expect(observableFromFilesSpy).toHaveBeenCalled(); + // expect(checkImageExistsSpy).toHaveBeenCalled(); + }); }); diff --git a/src/components/file-uploader/Thumbnail.test.js b/src/components/file-uploader/Thumbnail.test.js new file mode 100644 index 0000000..d92f509 --- /dev/null +++ b/src/components/file-uploader/Thumbnail.test.js @@ -0,0 +1,71 @@ +import Thumbnail from "./Thumbnail.vue"; +import { mount } from "@vue/test-utils"; +import { render, fireEvent } from "@testing-library/vue"; +import { jest } from '@jest/globals'; + +describe("Thumbnail component", () => { + + test("matches the success snapshot", () => { + const image = { + naturalWidth: 100, + naturalHeight: 100 + }; + const wrapper = render(Thumbnail, { + props: { + imageObject: image + } + }); + expect(wrapper.html()).toMatchSnapshot(); + }); + + test("large scalled width", () => { + const image = { + naturalWidth: 1000, + naturalHeight: 100 + }; + const wrapper = render(Thumbnail, { + props: { + imageObject: image, + } + }); + expect(wrapper.html()).toMatchSnapshot(); + }); + + test("small scalled width", () => { + const image = { + naturalWidth: 100, + naturalHeight: 1000 + }; + const { container } = render(Thumbnail, { + props: { + imageObject: image, + } + }); + }); + + test("NaN scalled width", () => { + const image = { + naturalWidth: undefined, + naturalHeight: 1000 + }; + const { container } = render(Thumbnail, { + props: { + imageObject: image, + } + }); + }); + + test("delete event", () => { + const image = { + naturalWidth: 100, + naturalHeight: 100 + }; + const { container } = render(Thumbnail, { + props: { + imageObject: image, + } + }); + fireEvent.click(container.querySelector(".action-strip a")); + }); + +}); diff --git a/src/components/file-uploader/Thumbnail.vue b/src/components/file-uploader/Thumbnail.vue index 7367e4f..62d06eb 100644 --- a/src/components/file-uploader/Thumbnail.vue +++ b/src/components/file-uploader/Thumbnail.vue @@ -37,11 +37,7 @@ export default { }, computed: { thumbnailClass() { - if (this.scaledWidth <= 300) { - return 'image-thumbnail'; - } else { - return 'image-thumbnail-width-priority'; - } + return 'image-thumbnail'; } }, methods: { diff --git a/src/components/file-uploader/__snapshots__/Thumbnail.test.js.snap b/src/components/file-uploader/__snapshots__/Thumbnail.test.js.snap new file mode 100644 index 0000000..b3f8b00 --- /dev/null +++ b/src/components/file-uploader/__snapshots__/Thumbnail.test.js.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Thumbnail component large scalled width 1`] = ` +
Image Thumbnail + +
+`; + +exports[`Thumbnail component matches the success snapshot 1`] = ` +
Image Thumbnail + +
+`; From b3be6fc0074c1097ad8d74ed10ac8aa688c0cf87 Mon Sep 17 00:00:00 2001 From: Harry Maynard Date: Mon, 19 Oct 2020 18:43:25 -0400 Subject: [PATCH 06/13] FileUploader unit tests. --- .../file-uploader/FileUploader.test.js | 27 ++++++++++-------- src/components/file-uploader/FileUploader.vue | 9 ++---- src/components/file-uploader/Thumbnail.vue | 2 -- .../__snapshots__/FileUploader.test.js.snap | 2 +- .../file-uploader/test-files/sample-id.jpg | Bin 0 -> 75586 bytes 5 files changed, 19 insertions(+), 21 deletions(-) create mode 100644 src/components/file-uploader/test-files/sample-id.jpg diff --git a/src/components/file-uploader/FileUploader.test.js b/src/components/file-uploader/FileUploader.test.js index c62ce60..f09e12e 100644 --- a/src/components/file-uploader/FileUploader.test.js +++ b/src/components/file-uploader/FileUploader.test.js @@ -1,9 +1,8 @@ import FileUploader from "./FileUploader.vue"; import { mount } from "@vue/test-utils"; import { render, fireEvent } from "@testing-library/vue"; -import {jest} from '@jest/globals'; - - +import { jest } from '@jest/globals'; +const fs = require('fs'); describe("FileUploader component", () => { test("matches the success snapshot", () => { @@ -39,19 +38,23 @@ describe("FileUploader component", () => { id: 'test' } }); - //const image = new Image(1,1); - //const blob = dataURItoBlob('data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='); - const blob = null; + const blob = new Blob(fs.readFileSync('src/components/file-uploader/test-files/sample-id.jpg')); + const file = new File([blob], 'sample-id.jpg'); const changeEventInit = { target: { - files: [new File([blob], 'test.jpg')] + files: [file] } }; - // const observableFromFilesSpy = jest.spyOn(FileUploader.methods, 'observableFromFiles'); - // const checkImageExistsSpy = jest.spyOn(FileUploader.methods, 'checkImageExists'); - fireEvent.change(container.querySelector("#test"), changeEventInit); - // expect(observableFromFilesSpy).toHaveBeenCalled(); - // expect(checkImageExistsSpy).toHaveBeenCalled(); + }); + + test("Click `add` button.", () => { + const { container } = render(FileUploader, { + propsData: { + value: [], + id: 'test' + } + }); + fireEvent.click(container.querySelector("a.common-thumbnail")); }); }); diff --git a/src/components/file-uploader/FileUploader.vue b/src/components/file-uploader/FileUploader.vue index 9fee632..49facb3 100644 --- a/src/components/file-uploader/FileUploader.vue +++ b/src/components/file-uploader/FileUploader.vue @@ -22,7 +22,7 @@ - +
@@ -330,7 +330,6 @@ export default { /** Opens the file upload dialog from the browser. */ openFileDialog: function(event) { event.preventDefault(); - console.log('opening file dialog'); this.$refs.browseFileRef.dispatchEvent(new MouseEvent('click')); }, @@ -362,7 +361,7 @@ export default { for (let fileIndex = 0; fileIndex < fileList.length; fileIndex++) { const file = fileList[fileIndex]; - console.log('Start processing file ' + fileIndex + ' of ' + fileList.length + ' %s of size %s bytes %s type', file.name, file.size, file.type); + // console.log('Start processing file ' + fileIndex + ' of ' + fileList.length + ' %s of size %s bytes %s type', file.name, file.size, file.type); const pdfScaleFactor = 2.0; @@ -544,8 +543,6 @@ export default { const reader = new FileReader(); reader.onload = function (progressEvt) { - - console.log('loading image into an img tag: %o', progressEvt); // Load into an image element const imgEl = document.createElement('img'); imgEl.src = (reader.result); @@ -574,7 +571,7 @@ export default { reader.readAsDataURL(imageFile); }, - readPDF: function(pdfFile, pdfScaleFactor, callback, error) { + readPDF: function(pdfFile, pdfScaleFactor, callback, error) { PDFJS.disableWorker = true; PDFJS.disableStream = true; diff --git a/src/components/file-uploader/Thumbnail.vue b/src/components/file-uploader/Thumbnail.vue index 62d06eb..eb95d36 100644 --- a/src/components/file-uploader/Thumbnail.vue +++ b/src/components/file-uploader/Thumbnail.vue @@ -42,8 +42,6 @@ export default { }, methods: { deleteImage(evt) { - console.log('ThumbnailComponent:Delete from thumbnail: %o', evt); - console.log('ThumbnailComponent:imageObject:', JSON.stringify(this.imageObject, null, 2)); this.$emit('delete', this.imageObject); } } diff --git a/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap b/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap index 0dc04f6..0aff42c 100644 --- a/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap +++ b/src/components/file-uploader/__snapshots__/FileUploader.test.js.snap @@ -4,7 +4,7 @@ exports[`FileUploader component matches the success snapshot 1`] = `
-
+
diff --git a/src/components/file-uploader/test-files/sample-id.jpg b/src/components/file-uploader/test-files/sample-id.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0857168a7cfd0704657babcefd4e2f08bcebed4 GIT binary patch literal 75586 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 Date: Wed, 21 Oct 2020 15:36:38 -0400 Subject: [PATCH 07/13] Added unit tests for `FileUploader` component. --- package.json | 10 +- .../file-uploader/FileUploader.test.js | 264 +++++++++++++++++- src/components/file-uploader/FileUploader.vue | 42 +-- .../file-uploader/test-files/sample.pdf | Bin 0 -> 106990 bytes 4 files changed, 278 insertions(+), 38 deletions(-) create mode 100644 src/components/file-uploader/test-files/sample.pdf diff --git a/package.json b/package.json index ae4e8eb..63ca8da 100644 --- a/package.json +++ b/package.json @@ -32,12 +32,12 @@ "devDependencies": { "@babel/cli": "^7.12.1", "@babel/core": "^7.12.3", - "@storybook/addon-docs": "^6.0.22", "@storybook/addon-actions": "^6.0.22", - "@storybook/vue": "^6.0.26", - "@storybook/addon-links": "^6.0.26", + "@storybook/addon-docs": "^6.0.22", "@storybook/addon-essentials": "^6.0.26", + "@storybook/addon-links": "^6.0.26", "@storybook/storybook-deployer": "^2.8.6", + "@storybook/vue": "^6.0.26", "@testing-library/vue": "^5.0.4", "@vue/cli-plugin-babel": "~4.5.8", "@vue/cli-plugin-eslint": "~4.5.6", @@ -49,6 +49,7 @@ "eslint": "^7.11.0", "jest": "^26.6.0", "eslint-plugin-vue": "^7.1.0", + "jest-canvas-mock": "^2.3.0", "jest-serializer-vue": "^2.0.2", "jest-sonar-reporter": "^2.0.0", "react-is": "^16.13.1", @@ -56,6 +57,9 @@ "vue-template-compiler": "^2.6.11" }, "jest": { + "setupFiles": [ + "jest-canvas-mock" + ], "transformIgnorePatterns": [ "/node_modules/(?!mdi-vue)" ], diff --git a/src/components/file-uploader/FileUploader.test.js b/src/components/file-uploader/FileUploader.test.js index f09e12e..b4e60fa 100644 --- a/src/components/file-uploader/FileUploader.test.js +++ b/src/components/file-uploader/FileUploader.test.js @@ -1,8 +1,68 @@ -import FileUploader from "./FileUploader.vue"; +import FileUploader, { + CommonImageProcessingError, + CommonImage, + CommonImageScaleFactorsImpl, + CommonImageError +} from "./FileUploader.vue"; import { mount } from "@vue/test-utils"; import { render, fireEvent } from "@testing-library/vue"; import { jest } from '@jest/globals'; const fs = require('fs'); +const sha1 = require('sha1'); +import sampleImage from './test-files/sample-id.jpg'; + +function mockDropData(files) { + return { + dataTransfer: { + files, + items: files.map((file) => ({ + kind: "file", + type: file.type, + getAsFile: () => file, + })), + types: ["Files"], + }, + }; +} + +const b64toBlob = (b64Data, contentType='', sliceSize=512) => { + const byteCharacters = atob(b64Data); + const byteArrays = []; + + for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { + const slice = byteCharacters.slice(offset, offset + sliceSize); + + const byteNumbers = new Array(slice.length); + for (let i = 0; i < slice.length; i++) { + byteNumbers[i] = slice.charCodeAt(i); + } + + const byteArray = new Uint8Array(byteNumbers); + byteArrays.push(byteArray); + } + + const blob = new Blob(byteArrays, {type: contentType}); + return blob; +} + +describe("CommonImageProcessingError", () => { + test("creates a new instance", () => { + const instance = new CommonImageProcessingError("error"); + expect(instance).toBeDefined(); + }); +}); + +describe("CommonImage", () => { + test("creates a new instance", () => { + const instance = new CommonImage("file content"); + expect(instance).toBeDefined(); + }); + + test("toJSON()", () => { + const instance = new CommonImage("file content"); + expect(instance.toJSON()).toBeDefined(); + }); +}); describe("FileUploader component", () => { test("matches the success snapshot", () => { @@ -19,19 +79,20 @@ describe("FileUploader component", () => { fireEvent.dragOver(container.querySelector(".dropzone")); }); - test("drop event", () => { + test("drop event", async () => { const { container } = render(FileUploader, { propsData: { value: [], } }); - const dragEventInit = { - dataTransfer: {} - }; - fireEvent.drop(container.querySelector(".dropzone"), dragEventInit); + const file = new File([JSON.stringify({ test: true })], "test.json", { + type: "application/json" + }); + const data = mockDropData([file]); + fireEvent.drop(container.querySelector(".dropzone"), data); }); - test("change event", () => { + test("change event", (done) => { const { container } = render(FileUploader, { propsData: { value: [], @@ -40,14 +101,37 @@ describe("FileUploader component", () => { }); const blob = new Blob(fs.readFileSync('src/components/file-uploader/test-files/sample-id.jpg')); const file = new File([blob], 'sample-id.jpg'); + console.log("file is File", sampleImage); + // const file = new File([JSON.stringify({ ping: true })], "ping.json", { + // type: "application/json", + // }); const changeEventInit = { target: { files: [file] } }; fireEvent.change(container.querySelector("#test"), changeEventInit); + setTimeout(() => { + done(); + }, 4000); }); + test("change event with empty `files` array", () => { + const { container } = render(FileUploader, { + propsData: { + value: [], + id: 'test' + } + }); + const changeEventInit = { + target: { + files: [] + } + }; + fireEvent.change(container.querySelector("#test"), changeEventInit); + }); + + test("Click `add` button.", () => { const { container } = render(FileUploader, { propsData: { @@ -57,4 +141,170 @@ describe("FileUploader component", () => { }); fireEvent.click(container.querySelector("a.common-thumbnail")); }); + + test("checkImageExists(): false", () => { + const wrapper = mount(FileUploader, {}); + const image = new CommonImage("file content") + const imageExists = wrapper.vm.checkImageExists(image, []); + expect(imageExists).toBeFalsy(); + }); + + test("checkImageExists(): true", () => { + const wrapper = mount(FileUploader, {}); + const fileContent = "file content"; + const image = new CommonImage(fileContent) + image.id = sha1(fileContent); + + const imageExists = wrapper.vm.checkImageExists(image, [image]); + expect(imageExists).toBeTruthy(); + }); + + test("resizeImage()", () => { + jest.mock('blueimp-load-image', () => (image, onload) => { + onload(); + }); + const wrapper = mount(FileUploader, {}); + const fileContent = "file content"; + // const image = new CommonImage(fileContent) + const image = document.createElement("img"); + image.src = sampleImage; + const observer = { + next: jest.fn() + } + wrapper.vm.resizeImage( + image, + wrapper.vm, + new CommonImageScaleFactorsImpl(1,1), + observer, + 0, + true + ); + }); + + test("retryStrategy()", () => { + const wrapper = mount(FileUploader, {}); + const error = { + errorCode: CommonImageError.TooBig, + pipe: jest.fn() + } + const callback = wrapper.vm.retryStrategy(1); + callback(error); + }); + + test("readPDF()", (done) => { + const wrapper = mount(FileUploader, {}); + const pdfContents = fs.readFileSync('src/components/file-uploader/test-files/sample.pdf', {encoding: 'base64'}); + const blob = b64toBlob(pdfContents, 'application/pdf'); + const pdfFile = new File([blob], 'sample.pdf'); + wrapper.vm.readPDF( + pdfFile, + new CommonImageScaleFactorsImpl(1,1), + () => { + done(); + }, + () => { + done(); + } + ); + }); + + test("makeGrayScale()", () => { + const wrapper = mount(FileUploader, {}); + const canvas = document.createElement('canvas'); + canvas.width = 10; + canvas.height = 10; + wrapper.vm.makeGrayScale(canvas); + }); + + test("handleImageFile()", () => { + const wrapper = mount(FileUploader, {}); + const image = new CommonImage("content"); + wrapper.vm.handleImageFile(image); + }); + + test("filterError() TooBig", () => { + const wrapper = mount(FileUploader, {}); + const error = { + errorCode: CommonImageError.TooBig, + image: new CommonImage("content") + }; + wrapper.vm.filterError(error); + }); + + test("filterError() CannotOpen", () => { + const wrapper = mount(FileUploader, {}); + const error = { + errorCode: CommonImageError.CannotOpen, + rawImageFile: { + name: 'name.jpg' + } + }; + wrapper.vm.filterError(error); + }); + + test("filterError() CannotOpenPDF", () => { + const wrapper = mount(FileUploader, {}); + const error = { + errorCode: CommonImageError.CannotOpenPDF, + image: new CommonImage("content") + }; + wrapper.vm.filterError(error); + }); + + test("filterError() other error", () => { + const wrapper = mount(FileUploader, {}); + const error = { + errorCode: CommonImageError.AlreadyExists, + image: new CommonImage("content") + }; + expect(() => { + wrapper.vm.filterError(error); + }).toThrow(); + }); + + test("handleError() handle empty image model", () => { + const wrapper = mount(FileUploader, {}); + wrapper.vm.handleError(null, null, null); + }); + + test("getErrorMessage()", () => { + const wrapper = mount(FileUploader, {}); + expect(wrapper.vm.getErrorMessage(CommonImageError.WrongType)).toBe('Wrong file type.'); + expect(wrapper.vm.getErrorMessage(CommonImageError.TooSmall)).toBe('File too small.'); + expect(wrapper.vm.getErrorMessage(CommonImageError.TooBig)).toBe('File too large.'); + expect(wrapper.vm.getErrorMessage(CommonImageError.AlreadyExists)).toBe('File already exists.'); + expect(wrapper.vm.getErrorMessage(CommonImageError.Unknown)).toBe('Unknown error.'); + expect(wrapper.vm.getErrorMessage(CommonImageError.CannotOpen)).toBe('Cannot open file.'); + expect(wrapper.vm.getErrorMessage(CommonImageError.PDFnotSupported)).toBe('This PDF file is not supported.'); + expect(wrapper.vm.getErrorMessage(CommonImageError.CannotOpenPDF)).toBe('Cannot open PDF file.'); + expect(wrapper.vm.getErrorMessage(null)).toBe('An error has occurred.'); + }); + + test("deleteImage()", () => { + const wrapper = mount(FileUploader, {}); + const image = new CommonImage("content"); + wrapper.vm.$emit('input', [image]); + wrapper.vm.deleteImage(image); + expect(wrapper.vm.images.length).toBe(0); + }); + + test("checkImageDimensions()", () => { + const wrapper = mount(FileUploader, {}); + expect(wrapper.vm.checkImageDimensions({ + naturalWidth: 10, + naturalHeight: 10 + })).toBeTruthy(); + + expect(wrapper.vm.checkImageDimensions({ + naturalWidth: -10, + naturalHeight: 10 + })).toBeFalsy(); + + expect(wrapper.vm.checkImageDimensions({ + naturalWidth: 10, + naturalHeight: -10 + })).toBeFalsy(); + }); + + }); diff --git a/src/components/file-uploader/FileUploader.vue b/src/components/file-uploader/FileUploader.vue index 49facb3..86c5766 100644 --- a/src/components/file-uploader/FileUploader.vue +++ b/src/components/file-uploader/FileUploader.vue @@ -58,7 +58,7 @@ const pdfJsWorker = require('pdfjs-dist/build/pdf.worker.entry'); PDFJS.workerSrc = pdfJsWorker; -var CommonImageError; +export var CommonImageError; (function (CommonImageError) { CommonImageError[CommonImageError["WrongType"] = 0] = "WrongType"; CommonImageError[CommonImageError["TooSmall"] = 1] = "TooSmall"; @@ -71,7 +71,7 @@ var CommonImageError; })(CommonImageError || (CommonImageError = {})); -class CommonImageProcessingError { +export class CommonImageProcessingError { commonImage; rawImageFile; maxSizeAllowed; @@ -85,7 +85,7 @@ class CommonImageProcessingError { /** * Image as uploaded by user */ -class CommonImage { +export class CommonImage { uuid; /** @@ -137,7 +137,7 @@ class CommonImage { } } -class CommonImageScaleFactorsImpl { +export class CommonImageScaleFactorsImpl { widthFactor; heightFactor; @@ -319,7 +319,6 @@ export default { const sha1Sum = sha1(file.fileContent); for (let i = imageList.length - 1; i >= 0; i--) { if (imageList[i].id === sha1Sum) { - console.log(`This file ${file.name} has already been uploaded.`); return true; } } @@ -409,7 +408,7 @@ export default { resizeImage: function( image, self, scaleFactors, observer, pageNumber = 0 , isPdf = false) { const imageModel = new CommonImage(); const reader = new FileReader(); - console.log('image.name:' + image.id); // .name deprecated, changed image.name to image.id + // Copy file properties imageModel.name = image.id ; if (isPdf) { @@ -543,9 +542,9 @@ export default { const reader = new FileReader(); reader.onload = function (progressEvt) { + console.log("Read Image: ", imageFile); // Load into an image element const imgEl = document.createElement('img'); - imgEl.src = (reader.result); // Wait for onload so all properties are populated imgEl.onload = (args) => { @@ -566,6 +565,10 @@ export default { return invalidImageHandler(imageReadError); }; + imgEl.src = (reader.result); + }; + reader.onerror = function(event) { + console.log("Error reading image file: ", event); }; reader.readAsDataURL(imageFile); @@ -668,11 +671,9 @@ export default { handleImageFile: function(imageModel) { - console.log('image size (bytes) after compression: ' + imageModel.size); + // Max images is 50. if (this.images.length >= 50) { - // log to console - console.log(`Max number of image file you can upload is ${50}. - This file ${imageModel.name} was not uploaded.`); + return; } else { const images = this.images; images.push(imageModel); @@ -682,7 +683,6 @@ export default { filterError: function(error) { this.resetInputFields(); - console.log('Error in loading image: %o', error); /** * Handle the error if the image is gigantic that after @@ -709,17 +709,14 @@ export default { }, handleError: function(error, imageModel, errorDescription) { - if (!imageModel) { imageModel = new CommonImage(); } - // just add the error to imageModel + // Add the error to imageModel imageModel.error = error; imageModel.errorDescription = errorDescription; - console.log("error with image: ", imageModel); this.errorMessage = this.getErrorMessage(imageModel.error); - // this.errorDocument.emit(imageModel); }, getErrorMessage: function(error) { @@ -755,14 +752,11 @@ export default { deleteImage: function(imageModel) { this.resetInputFields(); + const images = this.images; const index = images.findIndex(x => x.uuid === imageModel.uuid); images.splice(index, 1); - // If there are no images yet, we have to reset the input so it triggers 'required'. - if ( this.required && this.images.length <= 0 ) { - console.log('No images, resetting input'); - } this.$emit('input', images); }, @@ -776,14 +770,6 @@ export default { return false; } return true; - }, - - isValid: function() { - console.log('isValid', this.images); - if (this.required) { - return this.images && this.images.length > 0; - } - return true; } } } diff --git a/src/components/file-uploader/test-files/sample.pdf b/src/components/file-uploader/test-files/sample.pdf new file mode 100644 index 0000000000000000000000000000000000000000..511ef3d696701d5bf3f9925fbccc7b8e93619300 GIT binary patch literal 106990 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

o^}(VoQ&GdU@D2&J!BcVMvLF>hZN! z0}Bb+p3al3zZ?s6kn{9oQbkblyd6+l)2y}LOs`)?KGZL2SCX01xV2|{fQAb@b@A7K zJ^9t`&;NcdSB;BB$DX_HCB*egOS@USK$795w^nm7IgfpoVRcj}Yw+JWqfU@Tx!{9v z-80b-UIVWTFgc>GX{CBfD&?t=)EdWU7yYXZ zS>ZKTNOYJsS?gtUvk!V%MS0)2v;Da|_HL@)^GT7EsE)jaL%3xr*H(7MsT-h;F_&8Q z^d!5_VXoOXM_09s3&U*cut`V|FLl(uiI^b83PkNE!W|A#M^Zu!=qt=j2b4-~{;&|i z(?Uj>_swj7TCuOBP7>7Y{zixy@p;r8fs;rg!y`nznEf`)5ERqKM}Dv%`iMD6}89D2pw zi5fPp47gfSI(!JBC6dY(%GNmAgt7~_D%Nd`ReFAeW&dX+haQNURW`0E@2N|-*1B1j z#D<-?vHm=W&lBJbyyia4{i}|Seh4(2^I+Kf3D_3A0&dHVkq$v3{-(T4=Od#=y-5)! zsw~b2;A1Y`t*ezAum4l)vB^GS-PTr;Y`V6)=Ta_D4ElI*ka!08D*iiCp@=T8*J?8NH0J4rR6yA3iWYUpFnnBggd%F(3!_+h4em1z%u zDR28B>LZ<&Z zd=M;%&rHKCL{GE%yp$HC`o+7m<9%F09ljk9mduX16m#(#UO)1jv?Jnu&F<~>Y~qO! zqKR&bU8sifl9`S#!T<%1q5pdE^QfUHqa|Qb+UrU-VHy`^d*^$zEP>D+s45B6Xrb2c z^YnDXir(R=zA*g?r@LQ~PI_0DXpVKtd2QFJOm%B1|MN?DFYctfydW<=jz3h$0SA(> zgV0R@3$e$-4UcCakA!wn;cwhHf@g@AWk*Q*W25+i%lw@6ST;2`4Y=LsK{m^%=a?r`)mPQkU0&<# zZ*LGk_n;{j)=w#z(O1V0kY9iOmcVou`BqSCt2DT9gC6?&g9V?Bjy-(k#UZ`-x;86r znZ_IU>jmtSv^%>u-ocy~Wqoweu~&dO5b{^2p&LXSa%Z+TcdxAO>bM8Fudz5pV!hql zPWF#OU~BU8)vZPfkZ%3_qME^7nJVI(?t#%5vXl~^oH5)KdeBnGjI17KqO6`(J^^_L zwb$GOY34%lds~H#o_=`P*_9@ak#p;H�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 literal 0 HcmV?d00001 From 15c49fb8c20b12a5095ea3e7511dba25f07bec06 Mon Sep 17 00:00:00 2001 From: Harry Maynard Date: Wed, 21 Oct 2020 16:22:14 -0400 Subject: [PATCH 08/13] Removed broken test from `FileUploader` tests. --- .../file-uploader/FileUploader.test.js | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/components/file-uploader/FileUploader.test.js b/src/components/file-uploader/FileUploader.test.js index b4e60fa..d59b80e 100644 --- a/src/components/file-uploader/FileUploader.test.js +++ b/src/components/file-uploader/FileUploader.test.js @@ -78,20 +78,7 @@ describe("FileUploader component", () => { }); fireEvent.dragOver(container.querySelector(".dropzone")); }); - - test("drop event", async () => { - const { container } = render(FileUploader, { - propsData: { - value: [], - } - }); - const file = new File([JSON.stringify({ test: true })], "test.json", { - type: "application/json" - }); - const data = mockDropData([file]); - fireEvent.drop(container.querySelector(".dropzone"), data); - }); - + test("change event", (done) => { const { container } = render(FileUploader, { propsData: { @@ -305,6 +292,4 @@ describe("FileUploader component", () => { naturalHeight: -10 })).toBeFalsy(); }); - - }); From 4117089dd7f3ad53f925e13fbd9ad7ceae63a607 Mon Sep 17 00:00:00 2001 From: Harry Maynard Date: Wed, 21 Oct 2020 17:02:29 -0400 Subject: [PATCH 09/13] Fixed code climate issues. --- .../file-uploader/FileUploader.test.js | 52 +++++-------------- .../file-uploader/Thumbnail.test.js | 39 +++++--------- 2 files changed, 28 insertions(+), 63 deletions(-) diff --git a/src/components/file-uploader/FileUploader.test.js b/src/components/file-uploader/FileUploader.test.js index d59b80e..87621ee 100644 --- a/src/components/file-uploader/FileUploader.test.js +++ b/src/components/file-uploader/FileUploader.test.js @@ -11,20 +11,6 @@ const fs = require('fs'); const sha1 = require('sha1'); import sampleImage from './test-files/sample-id.jpg'; -function mockDropData(files) { - return { - dataTransfer: { - files, - items: files.map((file) => ({ - kind: "file", - type: file.type, - getAsFile: () => file, - })), - types: ["Files"], - }, - }; -} - const b64toBlob = (b64Data, contentType='', sliceSize=512) => { const byteCharacters = atob(b64Data); const byteArrays = []; @@ -45,6 +31,16 @@ const b64toBlob = (b64Data, contentType='', sliceSize=512) => { return blob; } +function getFilterError(error) { + return { + errorCode: error, + image: new CommonImage('content'), + rawImageFile: { + name: 'name.jpg' + } + }; +} + describe("CommonImageProcessingError", () => { test("creates a new instance", () => { const instance = new CommonImageProcessingError("error"); @@ -88,10 +84,6 @@ describe("FileUploader component", () => { }); const blob = new Blob(fs.readFileSync('src/components/file-uploader/test-files/sample-id.jpg')); const file = new File([blob], 'sample-id.jpg'); - console.log("file is File", sampleImage); - // const file = new File([JSON.stringify({ ping: true })], "ping.json", { - // type: "application/json", - // }); const changeEventInit = { target: { files: [file] @@ -151,8 +143,6 @@ describe("FileUploader component", () => { onload(); }); const wrapper = mount(FileUploader, {}); - const fileContent = "file content"; - // const image = new CommonImage(fileContent) const image = document.createElement("img"); image.src = sampleImage; const observer = { @@ -211,39 +201,25 @@ describe("FileUploader component", () => { test("filterError() TooBig", () => { const wrapper = mount(FileUploader, {}); - const error = { - errorCode: CommonImageError.TooBig, - image: new CommonImage("content") - }; + const error = getFilterError(CommonImageError.TooBig); wrapper.vm.filterError(error); }); test("filterError() CannotOpen", () => { const wrapper = mount(FileUploader, {}); - const error = { - errorCode: CommonImageError.CannotOpen, - rawImageFile: { - name: 'name.jpg' - } - }; + const error = getFilterError(CommonImageError.CannotOpen); wrapper.vm.filterError(error); }); test("filterError() CannotOpenPDF", () => { const wrapper = mount(FileUploader, {}); - const error = { - errorCode: CommonImageError.CannotOpenPDF, - image: new CommonImage("content") - }; + const error = getFilterError(CommonImageError.CannotOpenPDF); wrapper.vm.filterError(error); }); test("filterError() other error", () => { const wrapper = mount(FileUploader, {}); - const error = { - errorCode: CommonImageError.AlreadyExists, - image: new CommonImage("content") - }; + const error = getFilterError(CommonImageError.AlreadyExists); expect(() => { wrapper.vm.filterError(error); }).toThrow(); diff --git a/src/components/file-uploader/Thumbnail.test.js b/src/components/file-uploader/Thumbnail.test.js index d92f509..9f57cc8 100644 --- a/src/components/file-uploader/Thumbnail.test.js +++ b/src/components/file-uploader/Thumbnail.test.js @@ -1,15 +1,17 @@ import Thumbnail from "./Thumbnail.vue"; -import { mount } from "@vue/test-utils"; import { render, fireEvent } from "@testing-library/vue"; -import { jest } from '@jest/globals'; + +function getImage(width, height) { + return { + naturalWidth: width, + naturalHeight: height + }; +} describe("Thumbnail component", () => { test("matches the success snapshot", () => { - const image = { - naturalWidth: 100, - naturalHeight: 100 - }; + const image = getImage(100, 100); const wrapper = render(Thumbnail, { props: { imageObject: image @@ -19,10 +21,7 @@ describe("Thumbnail component", () => { }); test("large scalled width", () => { - const image = { - naturalWidth: 1000, - naturalHeight: 100 - }; + const image = getImage(1000, 100); const wrapper = render(Thumbnail, { props: { imageObject: image, @@ -32,11 +31,8 @@ describe("Thumbnail component", () => { }); test("small scalled width", () => { - const image = { - naturalWidth: 100, - naturalHeight: 1000 - }; - const { container } = render(Thumbnail, { + const image = getImage(100, 1000); + const wrapper = render(Thumbnail, { props: { imageObject: image, } @@ -44,11 +40,8 @@ describe("Thumbnail component", () => { }); test("NaN scalled width", () => { - const image = { - naturalWidth: undefined, - naturalHeight: 1000 - }; - const { container } = render(Thumbnail, { + const image = getImage(undefined, 1000); + const wrapper = render(Thumbnail, { props: { imageObject: image, } @@ -56,10 +49,7 @@ describe("Thumbnail component", () => { }); test("delete event", () => { - const image = { - naturalWidth: 100, - naturalHeight: 100 - }; + const image = getImage(100, 100); const { container } = render(Thumbnail, { props: { imageObject: image, @@ -67,5 +57,4 @@ describe("Thumbnail component", () => { }); fireEvent.click(container.querySelector(".action-strip a")); }); - }); From 25b79980ffea7ec1290dc9ce97d0f14c1533901e Mon Sep 17 00:00:00 2001 From: Harry Maynard Date: Wed, 21 Oct 2020 17:11:07 -0400 Subject: [PATCH 10/13] Fix linting errors. --- src/components/file-uploader/FileUploader.vue | 2 +- src/components/file-uploader/Thumbnail.test.js | 5 ++--- src/components/file-uploader/Thumbnail.vue | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/file-uploader/FileUploader.vue b/src/components/file-uploader/FileUploader.vue index 86c5766..d2cbab6 100644 --- a/src/components/file-uploader/FileUploader.vue +++ b/src/components/file-uploader/FileUploader.vue @@ -541,7 +541,7 @@ export default { readImage: function(imageFile, nextPageNumber, callback, invalidImageHandler) { const reader = new FileReader(); - reader.onload = function (progressEvt) { + reader.onload = function () { console.log("Read Image: ", imageFile); // Load into an image element const imgEl = document.createElement('img'); diff --git a/src/components/file-uploader/Thumbnail.test.js b/src/components/file-uploader/Thumbnail.test.js index 9f57cc8..48f6428 100644 --- a/src/components/file-uploader/Thumbnail.test.js +++ b/src/components/file-uploader/Thumbnail.test.js @@ -9,7 +9,6 @@ function getImage(width, height) { } describe("Thumbnail component", () => { - test("matches the success snapshot", () => { const image = getImage(100, 100); const wrapper = render(Thumbnail, { @@ -32,7 +31,7 @@ describe("Thumbnail component", () => { test("small scalled width", () => { const image = getImage(100, 1000); - const wrapper = render(Thumbnail, { + render(Thumbnail, { props: { imageObject: image, } @@ -41,7 +40,7 @@ describe("Thumbnail component", () => { test("NaN scalled width", () => { const image = getImage(undefined, 1000); - const wrapper = render(Thumbnail, { + render(Thumbnail, { props: { imageObject: image, } diff --git a/src/components/file-uploader/Thumbnail.vue b/src/components/file-uploader/Thumbnail.vue index eb95d36..2ac843a 100644 --- a/src/components/file-uploader/Thumbnail.vue +++ b/src/components/file-uploader/Thumbnail.vue @@ -41,7 +41,7 @@ export default { } }, methods: { - deleteImage(evt) { + deleteImage() { this.$emit('delete', this.imageObject); } } From a87181d81dcfadcbc0307adb2eb094936b0c8751 Mon Sep 17 00:00:00 2001 From: Shreyas Devalapurkar Date: Fri, 23 Oct 2020 15:07:23 -0700 Subject: [PATCH 11/13] fix conflicts properly --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 67821a8..8498900 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "@storybook/addon-links": "^6.0.27", "@storybook/addon-essentials": "^6.0.27", "@storybook/storybook-deployer": "^2.8.6", - "@storybook/vue": "^6.0.26", "@testing-library/vue": "^5.0.4", "@vue/cli-plugin-babel": "~4.5.8", "@vue/cli-plugin-eslint": "~4.5.6", From a9e0e99cef130d7e7567b6bbcb4de00865393904 Mon Sep 17 00:00:00 2001 From: Harry Maynard Date: Fri, 23 Oct 2020 19:34:51 -0400 Subject: [PATCH 12/13] Added unit tests to `FileUploader` component. --- .../file-uploader/FileUploader.test.js | 157 +++++++++++++++--- src/components/file-uploader/FileUploader.vue | 11 +- .../file-uploader/Thumbnail.test.js | 6 +- 3 files changed, 140 insertions(+), 34 deletions(-) diff --git a/src/components/file-uploader/FileUploader.test.js b/src/components/file-uploader/FileUploader.test.js index 87621ee..fceedea 100644 --- a/src/components/file-uploader/FileUploader.test.js +++ b/src/components/file-uploader/FileUploader.test.js @@ -6,11 +6,44 @@ import FileUploader, { } from "./FileUploader.vue"; import { mount } from "@vue/test-utils"; import { render, fireEvent } from "@testing-library/vue"; -import { jest } from '@jest/globals'; +import { jest, beforeEach } from '@jest/globals'; const fs = require('fs'); const sha1 = require('sha1'); import sampleImage from './test-files/sample-id.jpg'; + +let mockViewport; +let mockRenderPromise; +let mockGetPage; +jest.mock('pdfjs-dist/build/pdf', () => { + return { + getDocument: () => { + return { + promise: { + then: (resolve) => { + const pdfDoc = { + numPages: 2, + getPage: mockGetPage + }; + resolve(pdfDoc); + } + } + }; + } + }; +}); + +const mockDocument = document; +jest.mock('blueimp-load-image', () => { + return (fileSrc, callback) => { + const canvas = mockDocument.createElement('canvas'); + canvas.width = 10; + canvas.height = 10; + callback(canvas); + } +}); +require('pdfjs-dist/build/pdf'); + const b64toBlob = (b64Data, contentType='', sliceSize=512) => { const byteCharacters = atob(b64Data); const byteArrays = []; @@ -61,6 +94,35 @@ describe("CommonImage", () => { }); describe("FileUploader component", () => { + beforeEach(() => { + mockViewport = { + width: 10, + height: 10 + } + mockRenderPromise = { + promise: { + then: (renderCallback) => { + renderCallback(); + } + } + }; + mockGetPage = () => { + const page = { + getViewport: () => { + return mockViewport; + }, + render: () => { + return mockRenderPromise; + } + }; + return { + then: (resolve) => { + resolve(page); + } + }; + }; + }); + test("matches the success snapshot", () => { const wrapper = mount(FileUploader, {}); expect(wrapper.html()).toMatchSnapshot(); @@ -168,22 +230,57 @@ describe("FileUploader component", () => { callback(error); }); - test("readPDF()", (done) => { + describe("CommonImageProcessingError", () => { const wrapper = mount(FileUploader, {}); const pdfContents = fs.readFileSync('src/components/file-uploader/test-files/sample.pdf', {encoding: 'base64'}); const blob = b64toBlob(pdfContents, 'application/pdf'); const pdfFile = new File([blob], 'sample.pdf'); - wrapper.vm.readPDF( - pdfFile, - new CommonImageScaleFactorsImpl(1,1), - () => { - done(); - }, - () => { - done(); + + test("readPDF()", (done) => { + wrapper.vm.readPDF( + pdfFile, + new CommonImageScaleFactorsImpl(1,1), + () => { + done(); + } + ); + }); + + test("readPDF() with viewBox", (done) => { + mockViewport = { + width: null, + height: null, + viewBox: [null, null, 10, 10] } - ); + wrapper.vm.readPDF( + pdfFile, + new CommonImageScaleFactorsImpl(1,1), + () => { + done(); + } + ); + + }); + + test("readPDF() throw page render error", (done) => { + mockGetPage = () => { + return { + then: (resolve, reject) => { + reject(); + } + }; + }; + wrapper.vm.readPDF( + pdfFile, + new CommonImageScaleFactorsImpl(1,1), + null, + () => { + done(); + } + ); + }); }); + test("makeGrayScale()", () => { const wrapper = mount(FileUploader, {}); @@ -193,28 +290,36 @@ describe("FileUploader component", () => { wrapper.vm.makeGrayScale(canvas); }); - test("handleImageFile()", () => { + test("makeGrayScale() null context", () => { const wrapper = mount(FileUploader, {}); - const image = new CommonImage("content"); - wrapper.vm.handleImageFile(image); - }); - - test("filterError() TooBig", () => { - const wrapper = mount(FileUploader, {}); - const error = getFilterError(CommonImageError.TooBig); - wrapper.vm.filterError(error); + const canvas = { + getContext: () => { + return null; + } + }; + wrapper.vm.makeGrayScale(canvas); }); - test("filterError() CannotOpen", () => { + test("handleImageFile()", () => { const wrapper = mount(FileUploader, {}); - const error = getFilterError(CommonImageError.CannotOpen); - wrapper.vm.filterError(error); + let image = new CommonImage("content"); + wrapper.vm.handleImageFile(image); + for(let i=0; i<50; i++) { + image = new CommonImage("content"); + wrapper.vm.handleImageFile(image); + } }); - test("filterError() CannotOpenPDF", () => { + test("filterError()", () => { const wrapper = mount(FileUploader, {}); - const error = getFilterError(CommonImageError.CannotOpenPDF); - wrapper.vm.filterError(error); + wrapper.vm.filterError(getFilterError(CommonImageError.TooBig)); + wrapper.vm.filterError({ + errorCode: CommonImageError.CannotOpen, + rawImageFile: { + name: 'name.jpg' + } + }); + wrapper.vm.filterError(getFilterError(CommonImageError.CannotOpenPDF)); }); test("filterError() other error", () => { diff --git a/src/components/file-uploader/FileUploader.vue b/src/components/file-uploader/FileUploader.vue index d2cbab6..7b97b67 100644 --- a/src/components/file-uploader/FileUploader.vue +++ b/src/components/file-uploader/FileUploader.vue @@ -588,10 +588,12 @@ export default { reader.onload = function () { const docInitParams = {data: reader.result}; // TODO - The 'as any' was added when porting to common library from MSP - const loadingTask = PDFJS.getDocument((docInitParams)); + const loadingTask = PDFJS.getDocument(docInitParams); loadingTask.promise.then((pdfdoc) => { const numPages = pdfdoc.numPages; - if (currentPage <= pdfdoc.numPages) { getPage(); } + if (currentPage <= pdfdoc.numPages) { + getPage(); + } function getPage() { pdfdoc.getPage(currentPage).then(function (page) { @@ -631,7 +633,6 @@ export default { }); }, function (errorReason) { error(errorReason); - }); } }, function (errorReason) { @@ -754,7 +755,9 @@ export default { this.resetInputFields(); const images = this.images; - const index = images.findIndex(x => x.uuid === imageModel.uuid); + const index = images.findIndex(x => { + return x.uuid === imageModel.uuid; + }); images.splice(index, 1); this.$emit('input', images); diff --git a/src/components/file-uploader/Thumbnail.test.js b/src/components/file-uploader/Thumbnail.test.js index 48f6428..85bdfbc 100644 --- a/src/components/file-uploader/Thumbnail.test.js +++ b/src/components/file-uploader/Thumbnail.test.js @@ -10,20 +10,18 @@ function getImage(width, height) { describe("Thumbnail component", () => { test("matches the success snapshot", () => { - const image = getImage(100, 100); const wrapper = render(Thumbnail, { props: { - imageObject: image + imageObject: getImage(100, 100) } }); expect(wrapper.html()).toMatchSnapshot(); }); test("large scalled width", () => { - const image = getImage(1000, 100); const wrapper = render(Thumbnail, { props: { - imageObject: image, + imageObject: getImage(1000, 100), } }); expect(wrapper.html()).toMatchSnapshot(); From d2f5264376d71eb762a967ecf2e213188a1bcc55 Mon Sep 17 00:00:00 2001 From: Harry Maynard Date: Mon, 26 Oct 2020 19:25:24 -0400 Subject: [PATCH 13/13] Added unit tests for `FileUploader` component. --- .../file-uploader/FileUploader.test.js | 91 +++++++++++++++--- src/components/file-uploader/FileUploader.vue | 23 ++--- .../test-files/{sample-id.jpg => sample.jpg} | Bin 3 files changed, 85 insertions(+), 29 deletions(-) rename src/components/file-uploader/test-files/{sample-id.jpg => sample.jpg} (100%) diff --git a/src/components/file-uploader/FileUploader.test.js b/src/components/file-uploader/FileUploader.test.js index fceedea..3ab1e10 100644 --- a/src/components/file-uploader/FileUploader.test.js +++ b/src/components/file-uploader/FileUploader.test.js @@ -9,15 +9,18 @@ import { render, fireEvent } from "@testing-library/vue"; import { jest, beforeEach } from '@jest/globals'; const fs = require('fs'); const sha1 = require('sha1'); -import sampleImage from './test-files/sample-id.jpg'; +import sampleImage from './test-files/sample.jpg'; let mockViewport; let mockRenderPromise; let mockGetPage; +let PDFJS = require('pdfjs-dist/build/pdf'); + jest.mock('pdfjs-dist/build/pdf', () => { + const { jest } = require('@jest/globals'); return { - getDocument: () => { + getDocument: jest.fn(() => { return { promise: { then: (resolve) => { @@ -29,7 +32,7 @@ jest.mock('pdfjs-dist/build/pdf', () => { } } }; - } + }) }; }); @@ -42,7 +45,6 @@ jest.mock('blueimp-load-image', () => { callback(canvas); } }); -require('pdfjs-dist/build/pdf'); const b64toBlob = (b64Data, contentType='', sliceSize=512) => { const byteCharacters = atob(b64Data); @@ -136,6 +138,19 @@ describe("FileUploader component", () => { }); fireEvent.dragOver(container.querySelector(".dropzone")); }); + + test("drop event", () => { + const { container } = render(FileUploader, { + propsData: { + value: [], + } + }); + fireEvent.drop(container.querySelector(".dropzone"), { + dataTransfer: { + files: [] + } + }); + }); test("change event", (done) => { const { container } = render(FileUploader, { @@ -144,8 +159,9 @@ describe("FileUploader component", () => { id: 'test' } }); - const blob = new Blob(fs.readFileSync('src/components/file-uploader/test-files/sample-id.jpg')); - const file = new File([blob], 'sample-id.jpg'); + const imageContents = fs.readFileSync('src/components/file-uploader/test-files/sample.jpg', {encoding: 'base64'}); + const blob = b64toBlob(imageContents, 'image/jpg'); + const file = new File([blob], 'sample.pdf'); const changeEventInit = { target: { files: [file] @@ -185,8 +201,10 @@ describe("FileUploader component", () => { test("checkImageExists(): false", () => { const wrapper = mount(FileUploader, {}); - const image = new CommonImage("file content") - const imageExists = wrapper.vm.checkImageExists(image, []); + const image = new CommonImage("file content"); + let imageExists = wrapper.vm.checkImageExists(image, []); + expect(imageExists).toBeFalsy(); + imageExists = wrapper.vm.checkImageExists(image, [new CommonImage("file content")]); expect(imageExists).toBeFalsy(); }); @@ -230,11 +248,36 @@ describe("FileUploader component", () => { callback(error); }); - describe("CommonImageProcessingError", () => { - const wrapper = mount(FileUploader, {}); - const pdfContents = fs.readFileSync('src/components/file-uploader/test-files/sample.pdf', {encoding: 'base64'}); - const blob = b64toBlob(pdfContents, 'application/pdf'); - const pdfFile = new File([blob], 'sample.pdf'); + describe("readImage()", () => { + let wrapper; + let imageContents; + let blob; + let imageFile; + + beforeEach(() => { + wrapper = mount(FileUploader, {}); + imageContents = fs.readFileSync('src/components/file-uploader/test-files/sample.jpg', {encoding: 'base64'}); + blob = b64toBlob(imageContents, 'image/jpg'); + imageFile = new File([blob], 'sample.jpg'); + }); + + test("readImage() success", () => { + wrapper.vm.readImage(imageFile, 0, () => {}, () => {}); + }); + }); + + describe("readPDF()", () => { + let wrapper; + let pdfContents; + let blob; + let pdfFile; + + beforeEach(() => { + wrapper = mount(FileUploader, {}); + pdfContents = fs.readFileSync('src/components/file-uploader/test-files/sample.pdf', {encoding: 'base64'}); + blob = b64toBlob(pdfContents, 'application/pdf'); + pdfFile = new File([blob], 'sample.pdf'); + }); test("readPDF()", (done) => { wrapper.vm.readPDF( @@ -279,6 +322,26 @@ describe("FileUploader component", () => { } ); }); + + test("readPDF() throw error on getDocument", (done) => { + PDFJS.getDocument = jest.fn(() => { + return { + promise: { + then: function(resolve, reject) { + reject(); + } + } + } + }); + wrapper.vm.readPDF( + pdfFile, + new CommonImageScaleFactorsImpl(1,1), + null, + () => { + done(); + } + ); + }); }); @@ -351,7 +414,7 @@ describe("FileUploader component", () => { test("deleteImage()", () => { const wrapper = mount(FileUploader, {}); const image = new CommonImage("content"); - wrapper.vm.$emit('input', [image]); + wrapper.vm.images = [image]; wrapper.vm.deleteImage(image); expect(wrapper.vm.images.length).toBe(0); }); diff --git a/src/components/file-uploader/FileUploader.vue b/src/components/file-uploader/FileUploader.vue index 7b97b67..ad66a7c 100644 --- a/src/components/file-uploader/FileUploader.vue +++ b/src/components/file-uploader/FileUploader.vue @@ -552,23 +552,16 @@ export default { return callback(imgEl, imageFile, nextPageNumber); }; - imgEl.onerror = - (args) => { + imgEl.onerror = (args) => { + // log it to the console + console.log('This image cannot be opened/read, it is probably an invalid image. %o', args); - // log it to the console - console.log('This image cannot be opened/read, it is probably an invalid image. %o', args); + const imageReadError = new CommonImageProcessingError(CommonImageError.CannotOpen); + imageReadError.rawImageFile = imageFile; - // throw new Error('This image cannot be opened/read'); - const imageReadError = new CommonImageProcessingError(CommonImageError.CannotOpen); - - imageReadError.rawImageFile = imageFile; - - return invalidImageHandler(imageReadError); - }; - imgEl.src = (reader.result); - }; - reader.onerror = function(event) { - console.log("Error reading image file: ", event); + return invalidImageHandler(imageReadError); + }; + imgEl.src = reader.result; }; reader.readAsDataURL(imageFile); diff --git a/src/components/file-uploader/test-files/sample-id.jpg b/src/components/file-uploader/test-files/sample.jpg similarity index 100% rename from src/components/file-uploader/test-files/sample-id.jpg rename to src/components/file-uploader/test-files/sample.jpg