85 lines
2.2 KiB
JavaScript
85 lines
2.2 KiB
JavaScript
import { GlDropdownItem, GlIcon } from '@gitlab/ui';
|
|
import { shallowMount } from '@vue/test-utils';
|
|
import CrossplaneProviderStack from '~/clusters/components/crossplane_provider_stack.vue';
|
|
|
|
describe('CrossplaneProviderStack component', () => {
|
|
let wrapper;
|
|
|
|
const defaultProps = {
|
|
stacks: [
|
|
{
|
|
name: 'Google Cloud Platform',
|
|
code: 'gcp',
|
|
},
|
|
{
|
|
name: 'Amazon Web Services',
|
|
code: 'aws',
|
|
},
|
|
],
|
|
};
|
|
|
|
function createComponent(props = {}) {
|
|
const propsData = {
|
|
...defaultProps,
|
|
...props,
|
|
};
|
|
|
|
wrapper = shallowMount(CrossplaneProviderStack, {
|
|
propsData,
|
|
});
|
|
}
|
|
|
|
beforeEach(() => {
|
|
const crossplane = {
|
|
title: 'crossplane',
|
|
stack: '',
|
|
};
|
|
createComponent({ crossplane });
|
|
});
|
|
|
|
const findDropdownElements = () => wrapper.findAll(GlDropdownItem);
|
|
const findFirstDropdownElement = () => findDropdownElements().at(0);
|
|
|
|
afterEach(() => {
|
|
wrapper.destroy();
|
|
});
|
|
|
|
it('renders all of the available stacks in the dropdown', () => {
|
|
const dropdownElements = findDropdownElements();
|
|
|
|
expect(dropdownElements.length).toBe(defaultProps.stacks.length);
|
|
|
|
defaultProps.stacks.forEach((stack, index) =>
|
|
expect(dropdownElements.at(index).text()).toEqual(stack.name),
|
|
);
|
|
});
|
|
|
|
it('displays the correct label for the first dropdown item if a stack is selected', () => {
|
|
const crossplane = {
|
|
title: 'crossplane',
|
|
stack: 'gcp',
|
|
};
|
|
createComponent({ crossplane });
|
|
expect(wrapper.vm.dropdownText).toBe('Google Cloud Platform');
|
|
});
|
|
|
|
it('emits the "set" event with the selected stack value', () => {
|
|
const crossplane = {
|
|
title: 'crossplane',
|
|
stack: 'gcp',
|
|
};
|
|
createComponent({ crossplane });
|
|
findFirstDropdownElement().vm.$emit('click');
|
|
return wrapper.vm.$nextTick().then(() => {
|
|
expect(wrapper.emitted().set[0][0].code).toEqual('gcp');
|
|
});
|
|
});
|
|
|
|
it('renders the correct dropdown text when no stack is selected', () => {
|
|
expect(wrapper.vm.dropdownText).toBe('Select Stack');
|
|
});
|
|
|
|
it('renders an external link', () => {
|
|
expect(wrapper.find(GlIcon).props('name')).toBe('external-link');
|
|
});
|
|
});
|