113 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
import { shallowMount } from '@vue/test-utils';
 | 
						|
import Vue, { nextTick } from 'vue';
 | 
						|
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';
 | 
						|
 | 
						|
Vue.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, {
 | 
						|
    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 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 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 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);
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |