26
26
27
27
import static com .google .common .util .concurrent .Futures .immediateFailedFuture ;
28
28
import static junit .framework .Assert .assertEquals ;
29
- import static junit .framework .Assert .assertNotNull ;
30
29
import static junit .framework .Assert .assertFalse ;
30
+ import static junit .framework .Assert .assertNotNull ;
31
31
import static junit .framework .Assert .assertTrue ;
32
32
import static org .easymock .EasyMock .expect ;
33
33
import static org .easymock .EasyMock .reset ;
@@ -42,6 +42,7 @@ public class UserManagerTest extends EasyMockSupport {
42
42
@ Rule
43
43
public EasyMockRule easyMockRule = new EasyMockRule (this );
44
44
45
+ @ SuppressWarnings ("unused" )
45
46
@ Mock
46
47
private FeatureFlagFetcher fetcher ;
47
48
@@ -60,18 +61,17 @@ public void TestFailedFetchThrowsException() throws InterruptedException {
60
61
@ Test
61
62
public void TestBasicRetrieval () throws ExecutionException , InterruptedException {
62
63
String expectedStringFlagValue = "string1" ;
63
- boolean expectedBoolFlagValue = true ;
64
64
65
65
JsonObject jsonObject = new JsonObject ();
66
- jsonObject .addProperty ("boolFlag1" , expectedBoolFlagValue );
66
+ jsonObject .addProperty ("boolFlag1" , true );
67
67
jsonObject .addProperty ("stringFlag1" , expectedStringFlagValue );
68
68
69
69
Future <Void > future = setUser ("userKey" , jsonObject );
70
70
future .get ();
71
71
72
72
SharedPreferences sharedPrefs = userManager .getCurrentUserSharedPrefs ();
73
73
assertEquals (2 , sharedPrefs .getAll ().size ());
74
- assertEquals (expectedBoolFlagValue , sharedPrefs .getBoolean ("boolFlag1" , false ));
74
+ assertEquals (true , sharedPrefs .getBoolean ("boolFlag1" , false ));
75
75
assertEquals (expectedStringFlagValue , sharedPrefs .getString ("stringFlag1" , "" ));
76
76
}
77
77
@@ -151,6 +151,216 @@ public void onFeatureFlagChange(String flagKey) {
151
151
assertTrue (listeners .isEmpty ());
152
152
}
153
153
154
+ @ Test
155
+ public void TestDeleteFlag () throws ExecutionException , InterruptedException {
156
+ userManager .clearVersionSharedPreferences ();
157
+
158
+ String expectedStringFlagValue = "string1" ;
159
+
160
+ JsonObject jsonObject = new JsonObject ();
161
+ jsonObject .addProperty ("boolFlag1" , true );
162
+ jsonObject .addProperty ("stringFlag1" , expectedStringFlagValue );
163
+
164
+ Future <Void > future = setUser ("userKey" , jsonObject );
165
+ future .get ();
166
+
167
+ SharedPreferences sharedPrefs = userManager .getCurrentUserSharedPrefs ();
168
+ assertEquals (2 , sharedPrefs .getAll ().size ());
169
+ assertEquals (true , sharedPrefs .getBoolean ("boolFlag1" , false ));
170
+ assertEquals (expectedStringFlagValue , sharedPrefs .getString ("stringFlag1" , "" ));
171
+
172
+ userManager .deleteCurrentUserFlag ("{\" key\" :\" stringFlag1\" ,\" version\" :16}" ).get ();
173
+ assertEquals ("" , sharedPrefs .getString ("stringFlag1" , "" ));
174
+ assertEquals (true , sharedPrefs .getBoolean ("boolFlag1" , false ));
175
+
176
+ userManager .deleteCurrentUserFlag ("{\" key\" :\" nonExistentFlag\" ,\" version\" :16,\" value\" :false}" ).get ();
177
+ }
178
+
179
+ @ Test
180
+ public void TestDeleteForInvalidResponse () throws ExecutionException , InterruptedException {
181
+ String expectedStringFlagValue = "string1" ;
182
+
183
+ JsonObject jsonObject = new JsonObject ();
184
+ jsonObject .addProperty ("boolFlag1" , true );
185
+ jsonObject .addProperty ("stringFlag1" , expectedStringFlagValue );
186
+
187
+ Future <Void > future = setUser ("userKey" , jsonObject );
188
+ future .get ();
189
+
190
+ userManager .deleteCurrentUserFlag ("{}" ).get ();
191
+
192
+ //noinspection ConstantConditions
193
+ userManager .deleteCurrentUserFlag (null ).get ();
194
+
195
+ userManager .deleteCurrentUserFlag ("abcd" ).get ();
196
+ }
197
+
198
+ @ Test
199
+ public void TestDeleteWithVersion () throws ExecutionException , InterruptedException {
200
+ userManager .clearVersionSharedPreferences ();
201
+
202
+ Future <Void > future = setUser ("userKey" , new JsonObject ());
203
+ future .get ();
204
+
205
+ String json = "{\n " +
206
+ " \" stringFlag1\" : {\n " +
207
+ " \" key\" : \" \" ,\n " +
208
+ " \" version\" : 125,\n " +
209
+ " \" value\" : \" string1\" \n " +
210
+ " }\n " +
211
+ " }" ;
212
+
213
+ userManager .putCurrentUserFlags (json ).get ();
214
+
215
+ userManager .deleteCurrentUserFlag ("{\" key\" :\" stringFlag1\" ,\" version\" :16}" ).get ();
216
+ SharedPreferences sharedPrefs = userManager .getCurrentUserSharedPrefs ();
217
+ assertEquals ("string1" , sharedPrefs .getString ("stringFlag1" , "" ));
218
+
219
+ userManager .deleteCurrentUserFlag ("{\" key\" :\" stringFlag1\" ,\" version\" :127}" ).get ();
220
+ assertEquals ("" , sharedPrefs .getString ("stringFlag1" , "" ));
221
+
222
+ userManager .deleteCurrentUserFlag ("{\" key\" :\" nonExistent\" ,\" version\" :1}" ).get ();
223
+ }
224
+
225
+ @ Test
226
+ public void TestPatchForAddAndReplaceFlags () throws ExecutionException , InterruptedException {
227
+ userManager .clearVersionSharedPreferences ();
228
+
229
+ JsonObject jsonObject = new JsonObject ();
230
+ jsonObject .addProperty ("boolFlag1" , true );
231
+ jsonObject .addProperty ("stringFlag1" , "string1" );
232
+ jsonObject .addProperty ("floatFlag1" , 3.0f );
233
+
234
+ Future <Void > future = setUser ("userKey" , jsonObject );
235
+ future .get ();
236
+
237
+ userManager .patchCurrentUserFlags ("{\" key\" :\" new-flag\" ,\" version\" :16,\" value\" :false}" ).get ();
238
+
239
+ SharedPreferences sharedPrefs = userManager .getCurrentUserSharedPrefs ();
240
+ assertEquals (false , sharedPrefs .getBoolean ("new-flag" , true ));
241
+
242
+
243
+ userManager .patchCurrentUserFlags ("{\" key\" :\" stringFlag1\" ,\" version\" :16,\" value\" :\" string2\" }" ).get ();
244
+ assertEquals ("string2" , sharedPrefs .getString ("stringFlag1" , "" ));
245
+
246
+ userManager .patchCurrentUserFlags ("{\" key\" :\" boolFlag1\" ,\" version\" :16,\" value\" :false}" ).get ();
247
+ assertEquals (false , sharedPrefs .getBoolean ("boolFlag1" , false ));
248
+
249
+ assertEquals (3.0f , sharedPrefs .getFloat ("floatFlag1" , Float .MIN_VALUE ));
250
+
251
+ userManager .patchCurrentUserFlags ("{\" key\" :\" floatFlag2\" ,\" version\" :16,\" value\" :8.0}" ).get ();
252
+ assertEquals (8.0f , sharedPrefs .getFloat ("floatFlag2" , Float .MIN_VALUE ));
253
+ }
254
+
255
+ @ Test
256
+ public void TestPatchWithVersion () throws ExecutionException , InterruptedException {
257
+ userManager .clearVersionSharedPreferences ();
258
+
259
+ Future <Void > future = setUser ("userKey" , new JsonObject ());
260
+ future .get ();
261
+
262
+ String json = "{\n " +
263
+ " \" stringFlag1\" : {\n " +
264
+ " \" key\" : \" \" ,\n " +
265
+ " \" version\" : 125,\n " +
266
+ " \" value\" : \" string1\" \n " +
267
+ " }\n " +
268
+ " }" ;
269
+
270
+ userManager .putCurrentUserFlags (json ).get ();
271
+
272
+
273
+ userManager .patchCurrentUserFlags ("{\" key\" :\" stringFlag1\" ,\" version\" :16,\" value\" :\" string2\" }" ).get ();
274
+ SharedPreferences sharedPrefs = userManager .getCurrentUserSharedPrefs ();
275
+ assertEquals ("string1" , sharedPrefs .getString ("stringFlag1" , "" ));
276
+
277
+ userManager .patchCurrentUserFlags ("{\" key\" :\" stringFlag1\" ,\" version\" :126,\" value\" :\" string2\" }" ).get ();
278
+ assertEquals ("string2" , sharedPrefs .getString ("stringFlag1" , "" ));
279
+
280
+ userManager .patchCurrentUserFlags ("{\" key\" :\" stringFlag20\" ,\" version\" :1,\" value\" :\" stringValue\" }" ).get ();
281
+ assertEquals ("stringValue" , sharedPrefs .getString ("stringFlag20" , "" ));
282
+ }
283
+
284
+ @ Test
285
+ public void TestPatchForInvalidResponse () throws ExecutionException , InterruptedException {
286
+ String expectedStringFlagValue = "string1" ;
287
+
288
+ JsonObject jsonObject = new JsonObject ();
289
+ jsonObject .addProperty ("boolFlag1" , true );
290
+ jsonObject .addProperty ("stringFlag1" , expectedStringFlagValue );
291
+
292
+ Future <Void > future = setUser ("userKey" , jsonObject );
293
+ future .get ();
294
+
295
+ userManager .patchCurrentUserFlags ("{}" ).get ();
296
+
297
+ //noinspection ConstantConditions
298
+ userManager .patchCurrentUserFlags (null ).get ();
299
+
300
+ userManager .patchCurrentUserFlags ("abcd" ).get ();
301
+ }
302
+
303
+ @ Test
304
+ public void TestPutForReplaceFlags () throws ExecutionException , InterruptedException {
305
+
306
+ JsonObject jsonObject = new JsonObject ();
307
+ jsonObject .addProperty ("stringFlag1" , "string1" );
308
+ jsonObject .addProperty ("boolFlag1" , true );
309
+ jsonObject .addProperty ("floatFlag1" , 3.0f );
310
+
311
+ Future <Void > future = setUser ("userKey" , jsonObject );
312
+ future .get ();
313
+
314
+ String json = "{\n " +
315
+ " \" stringFlag1\" : {\n " +
316
+ " \" key\" : \" \" ,\n " +
317
+ " \" version\" : 125,\n " +
318
+ " \" value\" : \" string2\" \n " +
319
+ " },\n " +
320
+ " \" boolFlag1\" : {\n " +
321
+ " \" key\" : \" \" ,\n " +
322
+ " \" version\" : 2,\n " +
323
+ " \" value\" : false\n " +
324
+ " },\n " +
325
+ " \" floatFlag2\" : {\n " +
326
+ " \" key\" : \" \" ,\n " +
327
+ " \" version\" : 3,\n " +
328
+ " \" value\" : 8.0\n " +
329
+ " }\n " +
330
+ " }" ;
331
+
332
+ userManager .putCurrentUserFlags (json ).get ();
333
+
334
+ SharedPreferences sharedPrefs = userManager .getCurrentUserSharedPrefs ();
335
+
336
+ assertEquals ("string2" , sharedPrefs .getString ("stringFlag1" , "" ));
337
+ assertEquals (false , sharedPrefs .getBoolean ("boolFlag1" , false ));
338
+
339
+ // Should have value Float.MIN_VALUE instead of 3.0f which was deleted by PUT.
340
+ assertEquals (Float .MIN_VALUE , sharedPrefs .getFloat ("floatFlag1" , Float .MIN_VALUE ));
341
+
342
+ assertEquals (8.0f , sharedPrefs .getFloat ("floatFlag2" , 1.0f ));
343
+ }
344
+
345
+ @ Test
346
+ public void TestPutForInvalidResponse () throws ExecutionException , InterruptedException {
347
+ String expectedStringFlagValue = "string1" ;
348
+
349
+ JsonObject jsonObject = new JsonObject ();
350
+ jsonObject .addProperty ("boolFlag1" , true );
351
+ jsonObject .addProperty ("stringFlag1" , expectedStringFlagValue );
352
+
353
+ Future <Void > future = setUser ("userKey" , jsonObject );
354
+ future .get ();
355
+
356
+ userManager .putCurrentUserFlags ("{}" ).get ();
357
+
358
+ //noinspection ConstantConditions
359
+ userManager .putCurrentUserFlags (null ).get ();
360
+
361
+ userManager .putCurrentUserFlags ("abcd" ).get ();
362
+ }
363
+
154
364
private Future <Void > setUser (String userKey , JsonObject flags ) {
155
365
LDUser user = new LDUser .Builder (userKey ).build ();
156
366
ListenableFuture <JsonObject > jsonObjectFuture = Futures .immediateFuture (flags );
@@ -184,4 +394,5 @@ private void assertFlagValue(String flagKey, Object expectedValue) {
184
394
SharedPreferences sharedPrefs = userManager .getCurrentUserSharedPrefs ();
185
395
assertEquals (expectedValue , sharedPrefs .getAll ().get (flagKey ));
186
396
}
187
- }
397
+
398
+ }
0 commit comments