import Vue from 'vue' import { mount } from '@vue/test-utils' import { flushPromises } from '../../utils' import Closet from '@/views/user/Closet.vue' import ClosetItem from '@/components/ClosetItem.vue' import Previewer from '@/components/Previewer.vue' beforeEach(() => { document.body.innerHTML = `
` window.blessing.extra = { unverified: false } }) test('fetch closet data before mount', () => { Vue.prototype.$http.get.mockResolvedValue({ data: {} }) mount(Closet) jest.runAllTicks() expect(Vue.prototype.$http.get).toBeCalledWith( '/user/closet-data', { category: 'skin', q: '', page: 1, }, ) }) test('switch tabs', () => { Vue.prototype.$http.get.mockResolvedValue({ data: { items: [], category: 'skin', total_pages: 1, }, }).mockResolvedValueOnce({ data: { items: [], category: 'cape', total_pages: 1, }, }) const wrapper = mount(Closet) wrapper .findAll('.nav-link') .at(0) .trigger('click') jest.runAllTicks() expect(Vue.prototype.$http.get).toBeCalledWith( '/user/closet-data', { category: 'skin', q: '', page: 1, }, ) wrapper .findAll('.nav-link') .at(1) .trigger('click') jest.runAllTicks() expect(Vue.prototype.$http.get).toBeCalledWith( '/user/closet-data', { category: 'cape', q: '', page: 1, }, ) }) test('different categories', () => { Vue.prototype.$http.get.mockResolvedValue({ data: {} }) const wrapper = mount(Closet) expect( wrapper .findAll('.nav-link') .at(0) .classes('active'), ).toBeTrue() expect(wrapper.find('#skin-category').classes('active')).toBeTrue() wrapper.setData({ category: 'cape' }) expect( wrapper .findAll('.nav-link') .at(1) .classes('active'), ).toBeTrue() expect(wrapper.find('#cape-category').classes('active')).toBeTrue() }) test('search textures', () => { Vue.prototype.$http.get.mockResolvedValue({ data: {} }) const wrapper = mount(Closet) const input = wrapper.find('input') ;(input.element as HTMLInputElement).value = 'q' input.trigger('input') jest.runAllTimers() jest.runAllTicks() expect(Vue.prototype.$http.get).toBeCalledWith( '/user/closet-data', { category: 'skin', q: 'q', page: 1, }, ) }) test('empty closet', () => { Vue.prototype.$http.get.mockResolvedValue({ data: {} }) const wrapper = mount(Closet) expect(wrapper.find('#skin-category').text()).toContain('user.emptyClosetMsg') wrapper.setData({ category: 'cape' }) expect(wrapper.find('#cape-category').text()).toContain('user.emptyClosetMsg') }) test('no matched search result', () => { Vue.prototype.$http.get.mockResolvedValue({ data: {} }) const wrapper = mount(Closet) wrapper.setData({ query: 'q' }) expect(wrapper.find('#skin-category').text()).toContain('general.noResult') wrapper.setData({ category: 'cape' }) expect(wrapper.find('#cape-category').text()).toContain('general.noResult') }) test('render items', async () => { Vue.prototype.$http.get.mockResolvedValue({ data: { items: [ { tid: 1 }, { tid: 2 }, ], category: 'skin', total_pages: 1, }, }) const wrapper = mount(Closet) await flushPromises() expect(wrapper.findAll(ClosetItem)).toHaveLength(2) }) test('reload closet when page changed', () => { Vue.prototype.$http.get.mockResolvedValue({ data: {} }) const wrapper = mount