diff --git a/packages/plugins/@nocobase/plugin-file-manager/src/client-v2/previewer/__tests__/filePreviewTypes.test.tsx b/packages/plugins/@nocobase/plugin-file-manager/src/client-v2/previewer/__tests__/filePreviewTypes.test.tsx new file mode 100644 index 00000000000..3a9b808601f --- /dev/null +++ b/packages/plugins/@nocobase/plugin-file-manager/src/client-v2/previewer/__tests__/filePreviewTypes.test.tsx @@ -0,0 +1,59 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +import { render } from '@testing-library/react'; +import React from 'react'; +import { describe, expect, it, vi } from 'vitest'; +import { FilePreviewRenderer } from '../filePreviewTypes'; + +vi.mock('@emotion/css', () => ({ css: () => '' })); + +vi.mock('antd', () => ({ + Alert: ({ description }: { description?: React.ReactNode }) =>
{description}
, + Image: () => null, + Modal: ({ children, open, title }: React.PropsWithChildren<{ open?: boolean; title?: React.ReactNode }>) => + open ? ( +
+

{title}

+ {children} +
+ ) : null, + Space: ({ children }: React.PropsWithChildren) =>
{children}
, + Spin: () => null, +})); + +vi.mock('react-i18next', () => ({ + Trans: ({ children }: React.PropsWithChildren) => <>{children}, + useTranslation: () => ({ t: (key: string) => key }), +})); + +describe('FilePreviewRenderer', () => { + it('reloads the video element when switching files', () => { + const files = [ + { filename: 'first.mp4', mimetype: 'video/mp4', url: '/files/first.mp4' }, + { filename: 'second.mp4', mimetype: 'video/mp4', url: '/files/second.mp4' }, + ]; + const commonProps = { + list: files, + open: true, + onDownload: () => undefined, + }; + + const { container, rerender } = render(); + const firstVideo = container.querySelector('video'); + + expect(firstVideo?.querySelector('source')?.getAttribute('src')).toBe('/files/first.mp4'); + + rerender(); + + const secondVideo = container.querySelector('video'); + expect(secondVideo?.querySelector('source')?.getAttribute('src')).toBe('/files/second.mp4'); + expect(secondVideo).not.toBe(firstVideo); + }); +}); diff --git a/packages/plugins/@nocobase/plugin-file-manager/src/client-v2/previewer/filePreviewTypes.tsx b/packages/plugins/@nocobase/plugin-file-manager/src/client-v2/previewer/filePreviewTypes.tsx index c32d2d9f64f..70222871e56 100644 --- a/packages/plugins/@nocobase/plugin-file-manager/src/client-v2/previewer/filePreviewTypes.tsx +++ b/packages/plugins/@nocobase/plugin-file-manager/src/client-v2/previewer/filePreviewTypes.tsx @@ -1331,7 +1331,7 @@ const VideoPreviewer = ({ file }: FilePreviewerProps) => { return null; } return ( -