diff --git a/core/http/react-ui/e2e/collections.spec.js b/core/http/react-ui/e2e/collections.spec.js
index 4fa4168dde94..f3f4bd8c291e 100644
--- a/core/http/react-ui/e2e/collections.spec.js
+++ b/core/http/react-ui/e2e/collections.spec.js
@@ -19,4 +19,33 @@ test.describe('Collections page', () => {
await input.fill('my-kb')
await expect(input).toHaveValue('my-kb')
})
+
+ test('posts the source update interval as a JSON number', async ({ page }) => {
+ const collectionName = 'interval-regression'
+ const collectionPath = encodeURIComponent(collectionName)
+ let postedBody
+
+ await page.route(`**/api/agents/collections/${collectionPath}/entries`, route =>
+ route.fulfill({ contentType: 'application/json', body: JSON.stringify({ entries: [] }) }))
+ await page.route(`**/api/agents/collections/${collectionPath}/sources`, async route => {
+ if (route.request().method() === 'POST') {
+ postedBody = route.request().postDataJSON()
+ await route.fulfill({ contentType: 'application/json', body: JSON.stringify({ status: 'ok' }) })
+ } else {
+ await route.fulfill({ contentType: 'application/json', body: JSON.stringify({ sources: [] }) })
+ }
+ })
+
+ await page.goto(`/app/collections/${collectionPath}`)
+ await page.getByRole('button', { name: 'Sources' }).click()
+ await page.locator('#source-url').fill('https://example.com/feed')
+ await page.locator('#source-interval').fill('3600')
+ await page.getByRole('button', { name: 'Add Source' }).click()
+
+ await expect.poll(() => postedBody).toEqual({
+ url: 'https://example.com/feed',
+ update_interval: 3600,
+ })
+ expect(typeof postedBody.update_interval).toBe('number')
+ })
})
diff --git a/core/http/react-ui/src/pages/CollectionDetails.jsx b/core/http/react-ui/src/pages/CollectionDetails.jsx
index 0469df0781b8..2ce4b699109f 100644
--- a/core/http/react-ui/src/pages/CollectionDetails.jsx
+++ b/core/http/react-ui/src/pages/CollectionDetails.jsx
@@ -432,10 +432,12 @@ export default function CollectionDetails() {
setNewSourceInterval(e.target.value)}
- placeholder="e.g. 1h, 30m"
+ placeholder="e.g. 60 (minutes)"
/>