Skip to content

Commit cedf7c2

Browse files
Sync sucess and failure better
1 parent 276b142 commit cedf7c2

3 files changed

Lines changed: 38 additions & 2 deletions

File tree

iterableapi/src/main/java/com/iterable/iterableapi/IterableEmbeddedManager.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,11 @@ public class IterableEmbeddedManager : IterableActivityMonitor.AppStateCallback
7878
{ data ->
7979
try {
8080
processEmbeddedMessagesResponse(data)
81+
notifySyncSucceeded()
8182
} catch (e: JSONException) {
8283
IterableLogger.e(TAG, e.toString())
84+
notifySyncFailed(e.message)
8385
}
84-
notifySyncSucceeded()
8586
},
8687
{ reason, data ->
8788
handleSyncFailure(reason, data)

iterableapi/src/test/java/com/iterable/iterableapi/IterableEmbeddedManagerTest.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static junit.framework.Assert.assertEquals;
55
import static org.junit.Assert.assertNull;
66
import static org.mockito.ArgumentMatchers.anyString;
7+
import static org.mockito.Mockito.clearInvocations;
78
import static org.mockito.Mockito.mock;
89
import static org.mockito.Mockito.never;
910
import static org.mockito.Mockito.spy;
@@ -270,26 +271,53 @@ public void testOnEmbeddedMessagingDisabled() throws Exception {
270271
public void testOnEmbeddedMessagingSyncSucceeded() throws Exception {
271272
dispatcher.enqueueResponse("/embedded-messaging/messages", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_single_1.json")));
272273
IterableEmbeddedManager embeddedManager = IterableApi.getInstance().getEmbeddedManager();
274+
// Flush all automatic syncs (init + foreground) before adding listener
275+
shadowOf(getMainLooper()).idle();
273276

274277
IterableEmbeddedUpdateHandler mockHandler = mock(IterableEmbeddedUpdateHandler.class);
275278
embeddedManager.addUpdateListener(mockHandler);
276279

280+
dispatcher.enqueueResponse("/embedded-messaging/messages", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_single_1.json")));
277281
embeddedManager.syncMessages();
278282
shadowOf(getMainLooper()).idle();
279283

280284
verify(mockHandler).onEmbeddedMessagingSyncSucceeded();
281285
verify(mockHandler, never()).onEmbeddedMessagingSyncFailed(anyString());
282-
assertEquals(1, embeddedManager.getMessages(0L).size());
286+
}
287+
288+
@Test
289+
public void testOnEmbeddedMessagingSyncFailedOnParseError() throws Exception {
290+
// Enqueue malformed responses so auto-syncs also fail (avoiding mixed success/failure)
291+
dispatcher.enqueueResponse("/embedded-messaging/messages", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_malformed.json")));
292+
dispatcher.enqueueResponse("/embedded-messaging/messages", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_malformed.json")));
293+
IterableEmbeddedManager embeddedManager = IterableApi.getInstance().getEmbeddedManager();
294+
295+
IterableEmbeddedUpdateHandler mockHandler = mock(IterableEmbeddedUpdateHandler.class);
296+
embeddedManager.addUpdateListener(mockHandler);
297+
shadowOf(getMainLooper()).idle();
298+
clearInvocations(mockHandler);
299+
300+
dispatcher.enqueueResponse("/embedded-messaging/messages", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_malformed.json")));
301+
embeddedManager.syncMessages();
302+
shadowOf(getMainLooper()).idle();
303+
304+
verify(mockHandler).onEmbeddedMessagingSyncFailed(anyString());
305+
verify(mockHandler, never()).onEmbeddedMessagingSyncSucceeded();
283306
}
284307

285308
@Test
286309
public void testOnEmbeddedMessagingSyncFailed() throws Exception {
310+
// Enqueue 401 responses so auto-syncs also fail (avoiding mixed success/failure)
311+
dispatcher.enqueueResponse("/embedded-messaging/messages", new MockResponse().setResponseCode(401).setBody(IterableTestUtils.getResourceString("embedded_payload_bad_api_key.json")));
287312
dispatcher.enqueueResponse("/embedded-messaging/messages", new MockResponse().setResponseCode(401).setBody(IterableTestUtils.getResourceString("embedded_payload_bad_api_key.json")));
288313
IterableEmbeddedManager embeddedManager = IterableApi.getInstance().getEmbeddedManager();
289314

290315
IterableEmbeddedUpdateHandler mockHandler = mock(IterableEmbeddedUpdateHandler.class);
291316
embeddedManager.addUpdateListener(mockHandler);
317+
shadowOf(getMainLooper()).idle();
318+
clearInvocations(mockHandler);
292319

320+
dispatcher.enqueueResponse("/embedded-messaging/messages", new MockResponse().setResponseCode(401).setBody(IterableTestUtils.getResourceString("embedded_payload_bad_api_key.json")));
293321
embeddedManager.syncMessages();
294322
shadowOf(getMainLooper()).idle();
295323

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"placements": [
3+
{
4+
"unexpectedField": "missingPlacementIdAndMessages"
5+
}
6+
]
7+
}

0 commit comments

Comments
 (0)