162 lines
4.1 KiB
JavaScript
162 lines
4.1 KiB
JavaScript
import { shallowMount, createLocalVue } from '@vue/test-utils';
|
|
import { createMockClient } from 'mock-apollo-client';
|
|
import VueApollo from 'vue-apollo';
|
|
import VueRouter from 'vue-router';
|
|
import VueDraggable from 'vuedraggable';
|
|
import { InMemoryCache } from 'apollo-cache-inmemory';
|
|
import Design from '~/design_management/components/list/item.vue';
|
|
import createRouter from '~/design_management/router';
|
|
import getDesignListQuery from '~/design_management/graphql/queries/get_design_list.query.graphql';
|
|
import permissionsQuery from '~/design_management/graphql/queries/design_permissions.query.graphql';
|
|
import moveDesignMutation from '~/design_management/graphql/mutations/move_design.mutation.graphql';
|
|
import { deprecatedCreateFlash as createFlash } from '~/flash';
|
|
import Index from '~/design_management/pages/index.vue';
|
|
import {
|
|
designListQueryResponse,
|
|
permissionsQueryResponse,
|
|
moveDesignMutationResponse,
|
|
reorderedDesigns,
|
|
moveDesignMutationResponseWithErrors,
|
|
} from '../mock_data/apollo_mock';
|
|
|
|
jest.mock('~/flash');
|
|
|
|
const localVue = createLocalVue();
|
|
localVue.use(VueApollo);
|
|
|
|
const router = createRouter();
|
|
localVue.use(VueRouter);
|
|
|
|
const designToMove = {
|
|
__typename: 'Design',
|
|
id: '2',
|
|
event: 'NONE',
|
|
filename: 'fox_2.jpg',
|
|
notesCount: 2,
|
|
image: 'image-2',
|
|
imageV432x230: 'image-2',
|
|
};
|
|
|
|
describe('Design management index page with Apollo mock', () => {
|
|
let wrapper;
|
|
let mockClient;
|
|
let apolloProvider;
|
|
let moveDesignHandler;
|
|
|
|
async function moveDesigns(localWrapper) {
|
|
await jest.runOnlyPendingTimers();
|
|
await localWrapper.vm.$nextTick();
|
|
|
|
localWrapper.find(VueDraggable).vm.$emit('input', reorderedDesigns);
|
|
localWrapper.find(VueDraggable).vm.$emit('change', {
|
|
moved: {
|
|
newIndex: 0,
|
|
element: designToMove,
|
|
},
|
|
});
|
|
}
|
|
|
|
const fragmentMatcher = { match: () => true };
|
|
|
|
const cache = new InMemoryCache({
|
|
fragmentMatcher,
|
|
addTypename: false,
|
|
});
|
|
|
|
const findDesigns = () => wrapper.findAll(Design);
|
|
|
|
function createComponent({
|
|
moveHandler = jest.fn().mockResolvedValue(moveDesignMutationResponse),
|
|
}) {
|
|
mockClient = createMockClient({ cache });
|
|
|
|
mockClient.setRequestHandler(
|
|
getDesignListQuery,
|
|
jest.fn().mockResolvedValue(designListQueryResponse),
|
|
);
|
|
|
|
mockClient.setRequestHandler(
|
|
permissionsQuery,
|
|
jest.fn().mockResolvedValue(permissionsQueryResponse),
|
|
);
|
|
|
|
moveDesignHandler = moveHandler;
|
|
|
|
mockClient.setRequestHandler(moveDesignMutation, moveDesignHandler);
|
|
|
|
apolloProvider = new VueApollo({
|
|
defaultClient: mockClient,
|
|
});
|
|
|
|
wrapper = shallowMount(Index, {
|
|
localVue,
|
|
apolloProvider,
|
|
router,
|
|
stubs: { VueDraggable },
|
|
});
|
|
}
|
|
|
|
afterEach(() => {
|
|
wrapper.destroy();
|
|
wrapper = null;
|
|
mockClient = null;
|
|
apolloProvider = null;
|
|
});
|
|
|
|
it('has a design with id 1 as a first one', async () => {
|
|
createComponent({});
|
|
|
|
await jest.runOnlyPendingTimers();
|
|
await wrapper.vm.$nextTick();
|
|
|
|
expect(findDesigns()).toHaveLength(3);
|
|
expect(
|
|
findDesigns()
|
|
.at(0)
|
|
.props('id'),
|
|
).toBe('1');
|
|
});
|
|
|
|
it('calls a mutation with correct parameters and reorders designs', async () => {
|
|
createComponent({});
|
|
|
|
await moveDesigns(wrapper);
|
|
|
|
expect(moveDesignHandler).toHaveBeenCalled();
|
|
|
|
await wrapper.vm.$nextTick();
|
|
|
|
expect(
|
|
findDesigns()
|
|
.at(0)
|
|
.props('id'),
|
|
).toBe('2');
|
|
});
|
|
|
|
it('displays flash if mutation had a recoverable error', async () => {
|
|
createComponent({
|
|
moveHandler: jest.fn().mockResolvedValue(moveDesignMutationResponseWithErrors),
|
|
});
|
|
|
|
await moveDesigns(wrapper);
|
|
|
|
await wrapper.vm.$nextTick();
|
|
|
|
expect(createFlash).toHaveBeenCalledWith('Houston, we have a problem');
|
|
});
|
|
|
|
it('displays flash if mutation had a non-recoverable error', async () => {
|
|
createComponent({
|
|
moveHandler: jest.fn().mockRejectedValue('Error'),
|
|
});
|
|
|
|
await moveDesigns(wrapper);
|
|
|
|
await jest.runOnlyPendingTimers();
|
|
await wrapper.vm.$nextTick();
|
|
|
|
expect(createFlash).toHaveBeenCalledWith(
|
|
'Something went wrong when reordering designs. Please try again',
|
|
);
|
|
});
|
|
});
|