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

83 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()).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}
`(`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,
);
});
});
});