|
31 | 31 | import org.json.JSONException;
|
32 | 32 | import org.json.JSONObject;
|
33 | 33 | import org.junit.Test;
|
| 34 | +import org.robolectric.RuntimeEnvironment; |
34 | 35 |
|
| 36 | +import java.io.File; |
35 | 37 | import java.util.Arrays;
|
36 | 38 | import java.util.HashMap;
|
37 | 39 | import java.util.Map;
|
|
43 | 45 | import static org.junit.Assert.assertNotEquals;
|
44 | 46 | import static org.junit.Assert.assertNotNull;
|
45 | 47 | import static org.junit.Assert.assertNull;
|
| 48 | +import static org.junit.Assert.assertTrue; |
46 | 49 | import static org.junit.Assert.fail;
|
47 | 50 |
|
48 | 51 |
|
@@ -314,6 +317,60 @@ public void doRequestCompleted(JSONObject content, AlgoliaException error) {
|
314 | 317 | });
|
315 | 318 | }
|
316 | 319 |
|
| 320 | + @Test |
| 321 | + public void testBuildOffline() { |
| 322 | + final CountDownLatch signal = new CountDownLatch(4); |
| 323 | + |
| 324 | + // Retrieve data files from resources. |
| 325 | + File resourcesDir = new File(RuntimeEnvironment.application.getPackageResourcePath() + "/src/testOffline/res"); |
| 326 | + File rawDir = new File(resourcesDir, "raw"); |
| 327 | + File settingsFile = new File(rawDir, "settings.json"); |
| 328 | + File objectFile = new File(rawDir, "objects.json"); |
| 329 | + |
| 330 | + // Create the index. |
| 331 | + final MirroredIndex index = client.getIndex(Helpers.safeIndexName(Helpers.getMethodName())); |
| 332 | + index.setMirrored(true); |
| 333 | + |
| 334 | + // Check that no offline data exists. |
| 335 | + assertFalse(index.hasOfflineData()); |
| 336 | + |
| 337 | + // Build the index. |
| 338 | + index.addBuildListener(new BuildListener() { |
| 339 | + @Override |
| 340 | + public void buildDidStart(@NonNull MirroredIndex index) { |
| 341 | + signal.countDown(); |
| 342 | + } |
| 343 | + |
| 344 | + @Override |
| 345 | + public void buildDidFinish(@NonNull MirroredIndex index, @Nullable Throwable error) { |
| 346 | + assertNull(error); |
| 347 | + signal.countDown(); |
| 348 | + } |
| 349 | + }); |
| 350 | + index.buildOfflineFromFiles(settingsFile, new File[]{ objectFile }, new AssertCompletionHandler() { |
| 351 | + @Override |
| 352 | + public void doRequestCompleted(JSONObject content, AlgoliaException error) { |
| 353 | + assertNull(error); |
| 354 | + |
| 355 | + // Check that offline data exists now. |
| 356 | + assertTrue(index.hasOfflineData()); |
| 357 | + |
| 358 | + // Search. |
| 359 | + Query query = new Query().setQuery("peanuts").setFilters("kind:animal"); |
| 360 | + index.searchOfflineAsync(query, new AssertCompletionHandler() { |
| 361 | + @Override |
| 362 | + public void doRequestCompleted(JSONObject content, AlgoliaException error) { |
| 363 | + assertNull(error); |
| 364 | + assertEquals(2, content.optInt("nbHits")); |
| 365 | + signal.countDown(); |
| 366 | + } |
| 367 | + }); |
| 368 | + signal.countDown(); |
| 369 | + } |
| 370 | + }); |
| 371 | + } |
| 372 | + |
| 373 | + |
317 | 374 | @Test
|
318 | 375 | public void testGetObject() {
|
319 | 376 | final CountDownLatch signal = new CountDownLatch(4);
|
|
0 commit comments