6
6
import static org .junit .Assert .assertNotNull ;
7
7
import static org .junit .Assert .assertNull ;
8
8
import static org .junit .Assert .assertTrue ;
9
+ import static org .mockito .ArgumentMatchers .any ;
9
10
import static org .mockito .Mockito .mock ;
10
11
import static org .mockito .Mockito .verify ;
11
12
import static org .mockito .Mockito .when ;
12
13
13
14
import org .junit .Before ;
14
15
import org .junit .Test ;
16
+ import org .mockito .invocation .InvocationOnMock ;
17
+ import org .mockito .stubbing .Answer ;
15
18
16
19
import java .util .ArrayList ;
17
20
import java .util .Collections ;
22
25
import io .split .android .client .dtos .Excluded ;
23
26
import io .split .android .client .dtos .RuleBasedSegment ;
24
27
import io .split .android .client .dtos .Status ;
28
+ import io .split .android .engine .experiments .ParsedRuleBasedSegment ;
25
29
26
30
public class RuleBasedSegmentStorageImplTest {
27
31
28
32
private RuleBasedSegmentStorageImpl storage ;
29
33
private PersistentRuleBasedSegmentStorage mPersistentStorage ;
34
+ private RuleBasedSegmentStorageImpl .RuleBasedSegmentParser mParser ;
30
35
31
36
@ Before
32
37
public void setUp () {
33
38
mPersistentStorage = mock (PersistentRuleBasedSegmentStorage .class );
34
- storage = new RuleBasedSegmentStorageImpl (mPersistentStorage );
39
+ mParser = mock (RuleBasedSegmentStorageImpl .RuleBasedSegmentParser .class );
40
+ when (mParser .parse (any (), any ())).thenAnswer (new Answer <ParsedRuleBasedSegment >() {
41
+ @ Override
42
+ public ParsedRuleBasedSegment answer (InvocationOnMock invocation ) throws Throwable {
43
+ ParsedRuleBasedSegment mockResult = mock (ParsedRuleBasedSegment .class );
44
+ when (mockResult .getName ()).thenReturn (((RuleBasedSegment ) invocation .getArguments ()[0 ]).getName ());
45
+
46
+ return mockResult ;
47
+ }
48
+ });
49
+ storage = new RuleBasedSegmentStorageImpl (mPersistentStorage , mParser );
35
50
}
36
51
37
52
@ Test
38
53
public void get () {
39
54
RuleBasedSegment segment = createRuleBasedSegment ("segment1" );
40
55
storage .update (Set .of (segment ), null , 1 );
41
- assertNotNull (storage .get ("segment1" ));
56
+ assertNotNull (storage .get ("segment1" , "matchingKey" ));
42
57
}
43
58
44
59
@ Test
@@ -51,15 +66,15 @@ public void sequentialUpdate() {
51
66
toAdd .add (segment2 );
52
67
53
68
storage .update (toAdd , null , 2 );
54
- assertNotNull (storage .get ("segment1" ));
55
- assertNotNull (storage .get ("segment2" ));
69
+ assertNotNull (storage .get ("segment1" , "matchingKey" ));
70
+ assertNotNull (storage .get ("segment2" , "matchingKey" ));
56
71
assertEquals (2 , storage .getChangeNumber ());
57
72
58
73
Set <RuleBasedSegment > toRemove = new HashSet <>();
59
74
toRemove .add (segment1 );
60
75
storage .update (null , toRemove , 3 );
61
- assertNull (storage .get ("segment1" ));
62
- assertNotNull (storage .get ("segment2" ));
76
+ assertNull (storage .get ("segment1" , "matchingKey" ));
77
+ assertNotNull (storage .get ("segment2" , "matchingKey" ));
63
78
assertEquals (3 , storage .getChangeNumber ());
64
79
}
65
80
@@ -93,7 +108,7 @@ public void clearRemovesAllSegments() {
93
108
RuleBasedSegment segment = createRuleBasedSegment ("segment1" );
94
109
storage .update (Set .of (segment ), null , 1 );
95
110
storage .clear ();
96
- assertNull (storage .get ("segment1" ));
111
+ assertNull (storage .get ("segment1" , "matchingKey" ));
97
112
}
98
113
99
114
@ Test
@@ -126,15 +141,15 @@ public void segmentRemoval() {
126
141
toAdd .add (segment2 );
127
142
storage .update (toAdd , null , 1 );
128
143
129
- assertNotNull (storage .get ("segment1" ));
130
- assertNotNull (storage .get ("segment2" ));
144
+ assertNotNull (storage .get ("segment1" , "matchingKey" ));
145
+ assertNotNull (storage .get ("segment2" , "matchingKey" ));
131
146
132
147
Set <RuleBasedSegment > toRemove = new HashSet <>();
133
148
toRemove .add (createRuleBasedSegment ("segment1" ));
134
149
storage .update (null , toRemove , 2 );
135
150
136
- assertNull (storage .get ("segment1" ));
137
- assertNotNull (storage .get ("segment2" ));
151
+ assertNull (storage .get ("segment1" , "matchingKey" ));
152
+ assertNotNull (storage .get ("segment2" , "matchingKey" ));
138
153
}
139
154
140
155
@ Test
@@ -143,7 +158,7 @@ public void segmentRemovalOfSameSegment() {
143
158
Set <RuleBasedSegment > segments = Collections .singleton (segment1 );
144
159
145
160
storage .update (segments , segments , 1 );
146
- assertNull (storage .get ("segment1" ));
161
+ assertNull (storage .get ("segment1" , "matchingKey" ));
147
162
assertEquals (1 , storage .getChangeNumber ());
148
163
}
149
164
@@ -173,12 +188,12 @@ public void loadLocalPopulatesValues() {
173
188
when (mPersistentStorage .getSnapshot ()).thenReturn (snapshot );
174
189
175
190
long initialCn = storage .getChangeNumber ();
176
- RuleBasedSegment initialSegment1 = storage .get ("segment1" );
191
+ ParsedRuleBasedSegment initialSegment1 = storage .get ("segment1" , "matchingKey " );
177
192
178
193
storage .loadLocal ();
179
194
180
195
long finalCn = storage .getChangeNumber ();
181
- RuleBasedSegment finalSegment1 = storage .get ("segment1" );
196
+ ParsedRuleBasedSegment finalSegment1 = storage .get ("segment1" , "matchingKey " );
182
197
183
198
assertEquals (-1 , initialCn );
184
199
assertEquals (1 , finalCn );
0 commit comments