Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import { renderHook } from 'uiSrc/utils/test-utils'
import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances'
import {
connectedInstanceInfoSelector,
connectedInstanceSelector,
} from 'uiSrc/slices/instances/instances'
import useRedisInstanceCompatibility, {
UseRedisInstanceCompatibilityReturn,
} from './useRedisInstanceCompatibility'

jest.mock('uiSrc/slices/instances/instances', () => ({
...jest.requireActual('uiSrc/slices/instances/instances'),
connectedInstanceSelector: jest.fn(),
connectedInstanceInfoSelector: jest.fn(),
}))

jest.mock('uiSrc/slices/interfaces', () => ({
Expand All @@ -20,6 +24,15 @@ const renderUseRedisInstanceCompatibility = () => {

describe('useRedisInstanceCompatibility', () => {
const mockConnectedInstanceSelector = connectedInstanceSelector as jest.Mock
const mockConnectedInstanceInfoSelector =
connectedInstanceInfoSelector as jest.Mock

beforeEach(() => {
jest.clearAllMocks()
mockConnectedInstanceInfoSelector.mockReturnValue({
version: '7.2.0',
})
})

afterEach(() => {
jest.clearAllMocks()
Expand All @@ -29,7 +42,6 @@ describe('useRedisInstanceCompatibility', () => {
mockConnectedInstanceSelector.mockReturnValue({
loading: undefined,
modules: [{ name: 'search' }],
version: '7.2.0',
})

const hookResult = renderUseRedisInstanceCompatibility()
Expand All @@ -42,7 +54,6 @@ describe('useRedisInstanceCompatibility', () => {
mockConnectedInstanceSelector.mockReturnValue({
loading: false,
modules: null,
version: '7.2.0',
})

const hookResult = renderUseRedisInstanceCompatibility()
Expand All @@ -58,6 +69,8 @@ describe('useRedisInstanceCompatibility', () => {
modules: null,
})

mockConnectedInstanceInfoSelector.mockReturnValue({})

const hookResult = renderUseRedisInstanceCompatibility()

expect(hookResult.loading).toBe(true)
Expand All @@ -69,7 +82,6 @@ describe('useRedisInstanceCompatibility', () => {
mockConnectedInstanceSelector.mockReturnValue({
loading: false,
modules: [{ name: 'search' }, { name: 'other' }],
version: '7.2.0',
})

const hookResult = renderUseRedisInstanceCompatibility()
Expand All @@ -82,7 +94,6 @@ describe('useRedisInstanceCompatibility', () => {
it('returns hasRedisearch=false when modules is an empty array (defaulted)', () => {
mockConnectedInstanceSelector.mockReturnValue({
loading: false,
version: '7.2.0',
// omit `modules` to hit the default `modules = []`
})

Expand All @@ -96,7 +107,6 @@ describe('useRedisInstanceCompatibility', () => {
mockConnectedInstanceSelector.mockReturnValue({
loading: false,
modules: null, // explicit null
version: '7.2.0',
})

const hookResult = renderUseRedisInstanceCompatibility()
Expand All @@ -108,6 +118,9 @@ describe('useRedisInstanceCompatibility', () => {
mockConnectedInstanceSelector.mockReturnValue({
loading: false,
modules: [{ name: 'RediSearch' }],
})

mockConnectedInstanceInfoSelector.mockReturnValue({
version: '7.1.9',
})

Expand All @@ -120,6 +133,9 @@ describe('useRedisInstanceCompatibility', () => {
mockConnectedInstanceSelector.mockReturnValue({
loading: false,
modules: [{ name: 'something else' }],
})

mockConnectedInstanceInfoSelector.mockReturnValue({
version: 'not a version',
})

Expand All @@ -131,6 +147,9 @@ describe('useRedisInstanceCompatibility', () => {
mockConnectedInstanceSelector.mockReturnValue({
loading: false,
modules: [{ name: 'search' }],
})

mockConnectedInstanceInfoSelector.mockReturnValue({
version: undefined,
})

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useMemo } from 'react'
import { useSelector } from 'react-redux'
import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances'
import { connectedInstanceInfoSelector, connectedInstanceSelector } from 'uiSrc/slices/instances/instances'
import { REDISEARCH_MODULES } from 'uiSrc/slices/interfaces'
import { isRedisVersionSupported } from 'uiSrc/utils/comparisons/compareVersions'

Expand All @@ -15,10 +15,13 @@ const REDISEARCH_MODULE_SET = new Set(REDISEARCH_MODULES)

const useRedisInstanceCompatibility =
(): UseRedisInstanceCompatibilityReturn => {
const {
version,
} = useSelector(connectedInstanceInfoSelector)
Copy link
Member

@valkirilov valkirilov Sep 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ouch, this means we have different behavior for what we store in Redux, based on the environment 😔

Do you think that we can get rid of one of the selectors (not now, I'm just asking if you checked what we store in both selectors, and whether it's possible to live only with one of them).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something to think about. I'm looking on another solution for this currently. Let see if it will work


const {
loading,
modules = [],
version,
} = useSelector(connectedInstanceSelector)

const isInitialized = loading !== undefined
Expand Down
Loading