@@ -12,6 +12,8 @@ import { IPermissionsState } from '../../reducers/permissions';
12
12
import { IMessage } from '../../definitions' ;
13
13
import { colors } from '../../lib/constants' ;
14
14
import { IRoomContext , RoomContext } from '../../views/RoomView/context' ;
15
+ import * as EmojiKeyboardHook from './hooks/useEmojiKeyboard' ;
16
+ import { initStore } from '../../lib/store/auxStore' ;
15
17
16
18
jest . useFakeTimers ( ) ;
17
19
@@ -37,6 +39,7 @@ const initialStoreState = () => {
37
39
const permissions : IPermissionsState = { 'mobile-upload-file' : [ 'user' ] } ;
38
40
mockedStore . dispatch ( setPermissions ( permissions ) ) ;
39
41
mockedStore . dispatch ( addSettings ( { Message_AudioRecorderEnabled : true } ) ) ;
42
+ initStore ( mockedStore ) ;
40
43
} ;
41
44
initialStoreState ( ) ;
42
45
@@ -60,6 +63,72 @@ const Render = ({ context }: { context?: Partial<IRoomContext> }) => (
60
63
</ Provider >
61
64
) ;
62
65
66
+ const sharedValue = {
67
+ value : false ,
68
+ get : ( ) => sharedValue . value ,
69
+ set : ( v : boolean ) => {
70
+ sharedValue . value = v ;
71
+ } ,
72
+ addListener : jest . fn ( ) ,
73
+ removeListener : jest . fn ( ) ,
74
+ modify : jest . fn ( )
75
+ } ;
76
+
77
+ const sharedValueSearchbar = {
78
+ value : false ,
79
+ get : ( ) => sharedValueSearchbar . value ,
80
+ set : ( v : boolean ) => {
81
+ sharedValueSearchbar . value = v ;
82
+ } ,
83
+ addListener : jest . fn ( ) ,
84
+ removeListener : jest . fn ( ) ,
85
+ modify : jest . fn ( )
86
+ } ;
87
+
88
+ const keyboardHeightSharedValue = {
89
+ value : 0 ,
90
+ get : ( ) => keyboardHeightSharedValue . value ,
91
+ set : ( v : number ) => {
92
+ keyboardHeightSharedValue . value = v ;
93
+ } ,
94
+ addListener : jest . fn ( ) ,
95
+ removeListener : jest . fn ( ) ,
96
+ modify : jest . fn ( )
97
+ } ;
98
+
99
+ let showEmojiKeyboard = false ;
100
+ let showEmojiSearchbar = false ;
101
+
102
+ beforeEach ( ( ) => {
103
+ showEmojiKeyboard = false ;
104
+ showEmojiSearchbar = false ;
105
+ jest . spyOn ( EmojiKeyboardHook , 'useEmojiKeyboard' ) . mockReturnValue ( {
106
+ showEmojiPickerSharedValue : sharedValue ,
107
+ showEmojiKeyboard,
108
+ openEmojiKeyboard : jest . fn ( ) ,
109
+ closeEmojiKeyboard : jest . fn ( ) ,
110
+ showEmojiSearchbarSharedValue : sharedValueSearchbar ,
111
+ showEmojiSearchbar,
112
+ openEmojiSearchbar : jest . fn ( ) ,
113
+ closeEmojiSearchbar : jest . fn ( ) ,
114
+ resetKeyboard : jest . fn ( ) ,
115
+ keyboardHeight : keyboardHeightSharedValue
116
+ } ) ;
117
+ sharedValue . value = false ; // reset before each test
118
+ sharedValueSearchbar . value = false ;
119
+ keyboardHeightSharedValue . value = 0 ;
120
+ } ) ;
121
+
122
+ jest . mock ( './hooks/useSubscription' , ( ) => ( {
123
+ useSubscription : jest . fn ( ) . mockReturnValue ( {
124
+ t : 'd' ,
125
+ rid : 'rid' ,
126
+ tmid : undefined ,
127
+ fname : 'Rocket Chat' ,
128
+ name : 'Rocket Chat'
129
+ } )
130
+ } ) ) ;
131
+
63
132
describe ( 'MessageComposer' , ( ) => {
64
133
describe ( 'Toolbar' , ( ) => {
65
134
test ( 'tap actions' , async ( ) => {
@@ -71,10 +140,29 @@ describe('MessageComposer', () => {
71
140
} ) ;
72
141
73
142
test ( 'tap emoji' , async ( ) => {
74
- render ( < Render /> ) ;
143
+ const { rerender } = render ( < Render /> ) ;
75
144
76
145
await fireEvent ( screen . getByTestId ( 'message-composer-input' ) , 'focus' ) ;
77
146
await user . press ( screen . getByTestId ( 'message-composer-open-emoji' ) ) ;
147
+
148
+ // Simulate the state change that would happen when emoji button is pressed
149
+ sharedValue . value = true ;
150
+ showEmojiKeyboard = true ;
151
+ jest . spyOn ( EmojiKeyboardHook , 'useEmojiKeyboard' ) . mockReturnValue ( {
152
+ showEmojiPickerSharedValue : sharedValue ,
153
+ showEmojiKeyboard,
154
+ openEmojiKeyboard : jest . fn ( ) ,
155
+ closeEmojiKeyboard : jest . fn ( ) ,
156
+ showEmojiSearchbarSharedValue : sharedValueSearchbar ,
157
+ showEmojiSearchbar,
158
+ openEmojiSearchbar : jest . fn ( ) ,
159
+ closeEmojiSearchbar : jest . fn ( ) ,
160
+ resetKeyboard : jest . fn ( ) ,
161
+ keyboardHeight : keyboardHeightSharedValue
162
+ } ) ;
163
+
164
+ rerender ( < Render /> ) ;
165
+
78
166
expect ( screen . getByTestId ( 'message-composer-close-emoji' ) ) . toBeOnTheScreen ( ) ;
79
167
expect ( screen . toJSON ( ) ) . toMatchSnapshot ( ) ;
80
168
} ) ;
0 commit comments