@@ -206,7 +206,7 @@ @interface FIRIAMDisplayExecutorTests : XCTestCase
206206@property id <FIRInAppMessagingDisplay> mockMessageDisplayComponent;
207207
208208// four pre-defined messages
209- @property FIRIAMMessageDefinition *m1, *m2, *m3, *m4;
209+ @property FIRIAMMessageDefinition *m1, *m2, *m3, *m4, *m5 ;
210210@end
211211
212212@implementation FIRIAMDisplayExecutorTests
@@ -220,7 +220,7 @@ - (void)setupMessageTexture {
220220 FIRIAMDisplayTriggerDefinition *contextualTriggerDefinition =
221221 [[FIRIAMDisplayTriggerDefinition alloc ] initWithFirebaseAnalyticEvent: @" test_event" ];
222222
223- // m2 and m4 will be of app open trigger
223+ // m2, m4, and m5 will be of app open trigger
224224 FIRIAMDisplayTriggerDefinition *appOpentriggerDefinition =
225225 [[FIRIAMDisplayTriggerDefinition alloc ] initForAppForegroundTrigger ];
226226
@@ -338,6 +338,35 @@ - (void)setupMessageTexture {
338338 appData: @{@" a" : @" b" , @" up" : @" dog" }
339339 experimentPayload: experimentPayload
340340 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 ];
341370}
342371
343372NSTimeInterval DISPLAY_MIN_INTERVALS = 1 ;
@@ -599,8 +628,37 @@ - (void)testAnalyticsTrackingOnMessageClickCase {
599628
600629 [self .clientMessageCache setMessageData: @[ self .m2 ]];
601630
631+ FIRInAppMessagingAction *m2Action = [[FIRInAppMessagingAction alloc ]
632+ initWithActionText: self .m2.renderData.contentData.actionButtonText
633+ actionURL: self .m2.renderData.contentData.actionURL];
602634 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 ];
604662 self.displayExecutor .messageDisplayComponent = display;
605663
606664 [self .displayExecutor checkAndDisplayNextAppForegroundMessage ];
0 commit comments