mirror of
https://github.com/langgenius/dify.git
synced 2026-03-20 10:00:02 +08:00
74 lines
2.4 KiB
TypeScript
74 lines
2.4 KiB
TypeScript
import type { NamedExoticComponent } from 'react'
|
|
import { render, screen } from '@testing-library/react'
|
|
import * as React from 'react'
|
|
|
|
// AudioBlock.integration.spec.tsx
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
import AudioBlock from './audio-block'
|
|
|
|
// Mock the nested AudioPlayer used by AudioGallery (do not mock AudioGallery itself)
|
|
const audioPlayerMock = vi.fn()
|
|
vi.mock('@/app/components/base/audio-gallery/AudioPlayer', () => ({
|
|
default: (props: { srcs: string[] }) => {
|
|
audioPlayerMock(props)
|
|
return <div data-testid="audio-player" data-srcs={JSON.stringify(props.srcs)} />
|
|
},
|
|
})) // adjust path if AudioBlock sits elsewhere
|
|
|
|
describe('AudioBlock (integration - real AudioGallery)', () => {
|
|
beforeEach(() => {
|
|
audioPlayerMock.mockClear()
|
|
})
|
|
|
|
it('renders AudioGallery with multiple srcs extracted from node.children', () => {
|
|
const node = {
|
|
children: [
|
|
{ properties: { src: 'one.mp3' } },
|
|
{ properties: { src: 'two.mp3' } },
|
|
{ type: 'text', value: 'plain' },
|
|
],
|
|
properties: {},
|
|
}
|
|
|
|
const { container } = render(<AudioBlock node={node} />)
|
|
|
|
const gallery = screen.getByTestId('audio-player')
|
|
expect(gallery).toBeInTheDocument()
|
|
|
|
expect(audioPlayerMock).toHaveBeenCalledTimes(1)
|
|
expect(audioPlayerMock).toHaveBeenCalledWith({ srcs: ['one.mp3', 'two.mp3'] })
|
|
|
|
expect(container.firstChild).not.toBeNull()
|
|
})
|
|
|
|
it('renders AudioGallery with single src from node.properties when no children with properties', () => {
|
|
const node = {
|
|
children: [{ type: 'text', value: 'no-src' }],
|
|
properties: { src: 'single.mp3' },
|
|
}
|
|
|
|
render(<AudioBlock node={node} />)
|
|
|
|
expect(audioPlayerMock).toHaveBeenCalledTimes(1)
|
|
expect(audioPlayerMock).toHaveBeenCalledWith({ srcs: ['single.mp3'] })
|
|
expect(screen.getByTestId('audio-player')).toBeInTheDocument()
|
|
})
|
|
|
|
it('returns null when there are no audio sources', () => {
|
|
const node = {
|
|
children: [{ type: 'text', value: 'nothing here' }],
|
|
properties: {},
|
|
}
|
|
|
|
const { container } = render(<AudioBlock node={node} />)
|
|
expect(container.firstChild).toBeNull()
|
|
expect(audioPlayerMock).not.toHaveBeenCalled()
|
|
})
|
|
|
|
it('has displayName set to AudioBlock', () => {
|
|
const component = AudioBlock as NamedExoticComponent<{ node: unknown }>
|
|
expect(component.displayName).toBe('AudioBlock')
|
|
})
|
|
})
|