diff --git a/cypress/integration/common/profile.js b/cypress/integration/common/profile.js index cb5689f63..1df1e2652 100644 --- a/cypress/integration/common/profile.js +++ b/cypress/integration/common/profile.js @@ -12,14 +12,16 @@ Then('I should be able to change my profile picture', () => { cy.fixture(avatarUpload, 'base64').then(fileContent => { cy.get('#customdropzone').upload( { fileContent, fileName: avatarUpload, mimeType: 'image/png' }, - { subjectType: 'drag-n-drop' }, + { subjectType: 'drag-n-drop' } ) }) - cy.get('#customdropzone') - .should('have.attr', 'style') + cy.get('.profile-avatar img') + .should('have.attr', 'src') .and('contains', 'onourjourney') - cy.contains('.iziToast-message', 'Upload successful') - .should('have.length', 1) + cy.contains('.iziToast-message', 'Upload successful').should( + 'have.length', + 1 + ) }) When("I visit another user's profile page", () => { @@ -31,4 +33,4 @@ Then('I cannot upload a picture', () => { .children() .should('not.have.id', 'customdropzone') .should('have.class', 'ds-avatar') -}) \ No newline at end of file +}) diff --git a/webapp/components/Upload/index.vue b/webapp/components/Upload/index.vue index a1ea4ab55..f7f730632 100644 --- a/webapp/components/Upload/index.vue +++ b/webapp/components/Upload/index.vue @@ -4,21 +4,30 @@ id="customdropzone" :key="user.avatar" ref="el" + :use-custom-slot="true" :options="dropzoneOptions" - :include-styling="false" - :style="backgroundImage" - @vdropzone-thumbnail="thumbnail" @vdropzone-error="verror" - /> + > +
+ +
+
+ +
+
+
+ - diff --git a/webapp/components/Upload/spec.js b/webapp/components/Upload/spec.js index b81babb6e..8ee5f6046 100644 --- a/webapp/components/Upload/spec.js +++ b/webapp/components/Upload/spec.js @@ -35,26 +35,6 @@ describe('Upload', () => { }, } - const fileSuccess = { - filename: 'avatar.jpg', - previewElement: { - classList: { - remove: jest.fn(), - add: jest.fn(), - }, - querySelectorAll: jest.fn().mockReturnValue([ - { - alt: '', - style: { - 'background-image': '/api/generic.jpg', - }, - }, - ]), - }, - } - - const dataUrl = 'avatar.jpg' - beforeEach(() => { jest.useFakeTimers() wrapper = shallowMount(Upload, { localVue, propsData, mocks }) @@ -69,11 +49,6 @@ describe('Upload', () => { expect(mocks.$apollo.mutate).toHaveBeenCalledTimes(1) }) - it('thumbnail', () => { - wrapper.vm.thumbnail(fileSuccess, dataUrl) - expect(fileSuccess.previewElement.classList.add).toHaveBeenCalledTimes(1) - }) - describe('error handling', () => { const message = 'File upload failed' const fileError = { status: 'error' } @@ -93,5 +68,15 @@ describe('Upload', () => { jest.runAllTimers() expect(wrapper.vm.error).toEqual(false) }) + + it('shows an error toaster when the apollo mutation rejects', async () => { + // calls vddrop twice because of how mockResolvedValueOnce works in jest + // the first time the mock function is called it will resolve, calling it a + // second time will cause it to fail(with this implementation) + // https://jestjs.io/docs/en/mock-function-api.html#mockfnmockresolvedvalueoncevalue + await wrapper.vm.vddrop([{ filename: 'avatar.jpg' }]) + await wrapper.vm.vddrop([{ filename: 'avatar.jpg' }]) + expect(mocks.$toast.error).toHaveBeenCalledTimes(1) + }) }) }) diff --git a/webapp/package.json b/webapp/package.json index 388b81cfd..379053d08 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -75,7 +75,6 @@ "vue-count-to": "~1.0.13", "vue-izitoast": "1.1.2", "vue-sweetalert-icons": "~3.2.0", - "vue2-dropzone": "^3.5.9", "vuex-i18n": "~1.11.0", "zxcvbn": "^4.4.2" }, diff --git a/webapp/yarn.lock b/webapp/yarn.lock index d132bdb79..56e2e50b3 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -11318,13 +11318,6 @@ vue2-dropzone@3.5.8: dependencies: dropzone "^5.5.1" -vue2-dropzone@^3.5.9: - version "3.5.9" - resolved "https://registry.yarnpkg.com/vue2-dropzone/-/vue2-dropzone-3.5.9.tgz#a63999a45a7aad24d4c21e3d35be409b4e6bdce8" - integrity sha512-nJz6teulVKlZIAeKgvPU7wBI/gzfIgqDOrEp1okSkQIkdprDVCoM0U7XWM0NOM4AAVX+4XGRtMoocYWdTYb3bQ== - dependencies: - dropzone "^5.5.1" - vue@^2.6.10, vue@^2.6.6: version "2.6.10" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.10.tgz#a72b1a42a4d82a721ea438d1b6bf55e66195c637"