/* * Wire * Copyright (C) 2021 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, screen, waitFor} from '@testing-library/react'; import {container} from 'tsyringe'; import {AssetRemoteData} from 'src/script/assets/AssetRemoteData'; import {AssetRepository} from 'src/script/assets/AssetRepository'; import {ContentMessage} from 'src/script/entity/message/ContentMessage'; import {MediumImage} from 'src/script/entity/message/MediumImage'; import {ImageAsset, ImageAssetProps} from './ImageAsset'; jest.mock('Components/InViewport', () => ({ InViewport: ({onVisible, children}: {onVisible: () => void; children: any}) => { setTimeout(onVisible); return
{children}
; }, __esModule: true, })); describe('image-asset', () => { const fakeImageUrl = 'https://test.com/image.png'; const defaultProps: ImageAssetProps = { asset: new MediumImage('image'), message: new ContentMessage(), onClick: () => {}, }; beforeAll(() => { jest.spyOn(window.URL, 'createObjectURL').mockReturnValue(fakeImageUrl); jest.spyOn(window.URL, 'revokeObjectURL').mockReturnValue(); }); it('displays loading dots when resource is not loaded', () => { const image = new MediumImage('image'); image.height = '10'; image.width = '100'; const props = {...defaultProps, asset: image}; render(); const imageElement = screen.getByTestId('image-loader'); expect(imageElement).toBeDefined(); }); it('displays the dummy image url when resource is loaded', async () => { const assetRepository = container.resolve(AssetRepository); jest .spyOn(assetRepository, 'load') .mockReturnValue(Promise.resolve(new Blob([new Uint8Array()], {type: 'application/octet-stream'}))); const image = new MediumImage('image'); image.resource( new AssetRemoteData('remote', { assetKey: '', assetToken: '', forceCaching: false, version: 3, }), ); const props = {...defaultProps, asset: image}; render(); await waitFor(() => { expect(window.URL.createObjectURL).toHaveBeenCalled(); const imageElement = screen.getByTestId('image-asset-img'); const imgSrc = imageElement.getAttribute('src'); expect(imgSrc).toBe(fakeImageUrl); }); }); });