@@ -206,7 +206,7 @@ @interface FIRIAMDisplayExecutorTests : XCTestCase
206
206
@property id <FIRInAppMessagingDisplay> mockMessageDisplayComponent;
207
207
208
208
// four pre-defined messages
209
- @property FIRIAMMessageDefinition *m1, *m2, *m3, *m4;
209
+ @property FIRIAMMessageDefinition *m1, *m2, *m3, *m4, *m5 ;
210
210
@end
211
211
212
212
@implementation FIRIAMDisplayExecutorTests
@@ -220,7 +220,7 @@ - (void)setupMessageTexture {
220
220
FIRIAMDisplayTriggerDefinition *contextualTriggerDefinition =
221
221
[[FIRIAMDisplayTriggerDefinition alloc ] initWithFirebaseAnalyticEvent: @" test_event" ];
222
222
223
- // m2 and m4 will be of app open trigger
223
+ // m2, m4, and m5 will be of app open trigger
224
224
FIRIAMDisplayTriggerDefinition *appOpentriggerDefinition =
225
225
[[FIRIAMDisplayTriggerDefinition alloc ] initForAppForegroundTrigger ];
226
226
@@ -338,6 +338,35 @@ - (void)setupMessageTexture {
338
338
appData: @{@" a" : @" b" , @" up" : @" dog" }
339
339
experimentPayload: experimentPayload
340
340
isTestMessage: NO ];
341
+
342
+ FIRIAMMessageContentDataForTesting *m5ContentData = [[FIRIAMMessageContentDataForTesting alloc ]
343
+ initWithMessageTitle: nil
344
+ messageBody: nil
345
+ actionButtonText: nil
346
+ secondaryActionButtonText: nil
347
+ actionURL: nil
348
+ secondaryActionURL: nil
349
+ imageURL: [NSURL URLWithString: @" https://google.com/image" ]
350
+ landscapeImageURL: nil
351
+ hasImageError: NO ];
352
+
353
+ FIRIAMRenderingEffectSetting *renderSetting5 =
354
+ [FIRIAMRenderingEffectSetting getDefaultRenderingEffectSetting ];
355
+ renderSetting5.viewMode = FIRIAMRenderAsImageOnlyView;
356
+
357
+ FIRIAMMessageRenderData *renderData5 =
358
+ [[FIRIAMMessageRenderData alloc ] initWithMessageID: @" m5"
359
+ messageName: @" name"
360
+ contentData: m5ContentData
361
+ renderingEffect: renderSetting5];
362
+
363
+ self.m5 = [[FIRIAMMessageDefinition alloc ] initWithRenderData: renderData5
364
+ startTime: activeStartTime
365
+ endTime: activeEndTime
366
+ triggerDefinition: @[ appOpentriggerDefinition ]
367
+ appData: nil
368
+ experimentPayload: nil
369
+ isTestMessage: NO ];
341
370
}
342
371
343
372
NSTimeInterval DISPLAY_MIN_INTERVALS = 1 ;
@@ -599,8 +628,37 @@ - (void)testAnalyticsTrackingOnMessageClickCase {
599
628
600
629
[self .clientMessageCache setMessageData: @[ self .m2 ]];
601
630
631
+ FIRInAppMessagingAction *m2Action = [[FIRInAppMessagingAction alloc ]
632
+ initWithActionText: self .m2.renderData.contentData.actionButtonText
633
+ actionURL: self .m2.renderData.contentData.actionURL];
602
634
FIRIAMMessageDisplayForTesting *display = [[FIRIAMMessageDisplayForTesting alloc ]
603
- initWithDelegateInteraction: FIRInAppMessagingDelegateInteractionClick];
635
+ initWithDelegateInteraction: FIRInAppMessagingDelegateInteractionClick
636
+ action: m2Action];
637
+ self.displayExecutor .messageDisplayComponent = display;
638
+
639
+ [self .displayExecutor checkAndDisplayNextAppForegroundMessage ];
640
+ OCMVerifyAll ((id )self.mockAnalyticsEventLogger );
641
+ }
642
+
643
+ - (void )testAnalyticsTrackingOnMessageClickCaseWithNoActionURL {
644
+ // This setup allows next message to be displayed from display interval perspective.
645
+ OCMStub ([self .mockTimeFetcher currentTimestampInSeconds ])
646
+ .andReturn (DISPLAY_MIN_INTERVALS * 60 + 100 );
647
+
648
+ // We expect two analytics events for a click action:
649
+ // An impression event and an action URL follow event
650
+ OCMExpect ([self .mockAnalyticsEventLogger
651
+ logAnalyticsEventForType: FIRIAMAnalyticsEventMessageImpression
652
+ forCampaignID: [OCMArg isEqual: self .m5.renderData.messageID]
653
+ withCampaignName: [OCMArg any ]
654
+ eventTimeInMs: [OCMArg any ]
655
+ completion: [OCMArg any ]]);
656
+
657
+ [self .clientMessageCache setMessageData: @[ self .m5 ]];
658
+
659
+ FIRIAMMessageDisplayForTesting *display = [[FIRIAMMessageDisplayForTesting alloc ]
660
+ initWithDelegateInteraction: FIRInAppMessagingDelegateInteractionClick
661
+ action: nil ];
604
662
self.displayExecutor .messageDisplayComponent = display;
605
663
606
664
[self .displayExecutor checkAndDisplayNextAppForegroundMessage ];
0 commit comments