diff --git a/web/app/components/datasets/create/website/jina-reader/index.spec.tsx b/web/app/components/datasets/create/website/jina-reader/index.spec.tsx
index dec4999a82..565f6660db 100644
--- a/web/app/components/datasets/create/website/jina-reader/index.spec.tsx
+++ b/web/app/components/datasets/create/website/jina-reader/index.spec.tsx
@@ -394,10 +394,7 @@ describe('JinaReader', () => {
it('should update controlFoldOptions when step changes', async () => {
// Arrange
const mockCreateTask = createJinaReaderTask as Mock
- let resolveTask: (value: unknown) => void
- mockCreateTask.mockImplementationOnce(() => new Promise((resolve) => {
- resolveTask = resolve
- }))
+ mockCreateTask.mockImplementation(() => new Promise((_resolve) => { /* pending */ }))
const props = createDefaultProps()
@@ -415,9 +412,6 @@ describe('JinaReader', () => {
await waitFor(() => {
expect(screen.getByText(/totalPageScraped/i)).toBeInTheDocument()
})
-
- // Cleanup - resolve the pending promise to avoid act() warning
- resolveTask!({ data: { title: 'T', content: 'C', description: 'D', url: 'https://example.com' } })
})
})
@@ -875,6 +869,42 @@ describe('JinaReader', () => {
})
})
+ it('should show error when limit is null', async () => {
+ // Arrange
+ const props = createDefaultProps({
+ crawlOptions: createDefaultCrawlOptions({ limit: null as unknown as number }),
+ })
+
+ // Act
+ render()
+ const input = screen.getByRole('textbox')
+ await userEvent.type(input, 'https://example.com')
+ await userEvent.click(screen.getByRole('button', { name: /run/i }))
+
+ // Assert
+ await waitFor(() => {
+ expect(createJinaReaderTask).not.toHaveBeenCalled()
+ })
+ })
+
+ it('should show error when limit is undefined', async () => {
+ // Arrange
+ const props = createDefaultProps({
+ crawlOptions: createDefaultCrawlOptions({ limit: undefined as unknown as number }),
+ })
+
+ // Act
+ render()
+ const input = screen.getByRole('textbox')
+ await userEvent.type(input, 'https://example.com')
+ await userEvent.click(screen.getByRole('button', { name: /run/i }))
+
+ // Assert
+ await waitFor(() => {
+ expect(createJinaReaderTask).not.toHaveBeenCalled()
+ })
+ })
+
it('should handle API throwing an exception', async () => {
// Arrange
const mockCreateTask = createJinaReaderTask as Mock
@@ -1043,12 +1073,9 @@ describe('JinaReader', () => {
// Arrange
const mockCreateTask = createJinaReaderTask as Mock
const mockCheckStatus = checkJinaReaderTaskStatus as Mock
- let resolveStatus: (value: unknown) => void
mockCreateTask.mockResolvedValueOnce({ job_id: 'zero-current-job' })
- mockCheckStatus.mockImplementationOnce(() => new Promise((resolve) => {
- resolveStatus = resolve
- }))
+ mockCheckStatus.mockImplementation(() => new Promise(() => { /* never resolves */ }))
const props = createDefaultProps({
crawlOptions: createDefaultCrawlOptions({ limit: 10 }),
@@ -1064,21 +1091,15 @@ describe('JinaReader', () => {
await waitFor(() => {
expect(screen.getByText(/totalPageScraped.*0\/10/)).toBeInTheDocument()
})
-
- // Cleanup - resolve the pending promise to avoid act() warning
- resolveStatus!({ status: 'completed', current: 1, total: 1, data: [] })
})
it('should show 0/0 progress when limit is zero string', async () => {
// Arrange
const mockCreateTask = createJinaReaderTask as Mock
const mockCheckStatus = checkJinaReaderTaskStatus as Mock
- let resolveStatus: (value: unknown) => void
mockCreateTask.mockResolvedValueOnce({ job_id: 'zero-total-job' })
- mockCheckStatus.mockImplementationOnce(() => new Promise((resolve) => {
- resolveStatus = resolve
- }))
+ mockCheckStatus.mockImplementation(() => new Promise(() => { /* never resolves */ }))
const props = createDefaultProps({
crawlOptions: createDefaultCrawlOptions({ limit: '0' }),
@@ -1094,9 +1115,6 @@ describe('JinaReader', () => {
await waitFor(() => {
expect(screen.getByText(/totalPageScraped.*0\/0/)).toBeInTheDocument()
})
-
- // Cleanup - resolve the pending promise to avoid act() warning
- resolveStatus!({ status: 'completed', current: 0, total: 0, data: [] })
})
it('should complete successfully when result data is undefined', async () => {
@@ -1132,12 +1150,9 @@ describe('JinaReader', () => {
// Arrange
const mockCreateTask = createJinaReaderTask as Mock
const mockCheckStatus = checkJinaReaderTaskStatus as Mock
- let resolveStatus: (value: unknown) => void
mockCreateTask.mockResolvedValueOnce({ job_id: 'no-total-job' })
- mockCheckStatus.mockImplementationOnce(() => new Promise((resolve) => {
- resolveStatus = resolve
- }))
+ mockCheckStatus.mockImplementation(() => new Promise(() => { /* never resolves */ }))
const props = createDefaultProps({
crawlOptions: createDefaultCrawlOptions({ limit: 15 }),
@@ -1153,16 +1168,12 @@ describe('JinaReader', () => {
await waitFor(() => {
expect(screen.getByText(/totalPageScraped.*0\/15/)).toBeInTheDocument()
})
-
- // Cleanup - resolve the pending promise to avoid act() warning
- resolveStatus!({ status: 'completed', current: 15, total: 15, data: [] })
})
it('should fallback to limit when crawlResult has zero total', async () => {
// Arrange
const mockCreateTask = createJinaReaderTask as Mock
const mockCheckStatus = checkJinaReaderTaskStatus as Mock
- let resolveStatus: (value: unknown) => void
mockCreateTask.mockResolvedValueOnce({ job_id: 'both-zero-job' })
mockCheckStatus
@@ -1172,9 +1183,7 @@ describe('JinaReader', () => {
total: 0,
data: [],
})
- .mockImplementationOnce(() => new Promise((resolve) => {
- resolveStatus = resolve
- }))
+ .mockImplementationOnce(() => new Promise(() => { /* never resolves */ }))
const props = createDefaultProps({
crawlOptions: createDefaultCrawlOptions({ limit: 5 }),
@@ -1190,9 +1199,6 @@ describe('JinaReader', () => {
await waitFor(() => {
expect(screen.getByText(/totalPageScraped/)).toBeInTheDocument()
})
-
- // Cleanup - resolve the pending promise to avoid act() warning
- resolveStatus!({ status: 'completed', current: 5, total: 5, data: [] })
})
it('should construct result item from direct data response', async () => {
@@ -1431,12 +1437,9 @@ describe('JinaReader', () => {
// Arrange
const mockCreateTask = createJinaReaderTask as Mock
const mockCheckStatus = checkJinaReaderTaskStatus as Mock
- let resolveStatus: (value: unknown) => void
mockCreateTask.mockResolvedValueOnce({ job_id: 'progress-job' })
- mockCheckStatus.mockImplementationOnce(() => new Promise((resolve) => {
- resolveStatus = resolve
- }))
+ mockCheckStatus.mockImplementation(() => new Promise((_resolve) => { /* pending */ })) // Never resolves
const props = createDefaultProps({
crawlOptions: createDefaultCrawlOptions({ limit: 10 }),
@@ -1452,9 +1455,6 @@ describe('JinaReader', () => {
await waitFor(() => {
expect(screen.getByText(/totalPageScraped.*0\/10/)).toBeInTheDocument()
})
-
- // Cleanup - resolve the pending promise to avoid act() warning
- resolveStatus!({ status: 'completed', current: 10, total: 10, data: [] })
})
it('should display time consumed after crawl completion', async () => {