Sync latest TrueGrowth updates
This commit is contained in:
@@ -16,17 +16,23 @@ vi.mock('tdesign-react', () => ({
|
||||
}));
|
||||
|
||||
vi.mock('../lazy-image', () => ({
|
||||
LazyImage: ({ src, alt, className }: any) => (
|
||||
<img src={src} alt={alt} className={className} />
|
||||
LazyImage: ({ src, alt, className, objectFit }: any) => (
|
||||
<img
|
||||
src={src}
|
||||
alt={alt}
|
||||
className={className}
|
||||
data-object-fit={objectFit}
|
||||
/>
|
||||
),
|
||||
}));
|
||||
|
||||
vi.mock('../shared/VideoPosterPreview', () => ({
|
||||
VideoPosterPreview: ({ src, poster, alt, className }: any) => (
|
||||
VideoPosterPreview: ({ src, poster, alt, className, fit }: any) => (
|
||||
<img
|
||||
src={poster || src}
|
||||
alt={alt}
|
||||
className={`video-poster-preview__media ${className || ''}`}
|
||||
data-fit={fit}
|
||||
/>
|
||||
),
|
||||
}));
|
||||
@@ -66,6 +72,15 @@ const videoAsset: Asset = {
|
||||
mimeType: 'video/mp4',
|
||||
};
|
||||
|
||||
const imageAsset: Asset = {
|
||||
...baseAsset,
|
||||
id: 'image-asset',
|
||||
type: AssetType.IMAGE,
|
||||
url: '/media/demo.jpg',
|
||||
name: '图片素材',
|
||||
mimeType: 'image/jpeg',
|
||||
};
|
||||
|
||||
const audioAsset: Asset = {
|
||||
...baseAsset,
|
||||
id: 'audio-asset',
|
||||
@@ -76,13 +91,17 @@ const audioAsset: Asset = {
|
||||
mimeType: 'audio/mpeg',
|
||||
};
|
||||
|
||||
function renderAssetItem(asset: Asset) {
|
||||
function renderAssetItem(
|
||||
asset: Asset,
|
||||
props: Partial<React.ComponentProps<typeof AssetItem>> = {}
|
||||
) {
|
||||
return render(
|
||||
<AssetItem
|
||||
asset={asset}
|
||||
viewMode="grid"
|
||||
isSelected={false}
|
||||
onSelect={vi.fn()}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -155,4 +174,44 @@ describe('AssetItem hover preview', () => {
|
||||
});
|
||||
expect(screen.getByAltText(audioAsset.name)).not.toBeNull();
|
||||
});
|
||||
|
||||
it('does not start video or audio hover playback when disabled', async () => {
|
||||
const { container, rerender } = renderAssetItem(videoAsset, {
|
||||
disableHoverPlayback: true,
|
||||
});
|
||||
const videoItem = container.querySelector('.asset-item') as HTMLElement;
|
||||
|
||||
fireEvent.mouseEnter(videoItem);
|
||||
|
||||
expect(container.querySelector('.asset-item__hover-video')).toBeNull();
|
||||
expect(window.HTMLMediaElement.prototype.play).not.toHaveBeenCalled();
|
||||
|
||||
rerender(
|
||||
<AssetItem
|
||||
asset={audioAsset}
|
||||
viewMode="grid"
|
||||
isSelected={false}
|
||||
onSelect={vi.fn()}
|
||||
disableHoverPlayback
|
||||
/>
|
||||
);
|
||||
const audioItem = container.querySelector('.asset-item') as HTMLElement;
|
||||
|
||||
fireEvent.mouseEnter(audioItem);
|
||||
|
||||
expect(container.querySelector('.asset-item__hover-audio')).toBeNull();
|
||||
expect(window.HTMLMediaElement.prototype.play).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('passes cover fit to image and video thumbnails when requested', () => {
|
||||
renderAssetItem(imageAsset, { thumbnailFit: 'cover' });
|
||||
expect(
|
||||
screen.getByAltText(imageAsset.name).getAttribute('data-object-fit')
|
||||
).toBe('cover');
|
||||
|
||||
renderAssetItem(videoAsset, { thumbnailFit: 'cover' });
|
||||
expect(screen.getByAltText(videoAsset.name).getAttribute('data-fit')).toBe(
|
||||
'cover'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user