From c120c58dda807be8dcb6fb9196ddd5e2f27bac20 Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Fri, 27 Jul 2018 09:54:23 +0800 Subject: [PATCH] Add Vue component for skinview3d --- .../src/components/common/Previewer.vue | 145 ++++++++++++++++++ .../assets/tests/__mocks__/skinview3d.js | 24 +++ .../tests/components/common/Previewer.test.js | 92 +++++++++++ 3 files changed, 261 insertions(+) create mode 100644 resources/assets/src/components/common/Previewer.vue create mode 100644 resources/assets/tests/__mocks__/skinview3d.js create mode 100644 resources/assets/tests/components/common/Previewer.test.js diff --git a/resources/assets/src/components/common/Previewer.vue b/resources/assets/src/components/common/Previewer.vue new file mode 100644 index 00000000..d77d98dd --- /dev/null +++ b/resources/assets/src/components/common/Previewer.vue @@ -0,0 +1,145 @@ + + + diff --git a/resources/assets/tests/__mocks__/skinview3d.js b/resources/assets/tests/__mocks__/skinview3d.js new file mode 100644 index 00000000..a47d62d6 --- /dev/null +++ b/resources/assets/tests/__mocks__/skinview3d.js @@ -0,0 +1,24 @@ +export class SkinViewer { + constructor() { + this.animationPaused = false; + this.camera = { + position: {} + }; + } + + dispose() { + this.disposed = true; + } +} + +export class CompositeAnimation { + add(animation) { + return animation; + } +} + +export function createOrbitControls() {} + +export const WalkingAnimation = { paused: false }; +export const RunningAnimation = { paused: false }; +export const RotatingAnimation = { paused: false }; diff --git a/resources/assets/tests/components/common/Previewer.test.js b/resources/assets/tests/components/common/Previewer.test.js new file mode 100644 index 00000000..f6a2fc7b --- /dev/null +++ b/resources/assets/tests/components/common/Previewer.test.js @@ -0,0 +1,92 @@ +import { mount } from '@vue/test-utils'; +import Previewer from '@/common/Previewer'; +import * as mockedSkinview3d from '../../__mocks__/skinview3d'; + +jest.mock('skinview3d'); + +test('initialize skinview3d', () => { + const wrapper = mount(Previewer); + expect(wrapper.vm.viewer).toBeInstanceOf(mockedSkinview3d.SkinViewer); + expect(wrapper.vm.viewer.camera.position.z).toBe(70); +}); + +test('dispose viewer before destroy', () => { + const wrapper = mount(Previewer); + wrapper.destroy(); + expect(wrapper.vm.viewer.disposed).toBeTrue(); +}); + +test('skin URL should be updated', () => { + const wrapper = mount(Previewer); + wrapper.setProps({ skin: 'abc' }); + expect(wrapper.vm.viewer.skinUrl).toBe('abc'); +}); + +test('cape URL should be updated', () => { + const wrapper = mount(Previewer); + wrapper.setProps({ cape: 'abc' }); + expect(wrapper.vm.viewer.capeUrl).toBe('abc'); +}); + +test('`footer` slot', () => { + const wrapper = mount(Previewer, { + slots: { + footer: '