@@ -303,6 +303,193 @@ class InAppHelperTests: XCTestCase {
303
303
let dict = messages [ 0 ] . trigger. dict as! [ String : Any ]
304
304
TestUtils . validateMatch ( keyPath: KeyPath ( " myPayload.var1 " ) , value: " val1 " , inDictionary: dict, message: " Expected to find val1 " )
305
305
}
306
+
307
+ // This tests payload as we are getting now
308
+ func testInAppParsingWithCurrentPayload( ) {
309
+ let customPayload1 = """
310
+ {
311
+ " contentType " : " html " ,
312
+ " inAppType " : " default " ,
313
+ " channelName " : " channel1 "
314
+ }
315
+ """
316
+ let customPayload2 = """
317
+ {
318
+ " contentType " : " html " ,
319
+ " inAppType " : " inBox " ,
320
+ " channelName " : " channel2 " ,
321
+ " promoteToContent " : {
322
+ " title " : " title " ,
323
+ " subTitle " : " subtitle " ,
324
+ " imageUrl " : " http://somewhere.com/something.jpg "
325
+ }
326
+ }
327
+ """
328
+
329
+ let payload = """
330
+ {
331
+ " inAppMessages " : [
332
+ {
333
+ " content " : {
334
+ " html " : " <a href= \\ " http://somewhere.com \\ " >Click here</a> " ,
335
+ " payload " : \( customPayload1) ,
336
+ },
337
+ " messageId " : " messageIdxxx " ,
338
+ " campaignId " : " campaignIdxxx " ,
339
+ " trigger " : {
340
+ " type " : " myNewKind " ,
341
+ " myPayload " : { " var1 " : " val1 " }
342
+ }
343
+ },
344
+ {
345
+ " content " : {
346
+ " html " : " <a href= \\ " http://somewhere.com \\ " >Click here</a> " ,
347
+ " payload " : \( customPayload2) ,
348
+ },
349
+ " messageId " : " messageIdxxx " ,
350
+ " campaignId " : " campaignIdxxx " ,
351
+ " trigger " : {
352
+ " type " : " myNewKind " ,
353
+ " myPayload " : { " var1 " : " val1 " }
354
+ }
355
+ },
356
+ {
357
+ " content " : {
358
+ " html " : " <a href= \\ " http://somewhere.com \\ " >Click here</a> " ,
359
+ " payload " : {
360
+ },
361
+ },
362
+ " messageId " : " messageIdxxx " ,
363
+ " campaignId " : " campaignIdxxx " ,
364
+ " trigger " : {
365
+ " type " : " myNewKind " ,
366
+ " myPayload " : { " var1 " : " val1 " }
367
+ }
368
+ },
369
+ {
370
+ " content " : {
371
+ " html " : " <a href= \\ " http://somewhere.com \\ " >Click here</a> "
372
+ },
373
+ " messageId " : " messageIdxxx " ,
374
+ " campaignId " : " campaignIdxxx " ,
375
+ " trigger " : {
376
+ " type " : " myNewKind " ,
377
+ " myPayload " : { " var1 " : " val1 " }
378
+ }
379
+ }
380
+ ]
381
+ }
382
+ """ . toJsonDict ( )
383
+ let messages = InAppHelper . inAppMessages ( fromPayload: payload, internalApi: IterableAPI . internalImplementation!)
384
+
385
+ XCTAssertEqual ( messages. count, 4 )
386
+ let message1 = messages [ 0 ]
387
+ XCTAssertEqual ( message1. channelName, " channel1 " )
388
+ XCTAssertTrue ( TestUtils . areEqual ( dict1: message1. extraInfo!, dict2: customPayload1. toJsonDict ( ) ) )
389
+
390
+ let message2 = messages [ 1 ]
391
+ XCTAssertEqual ( message2. channelName, " channel2 " )
392
+ XCTAssertTrue ( TestUtils . areEqual ( dict1: message2. extraInfo!, dict2: customPayload2. toJsonDict ( ) ) )
393
+
394
+ let message3 = messages [ 2 ]
395
+ XCTAssertEqual ( message3. channelName, " " )
396
+
397
+ let message4 = messages [ 3 ]
398
+ XCTAssertEqual ( message4. channelName, " " )
399
+ }
400
+
401
+ // This tests payload as we expect to get when backend is fixed
402
+ func testInAppParsingWithFuturePayload( ) {
403
+ let customPayload1 = """
404
+ {
405
+ " contentType " : " html " ,
406
+ " inAppType " : " default " ,
407
+ " channelName " : " channel1 "
408
+ }
409
+ """
410
+ let customPayload2 = """
411
+ {
412
+ " contentType " : " html " ,
413
+ " inAppType " : " inBox " ,
414
+ " channelName " : " channel2 " ,
415
+ " promoteToContent " : {
416
+ " title " : " title " ,
417
+ " subTitle " : " subtitle " ,
418
+ " imageUrl " : " http://somewhere.com/something.jpg "
419
+ }
420
+ }
421
+ """
422
+
423
+ let payload = """
424
+ {
425
+ " inAppMessages " : [
426
+ {
427
+ " content " : {
428
+ " html " : " <a href= \\ " http://somewhere.com \\ " >Click here</a> "
429
+ },
430
+ " messageId " : " messageIdxxx " ,
431
+ " campaignId " : " campaignIdxxx " ,
432
+ " trigger " : {
433
+ " type " : " myNewKind " ,
434
+ " myPayload " : { " var1 " : " val1 " }
435
+ },
436
+ " customPayload " : \( customPayload1)
437
+ },
438
+ {
439
+ " content " : {
440
+ " html " : " <a href= \\ " http://somewhere.com \\ " >Click here</a> "
441
+ },
442
+ " messageId " : " messageIdxxx " ,
443
+ " campaignId " : " campaignIdxxx " ,
444
+ " trigger " : {
445
+ " type " : " myNewKind " ,
446
+ " myPayload " : { " var1 " : " val1 " }
447
+ },
448
+ " customPayload " : \( customPayload2)
449
+ },
450
+ {
451
+ " content " : {
452
+ " html " : " <a href= \\ " http://somewhere.com \\ " >Click here</a> "
453
+ },
454
+ " messageId " : " messageIdxxx " ,
455
+ " campaignId " : " campaignIdxxx " ,
456
+ " trigger " : {
457
+ " type " : " myNewKind " ,
458
+ " myPayload " : { " var1 " : " val1 " }
459
+ },
460
+ " customPayload " : {}
461
+ },
462
+ {
463
+ " content " : {
464
+ " html " : " <a href= \\ " http://somewhere.com \\ " >Click here</a> "
465
+ },
466
+ " messageId " : " messageIdxxx " ,
467
+ " campaignId " : " campaignIdxxx " ,
468
+ " trigger " : {
469
+ " type " : " myNewKind " ,
470
+ " myPayload " : { " var1 " : " val1 " }
471
+ }
472
+ }
473
+ ]
474
+ }
475
+ """ . toJsonDict ( )
476
+ let messages = InAppHelper . inAppMessages ( fromPayload: payload, internalApi: IterableAPI . internalImplementation!)
477
+
478
+ XCTAssertEqual ( messages. count, 4 )
479
+ let message1 = messages [ 0 ]
480
+ XCTAssertEqual ( message1. channelName, " channel1 " )
481
+ XCTAssertTrue ( TestUtils . areEqual ( dict1: message1. extraInfo!, dict2: customPayload1. toJsonDict ( ) ) )
482
+
483
+ let message2 = messages [ 1 ]
484
+ XCTAssertEqual ( message2. channelName, " channel2 " )
485
+ XCTAssertTrue ( TestUtils . areEqual ( dict1: message2. extraInfo!, dict2: customPayload2. toJsonDict ( ) ) )
486
+
487
+ let message3 = messages [ 2 ]
488
+ XCTAssertEqual ( message3. channelName, " " )
489
+
490
+ let message4 = messages [ 3 ]
491
+ XCTAssertEqual ( message4. channelName, " " )
492
+ }
306
493
307
494
private func createInAppPayload( withExtraInfo extraInfo: [ AnyHashable : Any ] ) -> [ AnyHashable : Any ] {
308
495
return [
0 commit comments