1717package com .optimizely .ab .android .sdk ;
1818
1919import android .content .Context ;
20- import android .graphics .Path ;
2120
22- import com .optimizely .ab .Optimizely ;
2321import com .optimizely .ab .android .datafile_handler .DatafileHandler ;
2422import com .optimizely .ab .android .datafile_handler .DefaultDatafileHandler ;
2523import com .optimizely .ab .android .event_handler .DefaultEventHandler ;
2826import com .optimizely .ab .android .odp .ODPSegmentClient ;
2927import com .optimizely .ab .android .odp .VuidManager ;
3028import com .optimizely .ab .android .shared .DatafileConfig ;
31- import com .optimizely .ab .android .shared .WorkerScheduler ;
3229import com .optimizely .ab .android .user_profile .DefaultUserProfileService ;
3330import com .optimizely .ab .bucketing .UserProfileService ;
3431import com .optimizely .ab .error .ErrorHandler ;
3532import com .optimizely .ab .event .BatchEventProcessor ;
3633import com .optimizely .ab .event .EventHandler ;
3734import com .optimizely .ab .event .EventProcessor ;
3835import com .optimizely .ab .notification .NotificationCenter ;
39- import com .optimizely .ab .odp .ODPApiManager ;
4036import com .optimizely .ab .odp .ODPEventManager ;
4137import com .optimizely .ab .odp .ODPManager ;
4238import com .optimizely .ab .odp .ODPSegmentManager ;
4339
40+ import org .junit .After ;
4441import org .junit .Before ;
4542import org .junit .Test ;
4643import org .junit .runner .RunWith ;
4744import org .mockito .ArgumentCaptor ;
48- import org .mockito . runners . MockitoJUnitRunner ;
45+ import org .powermock . api . mockito . PowerMockito ;
4946import org .powermock .core .classloader .annotations .PowerMockIgnore ;
5047import org .powermock .core .classloader .annotations .PrepareForTest ;
5148import org .powermock .modules .junit4 .PowerMockRunner ;
49+ import org .powermock .reflect .Whitebox ;
5250import org .slf4j .Logger ;
5351
5452import static junit .framework .Assert .assertEquals ;
53+ import static org .junit .Assert .assertFalse ;
5554import static org .junit .Assert .assertNotNull ;
5655import static org .junit .Assert .assertNull ;
5756import static org .mockito .ArgumentMatchers .anyLong ;
6362import static org .mockito .Mockito .mock ;
6463import static org .mockito .Mockito .never ;
6564import static org .mockito .Mockito .spy ;
65+ import static org .mockito .Mockito .times ;
6666import static org .mockito .Mockito .verify ;
6767import static org .mockito .Mockito .when ;
6868import static org .powermock .api .mockito .PowerMockito .mockStatic ;
6969import static org .powermock .api .mockito .PowerMockito .verifyNew ;
7070import static org .powermock .api .mockito .PowerMockito .whenNew ;
7171
72- import java .sql .Time ;
7372import java .util .Map ;
7473import java .util .concurrent .TimeUnit ;
7574
7675@ RunWith (PowerMockRunner .class )
7776@ PowerMockIgnore ("jdk.internal.reflect.*" )
78- @ PrepareForTest ({OptimizelyManager .class , BatchEventProcessor .class , DefaultEventHandler .class , ODPManager .class , ODPSegmentManager .class , ODPEventManager .class })
77+ @ PrepareForTest ({OptimizelyManager .class , BatchEventProcessor .class , DefaultEventHandler .class , ODPManager .class , ODPSegmentManager .class , ODPEventManager .class , VuidManager . class })
7978public class OptimizelyManagerBuilderTest {
8079
8180 private String testProjectId = "7595190003" ;
8281 private String testSdkKey = "1234" ;
8382 private Logger logger ;
8483
84+ private VuidManager mockVuidManager ;
85+
8586 private String minDatafile = "{\n " +
8687 "experiments: [ ],\n " +
8788 "version: \" 2\" ,\n " +
@@ -101,6 +102,15 @@ public class OptimizelyManagerBuilderTest {
101102 public void setup () throws Exception {
102103 mockContext = mock (Context .class );
103104 mockDatafileHandler = mock (DefaultDatafileHandler .class );
105+
106+ mockStatic (VuidManager .class );
107+ VuidManager .Companion mockCompanion = PowerMockito .mock (VuidManager .Companion .class );
108+ mockVuidManager = PowerMockito .mock (VuidManager .class );
109+ PowerMockito .doReturn (mockVuidManager ).when (mockCompanion ).getInstance ();
110+ Whitebox .setInternalState (
111+ VuidManager .class , "Companion" ,
112+ mockCompanion
113+ );
104114 }
105115
106116 /**
@@ -400,4 +410,60 @@ public void testBuildWithODP_defaultCommonDataAndIdentifiers() throws Exception
400410 assertEquals (identifiers .size (), 1 );
401411 }
402412
413+ ODPManager .Builder getMockODPManagerBuilder () {
414+ ODPManager .Builder mockBuilder = PowerMockito .mock (ODPManager .Builder .class );
415+ when (mockBuilder .withApiManager (any ())).thenReturn (mockBuilder );
416+ when (mockBuilder .withSegmentCacheSize (any ())).thenReturn (mockBuilder );
417+ when (mockBuilder .withSegmentCacheTimeout (any ())).thenReturn (mockBuilder );
418+ when (mockBuilder .withSegmentManager (any ())).thenReturn (mockBuilder );
419+ when (mockBuilder .withEventManager (any ())).thenReturn (mockBuilder );
420+ when (mockBuilder .withUserCommonData (any ())).thenReturn (mockBuilder );
421+ when (mockBuilder .withUserCommonIdentifiers (any ())).thenReturn (mockBuilder );
422+ return mockBuilder ;
423+ }
424+
425+ @ Test
426+ public void testBuildWithVuidDisabled () throws Exception {
427+ mockStatic (ODPManager .class );
428+ ODPManager .Builder mockBuilder = getMockODPManagerBuilder ();
429+ when (mockBuilder .build ()).thenReturn (mock (ODPManager .class ));
430+ when (ODPManager .builder ()).thenReturn (mockBuilder );
431+
432+ OptimizelyManager manager = OptimizelyManager .builder ()
433+ .withSDKKey (testSdkKey )
434+ .build (mockContext );
435+
436+ verify (mockVuidManager , times (1 )).configure (eq (false ), any (Context .class ));
437+
438+ ArgumentCaptor <Map <String , String >> identifiersCaptor = ArgumentCaptor .forClass (Map .class );
439+ verify (mockBuilder ).withUserCommonIdentifiers (identifiersCaptor .capture ());
440+ Map <String , String > identifiers = identifiersCaptor .getValue ();
441+ assertFalse (identifiers .containsKey ("vuid" ));
442+
443+ when (ODPManager .builder ()).thenCallRealMethod ();
444+ }
445+
446+ @ Test
447+ public void testBuildWithVuidEnabled () throws Exception {
448+ mockStatic (ODPManager .class );
449+ ODPManager .Builder mockBuilder = getMockODPManagerBuilder ();
450+ when (mockBuilder .build ()).thenReturn (mock (ODPManager .class ));
451+ when (ODPManager .builder ()).thenReturn (mockBuilder );
452+
453+ when (mockVuidManager .getVuid ()).thenReturn ("vuid_test" );
454+
455+ OptimizelyManager manager = OptimizelyManager .builder ()
456+ .withSDKKey (testSdkKey )
457+ .withVuidEnabled ()
458+ .build (mockContext );
459+
460+ verify (mockVuidManager , times (1 )).configure (eq (true ), any (Context .class ));
461+
462+ ArgumentCaptor <Map <String , String >> identifiersCaptor = ArgumentCaptor .forClass (Map .class );
463+ verify (mockBuilder ).withUserCommonIdentifiers (identifiersCaptor .capture ());
464+ Map <String , String > identifiers = identifiersCaptor .getValue ();
465+ assertEquals (identifiers .get ("vuid" ), "vuid_test" );
466+
467+ when (ODPManager .builder ()).thenCallRealMethod ();
468+ }
403469}
0 commit comments