114 lines
3.3 KiB
JavaScript
114 lines
3.3 KiB
JavaScript
import { shallowMount, createLocalVue } from '@vue/test-utils';
|
|
import Vuex from 'vuex';
|
|
import BoardNewIssue from '~/boards/components/board_new_issue.vue';
|
|
import BoardNewItem from '~/boards/components/board_new_item.vue';
|
|
import ProjectSelect from '~/boards/components/project_select.vue';
|
|
import eventHub from '~/boards/eventhub';
|
|
|
|
import { mockList, mockGroupProjects } from '../mock_data';
|
|
|
|
const localVue = createLocalVue();
|
|
|
|
localVue.use(Vuex);
|
|
|
|
const addListNewIssuesSpy = jest.fn().mockResolvedValue();
|
|
const mockActions = { addListNewIssue: addListNewIssuesSpy };
|
|
|
|
const createComponent = ({
|
|
state = { selectedProject: mockGroupProjects[0], fullPath: mockGroupProjects[0].fullPath },
|
|
actions = mockActions,
|
|
getters = { isGroupBoard: () => true, isProjectBoard: () => false },
|
|
} = {}) =>
|
|
shallowMount(BoardNewIssue, {
|
|
localVue,
|
|
store: new Vuex.Store({
|
|
state,
|
|
actions,
|
|
getters,
|
|
}),
|
|
propsData: {
|
|
list: mockList,
|
|
},
|
|
provide: {
|
|
groupId: 1,
|
|
weightFeatureAvailable: false,
|
|
boardWeight: null,
|
|
},
|
|
stubs: {
|
|
BoardNewItem,
|
|
},
|
|
});
|
|
|
|
describe('Issue boards new issue form', () => {
|
|
let wrapper;
|
|
|
|
const findBoardNewItem = () => wrapper.findComponent(BoardNewItem);
|
|
|
|
beforeEach(async () => {
|
|
wrapper = createComponent();
|
|
|
|
await wrapper.vm.$nextTick();
|
|
});
|
|
|
|
afterEach(() => {
|
|
wrapper.destroy();
|
|
});
|
|
|
|
it('renders board-new-item component', () => {
|
|
const boardNewItem = findBoardNewItem();
|
|
expect(boardNewItem.exists()).toBe(true);
|
|
expect(boardNewItem.props()).toEqual({
|
|
list: mockList,
|
|
formEventPrefix: 'toggle-issue-form-',
|
|
submitButtonTitle: 'Create issue',
|
|
disableSubmit: false,
|
|
});
|
|
});
|
|
|
|
it('calls addListNewIssue action when `board-new-item` emits form-submit event', async () => {
|
|
findBoardNewItem().vm.$emit('form-submit', { title: 'Foo' });
|
|
|
|
await wrapper.vm.$nextTick();
|
|
expect(addListNewIssuesSpy).toHaveBeenCalledWith(expect.any(Object), {
|
|
list: mockList,
|
|
issueInput: {
|
|
title: 'Foo',
|
|
labelIds: [],
|
|
assigneeIds: [],
|
|
milestoneId: undefined,
|
|
projectPath: mockGroupProjects[0].fullPath,
|
|
},
|
|
});
|
|
});
|
|
|
|
it('emits event `toggle-issue-form` with current list Id suffix on eventHub when `board-new-item` emits form-cancel event', async () => {
|
|
jest.spyOn(eventHub, '$emit').mockImplementation();
|
|
findBoardNewItem().vm.$emit('form-cancel');
|
|
|
|
await wrapper.vm.$nextTick();
|
|
expect(eventHub.$emit).toHaveBeenCalledWith(`toggle-issue-form-${mockList.id}`);
|
|
});
|
|
|
|
describe('when in group issue board', () => {
|
|
it('renders project-select component within board-new-item component', () => {
|
|
const projectSelect = findBoardNewItem().findComponent(ProjectSelect);
|
|
|
|
expect(projectSelect.exists()).toBe(true);
|
|
expect(projectSelect.props('list')).toEqual(mockList);
|
|
});
|
|
});
|
|
|
|
describe('when in project issue board', () => {
|
|
beforeEach(() => {
|
|
wrapper = createComponent({
|
|
getters: { isGroupBoard: () => false, isProjectBoard: () => true },
|
|
});
|
|
});
|
|
|
|
it('does not render project-select component within board-new-item component', () => {
|
|
const projectSelect = findBoardNewItem().findComponent(ProjectSelect);
|
|
|
|
expect(projectSelect.exists()).toBe(false);
|
|
});
|
|
});
|
|
});
|