98 lines
2.5 KiB
JavaScript
98 lines
2.5 KiB
JavaScript
|
import Api from '~/api';
|
||
|
import { mount } from '@vue/test-utils';
|
||
|
import MockAdapter from 'axios-mock-adapter';
|
||
|
import axios from '~/lib/utils/axios_utils';
|
||
|
import PipelinesFilteredSearch from '~/pipelines/components/pipelines_filtered_search.vue';
|
||
|
import {
|
||
|
users,
|
||
|
mockSearch,
|
||
|
pipelineWithStages,
|
||
|
branches,
|
||
|
mockBranchesAfterMap,
|
||
|
} from '../mock_data';
|
||
|
import { GlFilteredSearch } from '@gitlab/ui';
|
||
|
|
||
|
describe('Pipelines filtered search', () => {
|
||
|
let wrapper;
|
||
|
let mock;
|
||
|
|
||
|
const findFilteredSearch = () => wrapper.find(GlFilteredSearch);
|
||
|
const getSearchToken = type =>
|
||
|
findFilteredSearch()
|
||
|
.props('availableTokens')
|
||
|
.find(token => token.type === type);
|
||
|
|
||
|
const createComponent = () => {
|
||
|
wrapper = mount(PipelinesFilteredSearch, {
|
||
|
propsData: {
|
||
|
pipelines: [pipelineWithStages],
|
||
|
projectId: '21',
|
||
|
},
|
||
|
attachToDocument: true,
|
||
|
});
|
||
|
};
|
||
|
|
||
|
beforeEach(() => {
|
||
|
mock = new MockAdapter(axios);
|
||
|
|
||
|
jest.spyOn(Api, 'projectUsers').mockResolvedValue(users);
|
||
|
jest.spyOn(Api, 'branches').mockResolvedValue({ data: branches });
|
||
|
|
||
|
createComponent();
|
||
|
});
|
||
|
|
||
|
afterEach(() => {
|
||
|
mock.restore();
|
||
|
wrapper.destroy();
|
||
|
wrapper = null;
|
||
|
});
|
||
|
|
||
|
it('displays UI elements', () => {
|
||
|
expect(wrapper.isVueInstance()).toBe(true);
|
||
|
expect(wrapper.isEmpty()).toBe(false);
|
||
|
|
||
|
expect(findFilteredSearch().exists()).toBe(true);
|
||
|
});
|
||
|
|
||
|
it('displays search tokens', () => {
|
||
|
expect(getSearchToken('username')).toMatchObject({
|
||
|
type: 'username',
|
||
|
icon: 'user',
|
||
|
title: 'Trigger author',
|
||
|
unique: true,
|
||
|
triggerAuthors: users,
|
||
|
projectId: '21',
|
||
|
operators: [expect.objectContaining({ value: '=' })],
|
||
|
});
|
||
|
|
||
|
expect(getSearchToken('ref')).toMatchObject({
|
||
|
type: 'ref',
|
||
|
icon: 'branch',
|
||
|
title: 'Branch name',
|
||
|
unique: true,
|
||
|
branches: mockBranchesAfterMap,
|
||
|
projectId: '21',
|
||
|
operators: [expect.objectContaining({ value: '=' })],
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('fetches and sets project users', () => {
|
||
|
expect(Api.projectUsers).toHaveBeenCalled();
|
||
|
|
||
|
expect(wrapper.vm.projectUsers).toEqual(users);
|
||
|
});
|
||
|
|
||
|
it('fetches and sets branches', () => {
|
||
|
expect(Api.branches).toHaveBeenCalled();
|
||
|
|
||
|
expect(wrapper.vm.projectBranches).toEqual(mockBranchesAfterMap);
|
||
|
});
|
||
|
|
||
|
it('emits filterPipelines on submit with correct filter', () => {
|
||
|
findFilteredSearch().vm.$emit('submit', mockSearch);
|
||
|
|
||
|
expect(wrapper.emitted('filterPipelines')).toBeTruthy();
|
||
|
expect(wrapper.emitted('filterPipelines')[0]).toEqual([mockSearch]);
|
||
|
});
|
||
|
});
|