Skip to content

Commit dc565b7

Browse files
authored
Merge pull request #3152 from RedisInsight/fe/feature/RI-5531_stream-entries
#RI-5531 - fix validation for adding stream entry
2 parents 0246353 + fea6c65 commit dc565b7

File tree

3 files changed

+45
-5
lines changed

3 files changed

+45
-5
lines changed
Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,53 @@
11
import React from 'react'
22
import { mock } from 'ts-mockito'
3-
import { render, screen } from 'uiSrc/utils/test-utils'
3+
import { render, screen, act, fireEvent } from 'uiSrc/utils/test-utils'
44

5+
import { streamDataSelector } from 'uiSrc/slices/browser/stream'
56
import AddStreamEntries, { Props } from './AddStreamEntries'
67

78
const mockedProps = mock<Props>()
89

10+
jest.mock('uiSrc/slices/browser/stream', () => ({
11+
...jest.requireActual('uiSrc/slices/browser/stream'),
12+
streamDataSelector: jest.fn().mockReturnValue({})
13+
}))
14+
915
describe('AddStreamEntries', () => {
1016
it('should render', () => {
1117
expect(render(<AddStreamEntries {...mockedProps} />)).toBeTruthy()
1218
})
19+
20+
it('should be valid by default', () => {
21+
render(<AddStreamEntries {...mockedProps} />)
22+
23+
expect(screen.getByTestId('save-elements-btn')).not.toBeDisabled()
24+
})
25+
26+
it('should properly validate/show error', async () => {
27+
(streamDataSelector as jest.Mock).mockReturnValue({
28+
lastGeneratedId: '100-0'
29+
})
30+
render(<AddStreamEntries {...mockedProps} />)
31+
32+
await act(() => {
33+
fireEvent.change(screen.getByTestId('entryId'), { target: { value: '99-0' } })
34+
})
35+
36+
expect(screen.getByTestId('stream-entry-error')).toHaveTextContent('Must be greater than the last ID')
37+
expect(screen.getByTestId('save-elements-btn')).toBeDisabled()
38+
})
39+
40+
it('should properly validate', async () => {
41+
(streamDataSelector as jest.Mock).mockReturnValue({
42+
lastGeneratedId: '100-0'
43+
})
44+
render(<AddStreamEntries {...mockedProps} />)
45+
46+
await act(() => {
47+
fireEvent.change(screen.getByTestId('entryId'), { target: { value: '101-0' } })
48+
})
49+
50+
expect(screen.queryByTestId('stream-entry-error')).not.toBeInTheDocument()
51+
expect(screen.getByTestId('save-elements-btn')).not.toBeDisabled()
52+
})
1353
})

redisinsight/ui/src/pages/browser/modules/key-details/components/stream-details/add-stream-entity/AddStreamEntries.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export interface Props {
2222

2323
const AddStreamEntries = (props: Props) => {
2424
const { closePanel } = props
25-
const { lastEntry } = useSelector(streamDataSelector)
25+
const { lastGeneratedId } = useSelector(streamDataSelector)
2626
const { name: keyName = '' } = useSelector(selectedKeyDataSelector) ?? { name: undefined }
2727
const { viewType } = useSelector(keysSelector)
2828
const { id: instanceId } = useSelector(connectedInstanceSelector)
@@ -49,7 +49,7 @@ const AddStreamEntries = (props: Props) => {
4949
return
5050
}
5151

52-
if (!lastEntry?.id) {
52+
if (!lastGeneratedId) {
5353
setEntryIdError('')
5454
return
5555
}
@@ -59,7 +59,7 @@ const AddStreamEntries = (props: Props) => {
5959
return
6060
}
6161

62-
const [lastIdTimestamp, lastId] = lastEntry.id?.split('-')
62+
const [lastIdTimestamp, lastId] = lastGeneratedId.split('-')
6363
const [idTimestamp, id] = entryID?.split('-')
6464

6565
if (toNumber(idTimestamp) > toNumber(lastIdTimestamp)) {

redisinsight/ui/src/pages/browser/modules/key-details/components/stream-details/add-stream-entity/StreamEntryFields/StreamEntryFields.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ const StreamEntryFields = (props: Props) => {
142142
/>
143143
</EuiFormRow>
144144
{!showEntryError && <span className={styles.timestampText}>Timestamp - Sequence Number or *</span>}
145-
{showEntryError && <span className={styles.error}>{entryIdError}</span>}
145+
{showEntryError && <span className={styles.error} data-testid="stream-entry-error">{entryIdError}</span>}
146146
</div>
147147

148148
<div className={styles.fieldsWrapper}>

0 commit comments

Comments
 (0)