import { expect } from 'chai' import { render, screen, fireEvent } from '@testing-library/react' import fetchMock from 'fetch-mock' import SystemMessages from '@/shared/components/system-messages' describe('', function () { beforeEach(function () { fetchMock.removeRoutes().clearHistory() localStorage.clear() }) afterEach(function () { fetchMock.removeRoutes().clearHistory() localStorage.clear() }) it('renders non-dismissable system message', async function () { const data = { _id: 'protected', content: 'Random content', } fetchMock.get(/\/system\/messages/, [data]) render() await fetchMock.callHistory.flush(true) await screen.findByText(data.content) expect(screen.queryByRole('button', { name: /close/i })).to.be.null }) it('renders and closes dismissable system message', async function () { const data = { _id: 1, content: 'Random content', } fetchMock.get(/\/system\/messages/, [data]) render() await fetchMock.callHistory.flush(true) await screen.findByText(data.content) const closeBtn = screen.getByRole('button', { name: /close/i }) fireEvent.click(closeBtn) expect(screen.queryByText(data.content)).to.be.null const dismissed = localStorage.getItem(`systemMessage.hide.${data._id}`) expect(dismissed).to.equal('true') }) it('renders and closes translation message', async function () { const data = { url: '/dev/null', lngName: 'German', imgUrl: 'https://flagcdn.com/w40/de.png', } const currentUrl = '/project' fetchMock.get(/\/system\/messages/, []) window.metaAttributesCache.set('ol-suggestedLanguage', data) window.metaAttributesCache.set('ol-currentUrl', currentUrl) render() await fetchMock.callHistory.flush(true) const link = screen.getByRole('link', { name: /click here/i }) expect(link.getAttribute('href')).to.equal(`${data.url}${currentUrl}`) const flag = screen.getByRole('img', { hidden: true }) expect(flag.getAttribute('src')).to.equal(data.imgUrl) const closeBtn = screen.getByRole('button', { name: /close/i }) fireEvent.click(closeBtn) expect( screen.queryByRole('link', { name: `Click here to use Overleaf in ${data.lngName}`, }) ).to.be.null expect(screen.queryByRole('img')).to.be.null const dismissed = localStorage.getItem('hide-i18n-notification') expect(dismissed).to.equal('true') }) })