/*
* Wire
* Copyright (C) 2024 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*
*/
import {render, fireEvent, act} from '@testing-library/react';
import {AppNotification, showAppNotification} from './AppNotification';
jest.useFakeTimers();
describe('AppNotification', () => {
afterEach(() => {
jest.clearAllTimers();
});
it('renders the message correctly', () => {
const message = 'Test notification';
const onClose = jest.fn();
const {getByText} = render();
expect(getByText(message)).toBeDefined();
});
it('calls onClose when the close button is clicked', () => {
const message = 'Test notification';
const onClose = jest.fn();
const {getByRole} = render();
const button = getByRole('button');
fireEvent.click(button);
expect(onClose).toHaveBeenCalledTimes(1);
});
it('calls onClose after the notificationTimeout', () => {
const message = 'Test notification';
const onClose = jest.fn();
const notificationTimeout = 3000;
render();
act(() => {
jest.advanceTimersByTime(notificationTimeout);
});
expect(onClose).toHaveBeenCalledTimes(1);
});
});
describe('showAppNotification', () => {
afterEach(() => {
jest.clearAllTimers();
const appNotificationContainer = document.querySelector('#app-notification');
if (appNotificationContainer) {
appNotificationContainer.innerHTML = '';
}
});
it('renders AppNotification into the container', () => {
const appNotificationContainer = document.createElement('div');
appNotificationContainer.setAttribute('id', 'app-notification');
document.body.appendChild(appNotificationContainer);
const message = 'Test notification';
act(() => {
showAppNotification(message);
});
expect(appNotificationContainer.textContent).toContain(message);
});
});