@@ -1185,6 +1185,59 @@ public void testOnExecuteControlEventIsSentForHoldoutGroup() {
1185
1185
verify (mockMessageScheduleDelegate ).onExecute (schedule , executeCallback );
1186
1186
}
1187
1187
1188
+ @ Test
1189
+ public void testRemoteDataInfoChangesBeforeExecute () {
1190
+ InAppMessage message = InAppMessage .newBuilder ()
1191
+ .setDisplayContent (new CustomDisplayContent (JsonValue .NULL ))
1192
+ .build ();
1193
+
1194
+ Schedule <InAppMessage > schedule = Schedule .newBuilder (message )
1195
+ .setId ("test-id" )
1196
+ .addTrigger (Triggers .newAppInitTriggerBuilder ().setGoal (1 ).build ())
1197
+ .build ();
1198
+
1199
+ when (mockObserver .requiresRefresh (eq (schedule ))).thenReturn (false );
1200
+ when (mockObserver .bestEffortRefresh (eq (schedule ))).thenReturn (true );
1201
+ when (mockObserver .isScheduleValid (eq (schedule ))).thenReturn (true );
1202
+
1203
+ MessageInfo expectedInfo = new MessageInfo ("transactional" , null );
1204
+ JsonMap experimentMetadata = JsonMap
1205
+ .newBuilder ()
1206
+ .put ("report" , "metadata" )
1207
+ .build ();
1208
+
1209
+ List <JsonMap > metadata = Collections .singletonList (experimentMetadata );
1210
+ ExperimentResult results = new ExperimentResult ("cid" , "coid" , "eid" , true , metadata );
1211
+
1212
+ PendingResult <ExperimentResult > pendingResult = new PendingResult <>();
1213
+ pendingResult .setResult (results );
1214
+ doReturn (pendingResult )
1215
+ .when (mockExperimentManager )
1216
+ .evaluateGlobalHoldoutsPendingResult (eq (expectedInfo ), nullable (String .class ));
1217
+
1218
+ doReturn (new RemoteDataInfo ("url" , null , RemoteDataSource .APP , null ))
1219
+ .when (mockObserver ).parseRemoteDataInfo (eq (schedule ));
1220
+
1221
+ AutomationDriver .PrepareScheduleCallback callback = mock (AutomationDriver .PrepareScheduleCallback .class );
1222
+ driver .onPrepareSchedule (schedule , null , callback );
1223
+
1224
+ ArgumentCaptor <AutomationDriver .PrepareScheduleCallback > argumentCaptor = ArgumentCaptor .forClass (AutomationDriver .PrepareScheduleCallback .class );
1225
+ verify (mockMessageScheduleDelegate , times (1 )).onPrepareSchedule (eq (schedule ), eq (schedule .getData ()), eq (results ), argumentCaptor .capture ());
1226
+ argumentCaptor .getValue ().onFinish (AutomationDriver .PREPARE_RESULT_CONTINUE );
1227
+ verify (callback ).onFinish (AutomationDriver .PREPARE_RESULT_CONTINUE );
1228
+
1229
+ // Verify its not invalid before the remote-data info changes
1230
+ assertEquals (AutomationDriver .READY_RESULT_NOT_READY , driver .onCheckExecutionReadiness (schedule ));
1231
+
1232
+ // Change remote data
1233
+ doReturn (new RemoteDataInfo ("some other url" , null , RemoteDataSource .APP , null ))
1234
+ .when (mockObserver ).parseRemoteDataInfo (eq (schedule ));
1235
+
1236
+ // Should be invalid since the remote-data info is not longer the same as when it was prepared
1237
+ assertEquals (AutomationDriver .READY_RESULT_INVALIDATE , driver .onCheckExecutionReadiness (schedule ));
1238
+
1239
+ }
1240
+
1188
1241
/**
1189
1242
* Helper method to run all the looper tasks.
1190
1243
*/
0 commit comments