69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
import {expect, vi, test} from 'vitest';
|
|
import {render, fireEvent, waitFor} from '@testing-library/react';
|
|
import {t} from '@/scripts/i18n';
|
|
import * as fetch from '@/scripts/net';
|
|
import NotificationsList, {
|
|
type Notification,
|
|
} from '@/views/widgets/NotificationsList';
|
|
|
|
vi.mock('@/scripts/net');
|
|
|
|
beforeEach(() => {
|
|
document.body.innerHTML = '';
|
|
});
|
|
|
|
function createContainer(notifications: Notification[]) {
|
|
const container = document.createElement('div');
|
|
container.dataset.notifications = JSON.stringify(notifications);
|
|
container.dataset.t = 'no unread';
|
|
document.body.append(container);
|
|
}
|
|
|
|
test('should not throw if element does not exist', () => {
|
|
render(<NotificationsList/>);
|
|
});
|
|
|
|
test('no unread notifications', () => {
|
|
createContainer([]);
|
|
|
|
const {queryByText} = render(<NotificationsList/>);
|
|
|
|
expect(queryByText('no unread')).toBeInTheDocument();
|
|
});
|
|
|
|
test('with unread notifications', () => {
|
|
createContainer([{id: '1', title: 'hi'}]);
|
|
|
|
const {queryByText} = render(<NotificationsList/>);
|
|
|
|
expect(queryByText('1')).toBeInTheDocument();
|
|
expect(queryByText('hi')).toBeInTheDocument();
|
|
});
|
|
|
|
test('read notification', async () => {
|
|
const time = new Date().toLocaleTimeString();
|
|
const fixture = {
|
|
title: 'hi - title',
|
|
content: 'content here',
|
|
time,
|
|
};
|
|
|
|
createContainer([{id: '1', title: 'hi'}]);
|
|
fetch.post.mockResolvedValue(fixture);
|
|
|
|
const {getByText, queryByText} = render(<NotificationsList/>);
|
|
|
|
fireEvent.click(getByText('hi'));
|
|
await waitFor(() => {
|
|
expect(fetch.post).toBeCalled();
|
|
});
|
|
|
|
expect(queryByText(fixture.title)).toBeInTheDocument();
|
|
expect(queryByText(fixture.content)).toBeInTheDocument();
|
|
expect(queryByText(fixture.time)).toBeInTheDocument();
|
|
expect(queryByText('no unread')).toBeInTheDocument();
|
|
expect(queryByText('1')).not.toBeInTheDocument();
|
|
|
|
fireEvent.click(getByText(t('general.confirm')));
|
|
});
|