gitlab-org--gitlab-foss/spec/frontend/labels/delete_label_modal_spec.js

100 lines
2.7 KiB
JavaScript

import { TEST_HOST } from 'helpers/test_constants';
import { initDeleteLabelModal } from '~/labels';
describe('DeleteLabelModal', () => {
const buttons = [
{
labelName: 'label 1',
subjectName: 'GitLab Org',
destroyPath: `${TEST_HOST}/1`,
},
{
labelName: 'label 2',
subjectName: 'GitLab Org',
destroyPath: `${TEST_HOST}/2`,
},
{
labelName: 'admin label',
destroyPath: `${TEST_HOST}/3`,
},
];
beforeEach(() => {
const buttonContainer = document.createElement('div');
buttons.forEach((x) => {
const button = document.createElement('button');
button.setAttribute('class', 'js-delete-label-modal-button');
button.dataset.labelName = x.labelName;
button.dataset.destroyPath = x.destroyPath;
if (x.subjectName) {
button.dataset.subjectName = x.subjectName;
}
button.innerHTML = 'Action';
buttonContainer.appendChild(button);
});
document.body.appendChild(buttonContainer);
});
afterEach(() => {
document.body.innerHTML = '';
});
const findJsHooks = () => document.querySelectorAll('.js-delete-label-modal-button');
const findModal = () => document.querySelector('.gl-modal');
it('starts with only js-containers', () => {
expect(findJsHooks()).toHaveLength(buttons.length);
expect(findModal()).toBe(null);
});
describe('when first button clicked', () => {
beforeEach(() => {
initDeleteLabelModal();
findJsHooks().item(0).click();
});
it('does not replace js-containers with GlModal', () => {
expect(findJsHooks()).toHaveLength(buttons.length);
});
it('renders GlModal', () => {
expect(findModal()).not.toBe(null);
});
});
describe.each`
index
${0}
${1}
${2}
`(`when multiple buttons exist`, ({ index }) => {
beforeEach(() => {
initDeleteLabelModal();
findJsHooks().item(index).click();
});
it('correct props are passed to gl-modal', () => {
const button = buttons[index];
expect(findModal().querySelector('.modal-title').innerHTML).toContain(button.labelName);
if (button.subjectName) {
expect(findModal().querySelector('.modal-body').textContent).toContain(
`${button.labelName} will be permanently deleted from ${button.subjectName}. This cannot be undone.`,
);
} else {
expect(findModal().querySelector('.modal-body').textContent).toContain(
`${button.labelName} will be permanently deleted. This cannot be undone.`,
);
}
expect(findModal().querySelector('.modal-footer .btn-danger').href).toContain(
button.destroyPath,
);
});
});
});