diff --git a/src/modules/MessageSearch/context/MessageSearchProvider.tsx b/src/modules/MessageSearch/context/MessageSearchProvider.tsx index 37a14ff27..20a341c4d 100644 --- a/src/modules/MessageSearch/context/MessageSearchProvider.tsx +++ b/src/modules/MessageSearch/context/MessageSearchProvider.tsx @@ -104,7 +104,7 @@ const MessageSearchProvider: React.FC = (props: Mess { sdk, logger, messageSearchDispatcher }, ); - const requestString = useSearchStringEffect({ searchString: searchString ?? '' }, { messageSearchDispatcher }); + const requestString = useSearchStringEffect({ searchString: searchString ?? messageSearchQuery.keyword }, { messageSearchDispatcher }); useGetSearchMessages( { currentChannel, channelUrl, requestString, messageSearchQuery, onResultLoaded, retryCount }, diff --git a/src/modules/MessageSearch/context/__tests__/MessageSearchNew.migration.spec.tsx b/src/modules/MessageSearch/context/__tests__/MessageSearchNew.migration.spec.tsx new file mode 100644 index 000000000..9bb6ee288 --- /dev/null +++ b/src/modules/MessageSearch/context/__tests__/MessageSearchNew.migration.spec.tsx @@ -0,0 +1,96 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { MessageSearchProvider, useMessageSearchContext } from '../MessageSearchProvider'; +import { match } from 'ts-pattern'; + +jest.mock('../../../../hooks/useSendbirdStateContext', () => ({ + __esModule: true, + default: () => ({}), +})); + +const mockProps = { + channelUrl: 'channel-1', + searchString: '', + messageSearchQuery: { + keyword: 'test', + }, + onResultLoaded: jest.fn(), + onResultClick: jest.fn(), + children:
Child Component
, +}; + +describe('MessageSearch Migration Compatibility Tests', () => { + // 1. Provider Props Interface test + describe('MessageSearchProvider Props Compatibility', () => { + it('should accept all legacy props without type errors', () => { + const { rerender } = render({mockProps.children}); + + // Props change scenario test + rerender( + {}}> + {mockProps.children} + + ); + }); + }); + + // 2. Context Hook return value test + describe('useMessageSearchContext Hook Return Values', () => { + type ContextType = ReturnType; + const expectedProps: Array = [ + 'channelUrl', + 'searchString', + 'messageSearchQuery', + 'onResultLoaded', + 'onResultClick', + 'children', + 'requestString', + 'retryCount', + 'setRetryCount', + 'selectedMessageId', + 'setSelectedMessageId', + 'messageSearchDispatcher', + 'scrollRef', + 'allMessages', + 'loading', + 'isInvalid', + 'currentChannel', + 'currentMessageSearchQuery', + 'hasMoreResult', + 'onScroll', + 'handleRetryToConnect', + 'handleOnScroll', + ]; + + const TestComponent = () => { + const context = useMessageSearchContext(); + return ( +
+ {expectedProps.map((prop) => ( +
+ {/* text can be function, object, string, or unknown */} + {match(context[prop]) + .with('function', () => 'function') + .with('object', () => JSON.stringify(context[prop])) + .with('string', () => String(context[prop])) + .otherwise(() => 'unknown')} +
+ ))} +
+ ); + }; + + it('should provide all legacy context values', () => { + render( + + + + ); + + expectedProps.forEach((prop) => { + const element = screen.getByTestId(`prop-${prop}`); + expect(element).toBeInTheDocument(); + }); + }); + }); +});