84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
|
import { TEST_HOST } from 'helpers/test_constants';
|
||
|
import initDeleteLabelModal from '~/delete_label_modal';
|
||
|
|
||
|
describe('DeleteLabelModal', () => {
|
||
|
const buttons = [
|
||
|
{
|
||
|
labelName: 'label 1',
|
||
|
subjectName: 'GitLab Org',
|
||
|
destroyPath: `${TEST_HOST}/1`,
|
||
|
},
|
||
|
{
|
||
|
labelName: 'label 2',
|
||
|
subjectName: 'GitLab Org',
|
||
|
destroyPath: `${TEST_HOST}/2`,
|
||
|
},
|
||
|
];
|
||
|
|
||
|
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-subject-name', x.subjectName);
|
||
|
button.setAttribute('data-destroy-path', x.destroyPath);
|
||
|
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()).not.toExist();
|
||
|
});
|
||
|
|
||
|
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()).toExist();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe.each`
|
||
|
index
|
||
|
${0}
|
||
|
${1}
|
||
|
`(`when multiple buttons exist`, ({ index }) => {
|
||
|
beforeEach(() => {
|
||
|
initDeleteLabelModal();
|
||
|
findJsHooks().item(index).click();
|
||
|
});
|
||
|
|
||
|
it('correct props are passed to gl-modal', () => {
|
||
|
expect(findModal().querySelector('.modal-title').innerHTML).toContain(
|
||
|
buttons[index].labelName,
|
||
|
);
|
||
|
expect(findModal().querySelector('.modal-body').innerHTML).toContain(
|
||
|
buttons[index].subjectName,
|
||
|
);
|
||
|
expect(findModal().querySelector('.modal-footer .btn-danger').href).toContain(
|
||
|
buttons[index].destroyPath,
|
||
|
);
|
||
|
});
|
||
|
});
|
||
|
});
|