97 lines
2.6 KiB
JavaScript
97 lines
2.6 KiB
JavaScript
|
import { GlButton } from '@gitlab/ui';
|
||
|
import { shallowMount } from '@vue/test-utils';
|
||
|
import DeleteBranchButton from '~/branches/components/delete_branch_button.vue';
|
||
|
import eventHub from '~/branches/event_hub';
|
||
|
|
||
|
let wrapper;
|
||
|
let findDeleteButton;
|
||
|
|
||
|
const createComponent = (props = {}) => {
|
||
|
wrapper = shallowMount(DeleteBranchButton, {
|
||
|
propsData: {
|
||
|
branchName: 'test',
|
||
|
deletePath: '/path/to/branch',
|
||
|
defaultBranchName: 'main',
|
||
|
...props,
|
||
|
},
|
||
|
});
|
||
|
};
|
||
|
|
||
|
describe('Delete branch button', () => {
|
||
|
let eventHubSpy;
|
||
|
|
||
|
beforeEach(() => {
|
||
|
findDeleteButton = () => wrapper.findComponent(GlButton);
|
||
|
eventHubSpy = jest.spyOn(eventHub, '$emit');
|
||
|
});
|
||
|
|
||
|
afterEach(() => {
|
||
|
wrapper.destroy();
|
||
|
});
|
||
|
|
||
|
it('renders the button with default tooltip, style, and icon', () => {
|
||
|
createComponent();
|
||
|
|
||
|
expect(findDeleteButton().attributes()).toMatchObject({
|
||
|
title: 'Delete branch',
|
||
|
variant: 'danger',
|
||
|
icon: 'remove',
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('renders a different tooltip for a protected branch', () => {
|
||
|
createComponent({ isProtectedBranch: true });
|
||
|
|
||
|
expect(findDeleteButton().attributes()).toMatchObject({
|
||
|
title: 'Delete protected branch',
|
||
|
variant: 'danger',
|
||
|
icon: 'remove',
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('renders a different protected tooltip when it is both protected and disabled', () => {
|
||
|
createComponent({ isProtectedBranch: true, disabled: true });
|
||
|
|
||
|
expect(findDeleteButton().attributes()).toMatchObject({
|
||
|
title: 'Only a project maintainer or owner can delete a protected branch',
|
||
|
variant: 'default',
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('emits the data to eventHub when button is clicked', () => {
|
||
|
createComponent({ merged: true });
|
||
|
|
||
|
findDeleteButton().vm.$emit('click');
|
||
|
|
||
|
expect(eventHubSpy).toHaveBeenCalledWith('openModal', {
|
||
|
branchName: 'test',
|
||
|
defaultBranchName: 'main',
|
||
|
deletePath: '/path/to/branch',
|
||
|
isProtectedBranch: false,
|
||
|
merged: true,
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('#disabled', () => {
|
||
|
it('does not disable the button by default when mounted', () => {
|
||
|
createComponent();
|
||
|
|
||
|
expect(findDeleteButton().attributes()).toMatchObject({
|
||
|
title: 'Delete branch',
|
||
|
variant: 'danger',
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// Used for unallowed users and for the default branch.
|
||
|
it('disables the button when mounted for a disabled modal', () => {
|
||
|
createComponent({ disabled: true, tooltip: 'The default branch cannot be deleted' });
|
||
|
|
||
|
expect(findDeleteButton().attributes()).toMatchObject({
|
||
|
title: 'The default branch cannot be deleted',
|
||
|
disabled: 'true',
|
||
|
variant: 'default',
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|