17
17
package com .optimizely .ab .android .sdk ;
18
18
19
19
import android .content .Context ;
20
- import android .graphics .Path ;
21
20
22
- import com .optimizely .ab .Optimizely ;
23
21
import com .optimizely .ab .android .datafile_handler .DatafileHandler ;
24
22
import com .optimizely .ab .android .datafile_handler .DefaultDatafileHandler ;
25
23
import com .optimizely .ab .android .event_handler .DefaultEventHandler ;
28
26
import com .optimizely .ab .android .odp .ODPSegmentClient ;
29
27
import com .optimizely .ab .android .odp .VuidManager ;
30
28
import com .optimizely .ab .android .shared .DatafileConfig ;
31
- import com .optimizely .ab .android .shared .WorkerScheduler ;
32
29
import com .optimizely .ab .android .user_profile .DefaultUserProfileService ;
33
30
import com .optimizely .ab .bucketing .UserProfileService ;
34
31
import com .optimizely .ab .error .ErrorHandler ;
35
32
import com .optimizely .ab .event .BatchEventProcessor ;
36
33
import com .optimizely .ab .event .EventHandler ;
37
34
import com .optimizely .ab .event .EventProcessor ;
38
35
import com .optimizely .ab .notification .NotificationCenter ;
39
- import com .optimizely .ab .odp .ODPApiManager ;
40
36
import com .optimizely .ab .odp .ODPEventManager ;
41
37
import com .optimizely .ab .odp .ODPManager ;
42
38
import com .optimizely .ab .odp .ODPSegmentManager ;
43
39
40
+ import org .junit .After ;
44
41
import org .junit .Before ;
45
42
import org .junit .Test ;
46
43
import org .junit .runner .RunWith ;
47
44
import org .mockito .ArgumentCaptor ;
48
- import org .mockito . runners . MockitoJUnitRunner ;
45
+ import org .powermock . api . mockito . PowerMockito ;
49
46
import org .powermock .core .classloader .annotations .PowerMockIgnore ;
50
47
import org .powermock .core .classloader .annotations .PrepareForTest ;
51
48
import org .powermock .modules .junit4 .PowerMockRunner ;
49
+ import org .powermock .reflect .Whitebox ;
52
50
import org .slf4j .Logger ;
53
51
54
52
import static junit .framework .Assert .assertEquals ;
53
+ import static org .junit .Assert .assertFalse ;
55
54
import static org .junit .Assert .assertNotNull ;
56
55
import static org .junit .Assert .assertNull ;
57
56
import static org .mockito .ArgumentMatchers .anyLong ;
63
62
import static org .mockito .Mockito .mock ;
64
63
import static org .mockito .Mockito .never ;
65
64
import static org .mockito .Mockito .spy ;
65
+ import static org .mockito .Mockito .times ;
66
66
import static org .mockito .Mockito .verify ;
67
67
import static org .mockito .Mockito .when ;
68
68
import static org .powermock .api .mockito .PowerMockito .mockStatic ;
69
69
import static org .powermock .api .mockito .PowerMockito .verifyNew ;
70
70
import static org .powermock .api .mockito .PowerMockito .whenNew ;
71
71
72
- import java .sql .Time ;
73
72
import java .util .Map ;
74
73
import java .util .concurrent .TimeUnit ;
75
74
76
75
@ RunWith (PowerMockRunner .class )
77
76
@ 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 })
79
78
public class OptimizelyManagerBuilderTest {
80
79
81
80
private String testProjectId = "7595190003" ;
82
81
private String testSdkKey = "1234" ;
83
82
private Logger logger ;
84
83
84
+ private VuidManager mockVuidManager ;
85
+
85
86
private String minDatafile = "{\n " +
86
87
"experiments: [ ],\n " +
87
88
"version: \" 2\" ,\n " +
@@ -101,6 +102,15 @@ public class OptimizelyManagerBuilderTest {
101
102
public void setup () throws Exception {
102
103
mockContext = mock (Context .class );
103
104
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
+ );
104
114
}
105
115
106
116
/**
@@ -400,4 +410,60 @@ public void testBuildWithODP_defaultCommonDataAndIdentifiers() throws Exception
400
410
assertEquals (identifiers .size (), 1 );
401
411
}
402
412
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
+ }
403
469
}
0 commit comments