Skip to content

Commit 2b2497f

Browse files
committed
fix cmab tests
1 parent 70a3039 commit 2b2497f

File tree

5 files changed

+47
-23
lines changed

5 files changed

+47
-23
lines changed

android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationUpdateConfigTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ public void setup() throws Exception {
117117
notificationCenter,
118118
null,
119119
odpManager,
120+
null,
120121
"test-vuid",
121122
null,
122123
null);

android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2249,7 +2249,9 @@ public void testDecide() {
22492249
assertEquals(decision.getVariables().toMap(), variablesExpected.toMap());
22502250
assertEquals(decision.getRuleKey(), FEATURE_MULTI_VARIATE_EXPERIMENT_KEY);
22512251
assertEquals(decision.getFlagKey(), flagKey);
2252-
assertEquals(decision.getUserContext(), userContext);
2252+
OptimizelyUserContext decisionUserContext = decision.getUserContext();
2253+
assertEquals(decisionUserContext.getUserId(), userContext.getUserId());
2254+
assertEquals(decisionUserContext.getAttributes(), userContext.getAttributes());
22532255
assertTrue(decision.getReasons().isEmpty());
22542256
}
22552257

android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public void initializeSyncWithEnvironment() {
163163
EventHandler eventHandler = mock(DefaultEventHandler.class);
164164
EventProcessor eventProcessor = mock(EventProcessor.class);
165165
OptimizelyManager optimizelyManager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, 3600L, datafileHandler, null, 3600L,
166-
eventHandler, eventProcessor, null, null, null, null, null, null, null);
166+
eventHandler, eventProcessor, null, null, null, null, null, null, null, null);
167167
/*
168168
* Scenario#1: when datafile is not Empty
169169
* Scenario#2: when datafile is Empty
@@ -222,7 +222,7 @@ public void initializeAsyncWithEnvironment() {
222222
EventHandler eventHandler = mock(DefaultEventHandler.class);
223223
EventProcessor eventProcessor = mock(EventProcessor.class);
224224
final OptimizelyManager optimizelyManager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, 3600L, datafileHandler, null, 3600L,
225-
eventHandler, eventProcessor, null, null, null, null, null, null, null);
225+
eventHandler, eventProcessor, null, null, null, null, null, null, null, null);
226226

227227
/*
228228
* Scenario#1: when datafile is not Empty
@@ -494,7 +494,7 @@ public void initializeSyncWithUpdateOnNewDatafileDisabled() {
494494
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
495495

496496
OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0,
497-
null, null, null, null, null, null, null, null, null);
497+
null, null, null, null, null, null, null, null, null, null);
498498

499499
ArgumentCaptor<Context> contextCaptor = ArgumentCaptor.forClass(Context.class);
500500
ArgumentCaptor<DatafileConfig> configCaptor = ArgumentCaptor.forClass(DatafileConfig.class);
@@ -533,7 +533,7 @@ public void initializeSyncWithUpdateOnNewDatafileEnabled() {
533533
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
534534

535535
OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0,
536-
null, null, null, null, null, null, null, null, null);
536+
null, null, null, null, null, null, null, null, null, null);
537537

538538
ArgumentCaptor<Context> contextCaptor = ArgumentCaptor.forClass(Context.class);
539539
ArgumentCaptor<DatafileConfig> configCaptor = ArgumentCaptor.forClass(DatafileConfig.class);
@@ -572,7 +572,7 @@ public void initializeSyncWithDownloadToCacheDisabled() {
572572
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
573573

574574
OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0,
575-
null, null, null, null, null, null, null, null, null);
575+
null, null, null, null, null, null, null, null, null, null);
576576

577577
ArgumentCaptor<Context> contextCaptor = ArgumentCaptor.forClass(Context.class);
578578
ArgumentCaptor<DatafileConfig> configCaptor = ArgumentCaptor.forClass(DatafileConfig.class);
@@ -611,7 +611,7 @@ public void initializeSyncWithUpdateOnNewDatafileDisabledWithPeriodicPollingEnab
611611
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
612612

613613
OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0,
614-
null, null, null, null, null, null, null, null, null);
614+
null, null, null, null, null, null, null, null, null, null);
615615

616616
ArgumentCaptor<Context> contextCaptor = ArgumentCaptor.forClass(Context.class);
617617
ArgumentCaptor<DatafileConfig> configCaptor = ArgumentCaptor.forClass(DatafileConfig.class);
@@ -651,7 +651,7 @@ public void initializeSyncWithUpdateOnNewDatafileEnabledWithPeriodicPollingEnabl
651651
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
652652

653653
OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0,
654-
null, null, null, null, null, null, null, null, null);
654+
null, null, null, null, null, null, null, null, null, null);
655655

656656
ArgumentCaptor<Context> contextCaptor = ArgumentCaptor.forClass(Context.class);
657657
ArgumentCaptor<DatafileConfig> configCaptor = ArgumentCaptor.forClass(DatafileConfig.class);
@@ -690,7 +690,7 @@ public void initializeSyncWithUpdateOnNewDatafileDisabledWithPeriodicPollingDisa
690690
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
691691

692692
OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0,
693-
null, null, null, null, null, null, null, null, null);
693+
null, null, null, null, null, null, null, null, null, null);
694694

695695
ArgumentCaptor<Context> contextCaptor = ArgumentCaptor.forClass(Context.class);
696696
ArgumentCaptor<DatafileConfig> configCaptor = ArgumentCaptor.forClass(DatafileConfig.class);
@@ -706,7 +706,7 @@ public void initializeSyncWithUpdateOnNewDatafileDisabledWithPeriodicPollingDisa
706706

707707
return datafileHandler;
708708
}).when(manager.getDatafileHandler()).downloadDatafile(contextCaptor.capture(), configCaptor.capture(), listenerCaptor.capture());
709-
709+
710710
OptimizelyClient client = manager.initialize(context, defaultDatafile, downloadToCache, updateConfigOnNewDatafile);
711711

712712
try {
@@ -730,7 +730,7 @@ public void initializeSyncWithUpdateOnNewDatafileEnabledWithPeriodicPollingDisab
730730
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
731731

732732
OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0,
733-
null, null, null, null, null, null, null, null, null);
733+
null, null, null, null, null, null, null, null, null, null);
734734

735735
ArgumentCaptor<Context> contextCaptor = ArgumentCaptor.forClass(Context.class);
736736
ArgumentCaptor<DatafileConfig> configCaptor = ArgumentCaptor.forClass(DatafileConfig.class);
@@ -769,7 +769,7 @@ public void initializeSyncWithResourceDatafileNoCache() {
769769
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
770770

771771
OptimizelyManager manager = spy(new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0,
772-
null, null, null, null, null, null, null, null, null));
772+
null, null, null, null, null, null, null, null, null, null));
773773

774774
datafileHandler.removeSavedDatafile(context, manager.getDatafileConfig());
775775
OptimizelyClient client = manager.initialize(context, R.raw.datafile, downloadToCache, updateConfigOnNewDatafile);
@@ -786,7 +786,7 @@ public void initializeSyncWithResourceDatafileNoCacheWithDefaultParams() {
786786
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
787787

788788
OptimizelyManager manager = spy(new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0,
789-
null, null, null, null, null, null, null, null, null));
789+
null, null, null, null, null, null, null, null, null, null));
790790

791791
datafileHandler.removeSavedDatafile(context, manager.getDatafileConfig());
792792
OptimizelyClient client = manager.initialize(context, R.raw.datafile);

android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyUserContextAndroid.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public OptimizelyUserContextAndroid(@NonNull Optimizely optimizely,
7272
@Override
7373
public OptimizelyDecision decide(@NonNull String key,
7474
@NonNull List<OptimizelyDecideOption> options) {
75-
return super.decideSync(key, options);
75+
return decideSync(key, options);
7676
}
7777

7878
/**
@@ -107,7 +107,7 @@ public OptimizelyDecision decide(@NonNull String key) {
107107
@Override
108108
public Map<String, OptimizelyDecision> decideForKeys(@NonNull List<String> keys,
109109
@NonNull List<OptimizelyDecideOption> options) {
110-
return super.decideForKeysSync(keys, options);
110+
return decideForKeysSync(keys, options);
111111
}
112112

113113
/**
@@ -137,7 +137,7 @@ public Map<String, OptimizelyDecision> decideForKeys(@NonNull List<String> keys)
137137
*/
138138
@Override
139139
public Map<String, OptimizelyDecision> decideAll(@NonNull List<OptimizelyDecideOption> options) {
140-
return super.decideAllSync(options);
140+
return decideAllSync(options);
141141
}
142142

143143
/**
@@ -154,6 +154,10 @@ public Map<String, OptimizelyDecision> decideAll() {
154154
return decideAll(Collections.emptyList());
155155
}
156156

157+
// ===========================================
158+
// Async Methods (Android-specific)
159+
// ===========================================
160+
157161
/**
158162
* Returns a decision result asynchronously for a given flag key and a user context.
159163
*
@@ -220,4 +224,22 @@ public void decideAllAsync(@NonNull OptimizelyDecisionsCallback callback) {
220224
decideAllAsync(Collections.emptyList(), callback);
221225
}
222226

227+
// ===========================================
228+
// Override methods for testability
229+
// These methods enable Mockito spies to intercept calls that would
230+
// otherwise go directly to super.method() and be unverifiable
231+
// ===========================================
232+
233+
public OptimizelyDecision decideSync(@NonNull String key, @NonNull List<OptimizelyDecideOption> options) {
234+
return super.decideSync(key, options);
235+
}
236+
237+
public Map<String, OptimizelyDecision> decideForKeysSync(@NonNull List<String> keys, @NonNull List<OptimizelyDecideOption> options) {
238+
return super.decideForKeysSync(keys, options);
239+
}
240+
241+
public Map<String, OptimizelyDecision> decideAllSync(@NonNull List<OptimizelyDecideOption> options) {
242+
return super.decideAllSync(options);
243+
}
244+
223245
}

android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyUserContextAndroidTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.mockito.Mock;
2929
import org.mockito.Mockito;
3030
import org.mockito.junit.MockitoJUnitRunner;
31-
import org.powermock.api.mockito.PowerMockito;
3231

3332
import java.lang.reflect.Method;
3433
import java.util.Arrays;
@@ -146,7 +145,7 @@ public void testDecide_withOptions() throws Exception {
146145
testAttributes
147146
)
148147
);
149-
PowerMockito.doReturn(mockDecision).when(userContextSpy, "decideSync", any(), any());
148+
doReturn(mockDecision).when(userContextSpy).decideSync(any(), any());
150149

151150
OptimizelyDecision result = userContextSpy.decide(TEST_FLAG_KEY, TEST_OPTIONS);
152151
verify(userContextSpy).decideSync(eq(TEST_FLAG_KEY), eq(TEST_OPTIONS));
@@ -162,7 +161,7 @@ public void testDecide_withoutOptions() throws Exception {
162161
testAttributes
163162
)
164163
);
165-
PowerMockito.doReturn(mockDecision).when(userContextSpy, "decideSync", any(), any());
164+
doReturn(mockDecision).when(userContextSpy).decideSync(any(), any());
166165

167166
OptimizelyDecision result = userContextSpy.decide(TEST_FLAG_KEY);
168167
verify(userContextSpy).decideSync(eq(TEST_FLAG_KEY), eq(Collections.emptyList()));
@@ -178,7 +177,7 @@ public void testDecideForKeys_withOptions() throws Exception {
178177
testAttributes
179178
)
180179
);
181-
PowerMockito.doReturn(mockDecisionsMap).when(userContextSpy, "decideForKeysSync", any(), any());
180+
doReturn(mockDecisionsMap).when(userContextSpy).decideForKeysSync(any(), any());
182181

183182
Map<String, OptimizelyDecision> result = userContextSpy.decideForKeys(TEST_FLAG_KEYS, TEST_OPTIONS);
184183
verify(userContextSpy).decideForKeysSync(eq(TEST_FLAG_KEYS), eq(TEST_OPTIONS));
@@ -194,7 +193,7 @@ public void testDecideForKeys_withoutOptions() throws Exception {
194193
testAttributes
195194
)
196195
);
197-
PowerMockito.doReturn(mockDecisionsMap).when(userContextSpy, "decideForKeysSync", any(), any());
196+
doReturn(mockDecisionsMap).when(userContextSpy).decideForKeysSync(any(), any());
198197

199198
Map<String, OptimizelyDecision> result = userContextSpy.decideForKeys(TEST_FLAG_KEYS);
200199
verify(userContextSpy).decideForKeysSync(eq(TEST_FLAG_KEYS), eq(Collections.emptyList()));
@@ -210,7 +209,7 @@ public void testDecideAll_withOptions() throws Exception {
210209
testAttributes
211210
)
212211
);
213-
PowerMockito.doReturn(mockDecisionsMap).when(userContextSpy, "decideAllSync", any());
212+
doReturn(mockDecisionsMap).when(userContextSpy).decideAllSync(any());
214213

215214
Map<String, OptimizelyDecision> result = userContextSpy.decideAll(TEST_OPTIONS);
216215
verify(userContextSpy).decideAllSync(eq(TEST_OPTIONS));
@@ -226,7 +225,7 @@ public void testDecideAll_withoutOptions() throws Exception {
226225
testAttributes
227226
)
228227
);
229-
PowerMockito.doReturn(mockDecisionsMap).when(userContextSpy, "decideAllSync", any());
228+
doReturn(mockDecisionsMap).when(userContextSpy).decideAllSync(any());
230229

231230
Map<String, OptimizelyDecision> result = userContextSpy.decideAll();
232231
verify(userContextSpy).decideAllSync(eq(Collections.emptyList()));

0 commit comments

Comments
 (0)