import Vue from 'vue'; import { mount } from '@vue/test-utils'; import Register from '@/components/auth/Register'; import { swal } from '@/js/notify'; jest.mock('@/js/notify'); window.blessing.extra = { player: false }; test('click to refresh captcha', () => { jest.spyOn(Date, 'now'); const wrapper = mount(Register); wrapper.find('img').trigger('click'); expect(Date.now).toBeCalledTimes(2); }); test('require player name', () => { window.blessing.extra = { player: true }; const wrapper = mount(Register); expect(wrapper.findAll('[type="text"]').at(0).attributes('placeholder')).toBe('auth.player-name'); window.blessing.extra = { player: false }; }); test('register', async () => { jest.spyOn(Date, 'now'); Vue.prototype.$http.post .mockResolvedValueOnce({ errno: 1, msg: 'fail' }) .mockResolvedValueOnce({ errno: 0, msg: 'ok' }); const wrapper = mount(Register); const button = wrapper.find('button'); const info = wrapper.find('.callout-info'); const warning = wrapper.find('.callout-warning'); button.trigger('click'); expect(Vue.prototype.$http.post).not.toBeCalled(); expect(info.text()).toBe('auth.emptyEmail'); wrapper.find('[type="email"]').setValue('a'); button.trigger('click'); expect(Vue.prototype.$http.post).not.toBeCalled(); expect(info.text()).toBe('auth.invalidEmail'); wrapper.find('[type="email"]').setValue('a@b.c'); button.trigger('click'); expect(Vue.prototype.$http.post).not.toBeCalled(); expect(info.text()).toBe('auth.emptyPassword'); wrapper.findAll('[type="password"]').at(0).setValue('123456'); button.trigger('click'); expect(Vue.prototype.$http.post).not.toBeCalled(); expect(info.text()).toBe('auth.invalidPassword'); wrapper.findAll('[type="password"]').at(0).setValue('12345678'); button.trigger('click'); expect(Vue.prototype.$http.post).not.toBeCalled(); expect(info.text()).toBe('auth.invalidConfirmPwd'); wrapper.findAll('[type="password"]').at(1).setValue('123456'); button.trigger('click'); expect(Vue.prototype.$http.post).not.toBeCalled(); expect(info.text()).toBe('auth.invalidConfirmPwd'); wrapper.findAll('[type="password"]').at(1).setValue('12345678'); button.trigger('click'); expect(Vue.prototype.$http.post).not.toBeCalled(); expect(info.text()).toBe('auth.emptyNickname'); wrapper.findAll('[type="text"]').at(0).setValue('abc'); button.trigger('click'); expect(Vue.prototype.$http.post).not.toBeCalled(); expect(info.text()).toBe('auth.emptyCaptcha'); wrapper.findAll('[type="text"]').at(1).setValue('captcha'); button.trigger('click'); await wrapper.vm.$nextTick(); expect(Vue.prototype.$http.post).toBeCalledWith( '/auth/register', { email: 'a@b.c', password: '12345678', nickname: 'abc', captcha: 'captcha' } ); expect(warning.text()).toBe('fail'); expect(Date.now).toBeCalledTimes(2); button.trigger('click'); await wrapper.vm.$nextTick(); jest.runAllTimers(); expect(swal).toBeCalledWith({ type: 'success', text: 'ok' }); }); test('register with player name', async () => { window.blessing.extra = { player: true }; Vue.prototype.$http.post.mockResolvedValue({ errno: 0, msg: 'ok' }); const wrapper = mount(Register); const button = wrapper.find('button'); const info = wrapper.find('.callout-info'); wrapper.find('[type="email"]').setValue('a@b.c'); wrapper.findAll('[type="password"]').at(0).setValue('12345678'); wrapper.findAll('[type="password"]').at(1).setValue('12345678'); wrapper.findAll('[type="text"]').at(1).setValue('captcha'); button.trigger('click'); expect(Vue.prototype.$http.post).not.toBeCalled(); expect(info.text()).toBe('auth.emptyPlayerName'); wrapper.findAll('[type="text"]').at(0).setValue('abc'); button.trigger('click'); await wrapper.vm.$nextTick(); expect(Vue.prototype.$http.post).toBeCalledWith( '/auth/register', { email: 'a@b.c', password: '12345678', player_name: 'abc', captcha: 'captcha' } ); });