1
1
package com .instabug .reactlibrary ;
2
2
3
+ import static junit .framework .TestCase .assertEquals ;
4
+ import static junit .framework .TestCase .assertTrue ;
5
+
6
+ import static org .mockito .ArgumentMatchers .eq ;
3
7
import static org .mockito .Matchers .any ;
4
8
import static org .mockito .Mockito .doAnswer ;
5
9
import static org .mockito .Mockito .mock ;
10
+ import static org .mockito .Mockito .mockConstruction ;
6
11
import static org .mockito .Mockito .mockStatic ;
7
- import static org .mockito .Mockito .timeout ;
8
- import static org .mockito .Mockito .times ;
12
+ import static org .mockito .Mockito .spy ;
9
13
import static org .mockito .Mockito .verify ;
10
14
import static org .mockito .Mockito .when ;
11
15
12
- import android .os .Handler ;
13
16
import android .os .Looper ;
14
17
15
18
import com .facebook .react .bridge .Arguments ;
16
- import com .facebook .react .bridge .JavaOnlyArray ;
19
+ import com .facebook .react .bridge .JavaOnlyMap ;
17
20
import com .facebook .react .bridge .Promise ;
18
- import com .facebook .react .bridge .ReadableArray ;
19
- import com .facebook .react .bridge .WritableArray ;
20
- import com .instabug .chat .Replies ;
21
- import com .instabug .featuresrequest .ActionType ;
22
- import com .instabug .featuresrequest .FeatureRequests ;
23
- import com .instabug .library .Feature ;
21
+ import com .facebook .react .bridge .ReactApplicationContext ;
22
+ import com .facebook .react .bridge .WritableMap ;
24
23
import com .instabug .library .OnSessionReplayLinkReady ;
24
+ import com .instabug .library .SessionSyncListener ;
25
25
import com .instabug .library .sessionreplay .SessionReplay ;
26
+ import com .instabug .library .sessionreplay .model .SessionMetadata ;
26
27
import com .instabug .reactlibrary .utils .MainThreadHandler ;
27
28
28
29
import org .junit .After ;
29
30
import org .junit .Before ;
30
31
import org .junit .Test ;
32
+ import org .mockito .MockedConstruction ;
31
33
import org .mockito .MockedStatic ;
32
34
import org .mockito .Mockito ;
33
35
import org .mockito .invocation .InvocationOnMock ;
34
36
import org .mockito .stubbing .Answer ;
35
37
38
+ import java .util .concurrent .CountDownLatch ;
36
39
import java .util .concurrent .Executors ;
37
40
import java .util .concurrent .ScheduledExecutorService ;
41
+ import java .util .concurrent .atomic .AtomicBoolean ;
38
42
39
43
40
44
public class RNInstabugSessionReplayModuleTest {
@@ -44,8 +48,8 @@ public class RNInstabugSessionReplayModuleTest {
44
48
45
49
// Mock Objects
46
50
private MockedStatic <Looper > mockLooper ;
47
- private MockedStatic <MainThreadHandler > mockMainThreadHandler ;
48
- private MockedStatic <SessionReplay > mockSessionReplay ;
51
+ private MockedStatic <MainThreadHandler > mockMainThreadHandler ;
52
+ private MockedStatic <SessionReplay > mockSessionReplay ;
49
53
50
54
@ Before
51
55
public void mockMainThreadHandler () throws Exception {
@@ -107,7 +111,7 @@ public void testSetInstabugLogsEnabled() {
107
111
@ Test
108
112
public void testGetSessionReplayLink () {
109
113
Promise promise = mock (Promise .class );
110
- String link = "instabug link" ;
114
+ String link = "instabug link" ;
111
115
112
116
mockSessionReplay .when (() -> SessionReplay .getSessionReplayLink (any ())).thenAnswer (
113
117
invocation -> {
@@ -136,5 +140,40 @@ public void testSetUserStepsEnabled() {
136
140
mockSessionReplay .verifyNoMoreInteractions ();
137
141
}
138
142
143
+ @ Test
144
+ public void testSetSyncCallback () throws Exception {
145
+ MockedStatic <Arguments > mockArguments = mockStatic (Arguments .class );
146
+ MockedConstruction <CountDownLatch > mockCountDownLatch = mockConstruction (CountDownLatch .class );
147
+ RNInstabugSessionReplayModule SRModule = spy (new RNInstabugSessionReplayModule (mock (ReactApplicationContext .class )));
148
+
149
+ final boolean shouldSync = true ;
150
+ final AtomicBoolean actual = new AtomicBoolean ();
151
+
152
+ mockArguments .when (Arguments ::createMap ).thenReturn (new JavaOnlyMap ());
153
+
154
+ mockSessionReplay .when (() -> SessionReplay .setSyncCallback (any (SessionSyncListener .class )))
155
+ .thenAnswer ((invocation ) -> {
156
+ SessionSyncListener listener = (SessionSyncListener ) invocation .getArguments ()[0 ];
157
+ SessionMetadata metadata = mock (SessionMetadata .class );
158
+ actual .set (listener .onSessionReadyToSync (metadata ));
159
+ return null ;
160
+ });
161
+
162
+ doAnswer ((invocation ) -> {
163
+ SRModule .evaluateSync (shouldSync );
164
+ return null ;
165
+ }).when (SRModule ).sendEvent (eq (Constants .IBG_SESSION_REPLAY_ON_SYNC_CALLBACK_INVOCATION ), any ());
166
+
167
+ WritableMap params = Arguments .createMap ();
168
+
169
+ SRModule .setSyncCallback ();
170
+
171
+ assertEquals (shouldSync , actual .get ());
172
+ verify (SRModule ).sendEvent (Constants .IBG_SESSION_REPLAY_ON_SYNC_CALLBACK_INVOCATION , params );
173
+ mockSessionReplay .verify (() -> SessionReplay .setSyncCallback (any (SessionSyncListener .class )));
174
+
175
+ mockArguments .close ();
176
+ mockCountDownLatch .close ();
177
+ }
139
178
140
179
}
0 commit comments