docbrown/app/javascript/settings/__tests__/copyOrgSecret.test.js
zhangted beb2800959
move initializeSettings to webpack (#19737)
* move initializeSettings to webpack + add tests

* add initializeSettings to InstantClick change block

* dont use classes, use modules

---------

Co-authored-by: PJ <pj@forem.com>
2023-08-01 13:09:50 +01:00

45 lines
1.3 KiB
JavaScript

import { setupCopyOrgSecret, copyToClipboardListener } from '../copyOrgSecret';
describe('OrgSecretCopy Tests', () => {
let copyToClipboardMock, valueToCopy;
const getCopyBtn = () =>
document.getElementById('settings-org-secret-copy-btn');
beforeAll(async () => {
valueToCopy = 'abc123';
document.body.innerHTML = `
<input type="text" id="settings-org-secret" value="${valueToCopy}" readonly>
<button id="settings-org-secret-copy-btn"></button>
<div id="copy-text-announcer" class="hidden"></div>
`;
});
beforeEach(() => {
// Mock window.Forem.Runtime.copyToClipboard
copyToClipboardMock = jest.fn().mockResolvedValue({});
global.window.Forem = {
Runtime: {
copyToClipboard: copyToClipboardMock,
},
};
});
it('attaches listener to button', () => {
const spyButton = jest.spyOn(getCopyBtn(), 'addEventListener');
setupCopyOrgSecret();
expect(spyButton).toHaveBeenCalledWith('click', copyToClipboardListener);
});
it('after button is clicked, copyToClipboard called + announcer shown', async () => {
getCopyBtn().click();
expect(copyToClipboardMock).toHaveBeenCalledWith(valueToCopy);
await Promise.resolve();
const announcer = document.getElementById('copy-text-announcer');
expect(announcer.classList.contains('hidden')).toBe(false);
});
});