100 lines
2.7 KiB
JavaScript
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.setAttribute('data-label-name', x.labelName);
|
|
button.setAttribute('data-destroy-path', x.destroyPath);
|
|
|
|
if (x.subjectName) {
|
|
button.setAttribute('data-subject-name', 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,
|
|
);
|
|
});
|
|
});
|
|
});
|