Skip to content

Commit 969180c

Browse files
committed
fix for java-sdk changes
1 parent cb1d9ea commit 969180c

File tree

6 files changed

+186
-184
lines changed

6 files changed

+186
-184
lines changed

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

Lines changed: 15 additions & 15 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 getOptimizely().decideSync(copy(), key, options);
75+
return super.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 getOptimizely().decideForKeysSync(copy(), keys, options);
110+
return super.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 getOptimizely().decideAllSync(copy(), options);
140+
return super.decideAllSync(options);
141141
}
142142

143143
/**
@@ -162,9 +162,9 @@ public Map<String, OptimizelyDecision> decideAll() {
162162
* @param options A list of options for decision-making.
163163
*/
164164
public void decideAsync(@NonNull String key,
165-
@NonNull OptimizelyDecisionCallback callback,
166-
@NonNull List<OptimizelyDecideOption> options) {
167-
getOptimizely().decideAsync(copy(), key, callback, options);
165+
@NonNull List<OptimizelyDecideOption> options,
166+
@NonNull OptimizelyDecisionCallback callback) {
167+
super.decideAsync(key, options, callback);
168168
}
169169

170170
/**
@@ -174,7 +174,7 @@ public void decideAsync(@NonNull String key,
174174
* @param callback A callback to invoke when the decision is available.
175175
*/
176176
public void decideAsync(@NonNull String key, @NonNull OptimizelyDecisionCallback callback) {
177-
decideAsync(key, callback, Collections.emptyList());
177+
decideAsync(key, Collections.emptyList(), callback);
178178
}
179179

180180
/**
@@ -185,9 +185,9 @@ public void decideAsync(@NonNull String key, @NonNull OptimizelyDecisionCallback
185185
* @param options A list of options for decision-making.
186186
*/
187187
public void decideForKeysAsync(@NonNull List<String> keys,
188-
@NonNull OptimizelyDecisionsCallback callback,
189-
@NonNull List<OptimizelyDecideOption> options) {
190-
getOptimizely().decideForKeysAsync(copy(), keys, callback, options);
188+
@NonNull List<OptimizelyDecideOption> options,
189+
@NonNull OptimizelyDecisionsCallback callback) {
190+
super.decideForKeysAsync(keys, options, callback);
191191
}
192192

193193
/**
@@ -197,7 +197,7 @@ public void decideForKeysAsync(@NonNull List<String> keys,
197197
* @param callback A callback to invoke when decisions are available.
198198
*/
199199
public void decideForKeysAsync(@NonNull List<String> keys, @NonNull OptimizelyDecisionsCallback callback) {
200-
decideForKeysAsync(keys, callback, Collections.emptyList());
200+
decideForKeysAsync(keys, Collections.emptyList(), callback);
201201
}
202202

203203
/**
@@ -206,9 +206,9 @@ public void decideForKeysAsync(@NonNull List<String> keys, @NonNull OptimizelyDe
206206
* @param callback A callback to invoke when decisions are available.
207207
* @param options A list of options for decision-making.
208208
*/
209-
public void decideAllAsync(@NonNull OptimizelyDecisionsCallback callback,
210-
@NonNull List<OptimizelyDecideOption> options) {
211-
getOptimizely().decideAllAsync(copy(), callback, options);
209+
public void decideAllAsync(@NonNull List<OptimizelyDecideOption> options,
210+
@NonNull OptimizelyDecisionsCallback callback) {
211+
super.decideAllAsync(options, callback);
212212
}
213213

214214
/**
@@ -217,7 +217,7 @@ public void decideAllAsync(@NonNull OptimizelyDecisionsCallback callback,
217217
* @param callback A callback to invoke when decisions are available.
218218
*/
219219
public void decideAllAsync(@NonNull OptimizelyDecisionsCallback callback) {
220-
decideAllAsync(callback, Collections.emptyList());
220+
decideAllAsync(Collections.emptyList(), callback);
221221
}
222222

223223
}

android-sdk/src/main/java/com/optimizely/ab/android/sdk/cmab/DefaultCmabClient.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ open class DefaultCmabClient(private val client: Client) : CmabClient {
4343
val request: Client.Request<String?> = Client.Request {
4444
var urlConnection: HttpURLConnection? = null
4545
try {
46-
// [TESTING]
47-
// val apiEndpoint = String.format(CmabClientHelper.CMAB_PREDICTION_ENDPOINT, ruleId)
48-
val apiEndpoint = String.format("https://prediction.cmab.optimizely.com/predict/%s", ruleId)
46+
val apiEndpoint = String.format(CmabClientHelper.CMAB_PREDICTION_ENDPOINT, ruleId)
4947

5048
val requestBody: String =
5149
CmabClientHelper.buildRequestJson(userId, ruleId, attributes, cmabUuid)

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

Lines changed: 45 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,18 @@
2525
import com.optimizely.ab.android.odp.ODPEventClient;
2626
import com.optimizely.ab.android.odp.ODPSegmentClient;
2727
import com.optimizely.ab.android.odp.VuidManager;
28-
import com.optimizely.ab.android.sdk.cmab.CMABClient;
28+
import com.optimizely.ab.android.sdk.cmab.DefaultCmabClient;
2929
import com.optimizely.ab.android.shared.Client;
3030
import com.optimizely.ab.android.shared.DatafileConfig;
3131
import com.optimizely.ab.android.user_profile.DefaultUserProfileService;
3232
import com.optimizely.ab.bucketing.UserProfileService;
33+
import com.optimizely.ab.cmab.client.CmabClient;
34+
import com.optimizely.ab.cmab.service.DefaultCmabService;
3335
import com.optimizely.ab.error.ErrorHandler;
3436
import com.optimizely.ab.event.BatchEventProcessor;
3537
import com.optimizely.ab.event.EventHandler;
3638
import com.optimizely.ab.event.EventProcessor;
39+
import com.optimizely.ab.internal.DefaultLRUCache;
3740
import com.optimizely.ab.notification.NotificationCenter;
3841
import com.optimizely.ab.odp.ODPEventManager;
3942
import com.optimizely.ab.odp.ODPManager;
@@ -55,6 +58,7 @@
5558
import static org.junit.Assert.assertFalse;
5659
import static org.junit.Assert.assertNotNull;
5760
import static org.junit.Assert.assertNull;
61+
import static org.mockito.ArgumentMatchers.anyInt;
5862
import static org.mockito.ArgumentMatchers.anyLong;
5963
import static org.mockito.ArgumentMatchers.anyString;
6064
import static org.mockito.ArgumentMatchers.isNull;
@@ -75,7 +79,17 @@
7579
import java.util.concurrent.TimeUnit;
7680

7781
@RunWith(PowerMockRunner.class)
78-
@PrepareForTest({OptimizelyManager.class, BatchEventProcessor.class, DefaultEventHandler.class, ODPManager.class, ODPSegmentManager.class, ODPEventManager.class, VuidManager.class})
82+
@PrepareForTest({
83+
OptimizelyManager.class,
84+
BatchEventProcessor.class,
85+
DefaultEventHandler.class,
86+
ODPManager.class,
87+
ODPSegmentManager.class,
88+
ODPEventManager.class,
89+
VuidManager.class,
90+
CmabClient.class,
91+
DefaultCmabService.class
92+
})
7993
public class OptimizelyManagerBuilderTest {
8094

8195
private String testProjectId = "7595190003";
@@ -261,6 +275,7 @@ public void testBuildWithDefaultODP_defaultEnabled() throws Exception {
261275
any(NotificationCenter.class),
262276
any(), // nullable (DefaultDecideOptions)
263277
any(ODPManager.class),
278+
any(),
264279
eq("test-vuid"),
265280
any(),
266281
any());
@@ -291,6 +306,7 @@ public void testBuildWithDefaultODP_disabled() throws Exception {
291306
any(NotificationCenter.class),
292307
any(), // nullable (DefaultDecideOptions)
293308
isNull(),
309+
any(),
294310
eq("test-vuid"),
295311
any(),
296312
any());
@@ -468,30 +484,29 @@ public void testBuildWithVuidEnabled() throws Exception {
468484
when(ODPManager.builder()).thenCallRealMethod();
469485
}
470486

487+
DefaultCmabService.Builder getMockDefaultCmabServiceBuilder() {
488+
DefaultCmabService.Builder mockBuilder = PowerMockito.mock(DefaultCmabService.Builder.class);
489+
when(mockBuilder.withClient(any())).thenReturn(mockBuilder);
490+
when(mockBuilder.withCmabCacheSize(anyInt())).thenReturn(mockBuilder);
491+
when(mockBuilder.withCmabCacheTimeoutInSecs(anyInt())).thenReturn(mockBuilder);
492+
return mockBuilder;
493+
}
494+
471495
@Test
472496
public void testCmabServiceConfigurationValidation() throws Exception {
473497
// Custom configuration values
474498
int customCacheSize = 500;
475499
int customTimeoutMinutes = 45;
476500
int expectedTimeoutSeconds = customTimeoutMinutes * 60; // 45 min = 2700 sec
477-
CMABClient mockCmabClient = mock(CMABClient.class);
478-
479-
// Create mocks for the CMAB service creation chain
480-
Object mockDefaultLRUCache = PowerMockito.mock(Class.forName("com.optimizely.ab.cache.DefaultLRUCache"));
481-
Object mockCmabServiceOptions = PowerMockito.mock(Class.forName("com.optimizely.ab.cmab.CmabServiceOptions"));
482-
Object mockDefaultCmabService = PowerMockito.mock(Class.forName("com.optimizely.ab.cmab.DefaultCmabService"));
501+
CmabClient mockCmabClient = mock(CmabClient.class);
483502

484-
// Mock the construction chain with parameter validation
485-
whenNew(Class.forName("com.optimizely.ab.cache.DefaultLRUCache"))
486-
.thenReturn(mockDefaultLRUCache);
503+
DefaultCmabService.Builder mockBuilder = getMockDefaultCmabServiceBuilder();
504+
mockStatic(DefaultCmabService.class);
505+
when(DefaultCmabService.builder()).thenReturn(mockBuilder);
487506

488-
whenNew(Class.forName("com.optimizely.ab.cmab.CmabServiceOptions"))
489-
.thenReturn(mockCmabServiceOptions);
507+
DefaultCmabService mockDefaultCmabService = mock(DefaultCmabService.class);
508+
when(mockBuilder.build()).thenReturn(mockDefaultCmabService);
490509

491-
whenNew(Class.forName("com.optimizely.ab.cmab.DefaultCmabService"))
492-
.thenReturn(mockDefaultCmabService);
493-
494-
// Use PowerMock to verify OptimizelyManager constructor is called with CMAB service
495510
whenNew(OptimizelyManager.class).withAnyArguments().thenReturn(mock(OptimizelyManager.class));
496511

497512
OptimizelyManager manager = OptimizelyManager.builder(testProjectId)
@@ -500,14 +515,10 @@ public void testCmabServiceConfigurationValidation() throws Exception {
500515
.withCmabClient(mockCmabClient)
501516
.build(mockContext);
502517

503-
verifyNew(Class.forName("com.optimizely.ab.cache.DefaultLRUCache"))
504-
.withArguments(eq(customCacheSize), eq(expectedTimeoutSeconds));
505-
506-
verifyNew(Class.forName("com.optimizely.ab.cmab.CmabServiceOptions"))
507-
.withArguments(any(), eq(mockDefaultLRUCache), eq(mockCmabClient));
508-
509-
verifyNew(Class.forName("com.optimizely.ab.cmab.DefaultCmabService"))
510-
.withArguments(eq(mockCmabServiceOptions));
518+
verify(mockBuilder).withCmabCacheSize(eq(customCacheSize));
519+
verify(mockBuilder).withCmabCacheTimeoutInSecs(eq(expectedTimeoutSeconds));
520+
verify(mockBuilder).withClient(eq(mockCmabClient));
521+
verify(mockBuilder).build();
511522

512523
// Verify OptimizelyManager constructor was called with the mocked CMAB service
513524
verifyNew(OptimizelyManager.class).withArguments(
@@ -540,24 +551,12 @@ public void testCmabServiceDefaultConfigurationValidation() throws Exception {
540551
int defaultCacheSize = 100;
541552
int defaultTimeoutSeconds = 30 * 60; // 30 minutes = 1800 seconds
542553

543-
// Create mocks for the CMAB service creation chain
544-
Object mockDefaultLRUCache = PowerMockito.mock(Class.forName("com.optimizely.ab.cache.DefaultLRUCache"));
545-
Object mockDefaultCmabClient = PowerMockito.mock(Class.forName("com.optimizely.ab.cmab.DefaultCmabClient"));
546-
Object mockCmabServiceOptions = PowerMockito.mock(Class.forName("com.optimizely.ab.cmab.CmabServiceOptions"));
547-
Object mockDefaultCmabService = PowerMockito.mock(Class.forName("com.optimizely.ab.cmab.DefaultCmabService"));
548-
549-
// Mock the construction chain with parameter validation
550-
whenNew(Class.forName("com.optimizely.ab.cache.DefaultLRUCache"))
551-
.thenReturn(mockDefaultLRUCache);
552-
553-
whenNew(Class.forName("com.optimizely.ab.cmab.DefaultCmabClient"))
554-
.thenReturn(mockDefaultCmabClient);
554+
DefaultCmabService.Builder mockBuilder = getMockDefaultCmabServiceBuilder();
555+
mockStatic(DefaultCmabService.class);
556+
when(DefaultCmabService.builder()).thenReturn(mockBuilder);
555557

556-
whenNew(Class.forName("com.optimizely.ab.cmab.CmabServiceOptions"))
557-
.thenReturn(mockCmabServiceOptions);
558-
559-
whenNew(Class.forName("com.optimizely.ab.cmab.DefaultCmabService"))
560-
.thenReturn(mockDefaultCmabService);
558+
DefaultCmabService mockDefaultCmabService = mock(DefaultCmabService.class);
559+
when(mockBuilder.build()).thenReturn(mockDefaultCmabService);
561560

562561
// Use PowerMock to verify OptimizelyManager constructor is called with CMAB service
563562
whenNew(OptimizelyManager.class).withAnyArguments().thenReturn(mock(OptimizelyManager.class));
@@ -566,19 +565,10 @@ public void testCmabServiceDefaultConfigurationValidation() throws Exception {
566565
OptimizelyManager manager = OptimizelyManager.builder(testProjectId)
567566
.build(mockContext);
568567

569-
verifyNew(Class.forName("com.optimizely.ab.cache.DefaultLRUCache"))
570-
.withArguments(eq(defaultCacheSize), eq(defaultTimeoutSeconds));
571-
572-
// Verify DefaultCmabClient is created with default parameters
573-
verifyNew(Class.forName("com.optimizely.ab.cmab.DefaultCmabClient"))
574-
.withNoArguments();
575-
576-
// Verify CmabServiceOptions is created with logger, cache, and default client
577-
verifyNew(Class.forName("com.optimizely.ab.cmab.CmabServiceOptions"))
578-
.withArguments(any(), eq(mockDefaultLRUCache), eq(mockDefaultCmabClient));
579-
580-
verifyNew(Class.forName("com.optimizely.ab.cmab.DefaultCmabService"))
581-
.withArguments(eq(mockCmabServiceOptions));
568+
verify(mockBuilder).withCmabCacheSize(eq(defaultCacheSize));
569+
verify(mockBuilder).withCmabCacheTimeoutInSecs(eq(defaultTimeoutSeconds));
570+
verify(mockBuilder).withClient(any(DefaultCmabClient.class));
571+
verify(mockBuilder).build();
582572

583573
// Verify OptimizelyManager constructor was called with the mocked CMAB service
584574
verifyNew(OptimizelyManager.class).withArguments(

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ public void testBuildWithDatafileDownloadInterval() throws Exception {
115115
any(NotificationCenter.class),
116116
any(), // nullable (DefaultDecideOptions)
117117
any(ODPManager.class),
118+
any(),
118119
anyString(),
119120
any(),
120121
any());
@@ -144,6 +145,7 @@ public void testBuildWithDatafileDownloadIntervalDeprecated() throws Exception {
144145
any(NotificationCenter.class),
145146
any(), // nullable (DefaultDecideOptions)
146147
any(ODPManager.class),
148+
any(),
147149
anyString(),
148150
any(),
149151
any());
@@ -185,6 +187,7 @@ public void testBuildWithEventDispatchInterval() throws Exception {
185187
any(NotificationCenter.class),
186188
any(), // nullable (DefaultDecideOptions)
187189
any(ODPManager.class),
190+
any(),
188191
anyString(),
189192
any(),
190193
any());
@@ -229,6 +232,7 @@ public void testBuildWithEventDispatchRetryInterval() throws Exception {
229232
any(NotificationCenter.class),
230233
any(), // nullable (DefaultDecideOptions)
231234
any(ODPManager.class),
235+
any(),
232236
anyString(),
233237
any(),
234238
any());
@@ -269,6 +273,7 @@ public void testBuildWithEventDispatchIntervalDeprecated() throws Exception {
269273
any(NotificationCenter.class),
270274
any(), // nullable (DefaultDecideOptions)
271275
any(ODPManager.class),
276+
any(),
272277
anyString(),
273278
any(),
274279
any());

0 commit comments

Comments
 (0)