Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add support for testing in-app messages in SwiftUI previews #8351

Merged
merged 23 commits into from
Jul 16, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
41de67e
Expose most of the initializers for message metadata classes for use …
christibbs Jun 23, 2021
faaacd4
Fix import in FIRIAMFetchFlowTests
christibbs Jun 29, 2021
12dd3a2
Simplify UI test app to use now public initializers (doesn't build)
christibbs Jun 29, 2021
e68fb5b
Update public header to use stripped down message initializers that o…
christibbs Jul 7, 2021
af3a536
Fix nullability for body text in in-app message initializers, add hel…
christibbs Jul 7, 2021
3029356
Remove default image for image-only convenience initializer
christibbs Jul 7, 2021
4b3e7ae
Make initializers non optional, document force unwraps
christibbs Jul 7, 2021
e91903e
Finalize helper methods, update test project to use the preview helpers
christibbs Jul 7, 2021
8559835
Update UI tests to use new initializers
christibbs Jul 8, 2021
c12484f
Revert Cocoapods related project changes
christibbs Jul 8, 2021
9a27434
Add copyright notices to new files
christibbs Jul 8, 2021
dacac92
Change target version of DefaultUI test app back to 10.0
christibbs Jul 9, 2021
e60b13e
Add unit tests for
christibbs Jul 9, 2021
c46ae1b
Fix color that wasn't available on tvOS
christibbs Jul 9, 2021
ff90ecf
Udpdate CHANGELOG
christibbs Jul 9, 2021
2371ff2
Update UI test app to 13.2 to avoid [DVTiPhoneSimulator -primaryInstr…
christibbs Jul 9, 2021
8189b64
Update to target 13.2
christibbs Jul 9, 2021
12de330
Revert "Update to target 13.2"
christibbs Jul 9, 2021
c43ec47
Revert "Update UI test app to 13.2 to avoid [DVTiPhoneSimulator -prim…
christibbs Jul 9, 2021
d8e0797
Remove unnecessary ABTExperimentPayload import. Fix nullability of AB…
christibbs Jul 15, 2021
4badc9b
Revert iOS target in project.pbxproj file
christibbs Jul 15, 2021
134f3de
Revert removals of references to GoogleService-Info.plist
christibbs Jul 15, 2021
c9b6844
Let Xcode handle spacing in project file
christibbs Jul 16, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions FirebaseInAppMessaging/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 2021-7 -- v.8.3.0
- [added] Added support for unit testing with in-app message data objects (#8351).
- [added] Added support for prototyping custom in-app message views in SwiftUI (#8351).

# 2021-6 -- v.8.2.0
- [fixed] Fixed missing constraints warnings in default UI storyboard (#8205).

Expand Down
34 changes: 16 additions & 18 deletions FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayExecutor.m
Original file line number Diff line number Diff line change
Expand Up @@ -471,24 +471,22 @@ - (void)checkAndDisplayNextContextualMessageForAnalyticsEvent:(NSString *)eventN
}

FIRInAppMessagingCardDisplay *cardMessage = [[FIRInAppMessagingCardDisplay alloc]
initWithMessageID:renderData.messageID
campaignName:renderData.name
experimentPayload:definition.experimentPayload
renderAsTestMessage:definition.isTestMessage
triggerType:triggerType
titleText:title
textColor:renderData.renderingEffectSettings.textColor
portraitImageData:portraitImageData
backgroundColor:renderData.renderingEffectSettings.displayBGColor
primaryActionButton:primaryActionButton
primaryActionURL:definition.renderData.contentData.actionURL
appData:definition.appData];

cardMessage.body = body;
cardMessage.landscapeImageData = landscapeImageData;
cardMessage.secondaryActionButton = secondaryActionButton;
cardMessage.secondaryActionURL = definition.renderData.contentData.secondaryActionURL;

initWithMessageID:renderData.messageID
campaignName:renderData.name
experimentPayload:definition.experimentPayload
renderAsTestMessage:definition.isTestMessage
triggerType:triggerType
titleText:title
bodyText:body
textColor:renderData.renderingEffectSettings.textColor
portraitImageData:portraitImageData
landscapeImageData:landscapeImageData
backgroundColor:renderData.renderingEffectSettings.displayBGColor
primaryActionButton:primaryActionButton
secondaryActionButton:secondaryActionButton
primaryActionURL:definition.renderData.contentData.actionURL
secondaryActionURL:definition.renderData.contentData.secondaryActionURL
appData:definition.appData];
return cardMessage;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ NS_SWIFT_NAME(InAppMessagingActionButton)
/// Unavailable.
- (instancetype)init NS_UNAVAILABLE;

/// Exposed for unit testing only, or for use in SwiftUI previews. Don't instantiate this in your
/// app directly.
- (instancetype)initWithButtonText:(NSString *)buttonText
buttonTextColor:(UIColor *)textColor
backgroundColor:(UIColor *)backgroundColor;

@end

/** Contain display data for an image for a fiam message.
Expand All @@ -84,6 +90,10 @@ NS_SWIFT_NAME(InAppMessagingImageData)
/// Unavailable.
- (instancetype)init NS_UNAVAILABLE;

/// Exposed for unit testing only, or for use in SwiftUI previews. Don't instantiate this in your
/// app directly.
- (instancetype)initWithImageURL:(NSString *)imageURL imageData:(NSData *)imageData;

@end

/** Defines the metadata for the campaign to which a FIAM message belongs.
Expand Down Expand Up @@ -128,7 +138,8 @@ NS_SWIFT_NAME(InAppMessagingAction)
/// Unavailable.
- (instancetype)init NS_UNAVAILABLE;

/// This class should only be initialized from a custom in-app message UI component implementation.
/// This class should only be initialized from a custom in-app message UI component implementation
/// or in unit testing.
- (instancetype)initWithActionText:(nullable NSString *)actionText
actionURL:(nullable NSURL *)actionURL;

Expand Down Expand Up @@ -229,6 +240,21 @@ NS_SWIFT_NAME(InAppMessagingCardDisplay)
/// Unavailable.
- (instancetype)init NS_UNAVAILABLE;

/// Exposed for unit testing only, or for use in SwiftUI previews. Don't instantiate this in your
/// app directly.
- (instancetype)initWithCampaignName:(NSString *)campaignName
titleText:(NSString *)title
bodyText:(nullable NSString *)bodyText
textColor:(UIColor *)textColor
portraitImageData:(FIRInAppMessagingImageData *)portraitImageData
landscapeImageData:(nullable FIRInAppMessagingImageData *)landscapeImageData
backgroundColor:(UIColor *)backgroundColor
primaryActionButton:(FIRInAppMessagingActionButton *)primaryActionButton
secondaryActionButton:(nullable FIRInAppMessagingActionButton *)secondaryActionButton
primaryActionURL:(nullable NSURL *)primaryActionURL
secondaryActionURL:(nullable NSURL *)secondaryActionURL
appData:(nullable NSDictionary *)appData;

@end

/** Class for defining a modal message for display.
Expand Down Expand Up @@ -274,6 +300,18 @@ NS_SWIFT_NAME(InAppMessagingModalDisplay)
/// Unavailable.
- (instancetype)init NS_UNAVAILABLE;

/// Exposed for unit testing only, or for use in SwiftUI previews. Don't instantiate this in your
/// app directly.
- (instancetype)initWithCampaignName:(NSString *)campaignName
titleText:(NSString *)title
bodyText:(nullable NSString *)bodyText
textColor:(UIColor *)textColor
backgroundColor:(UIColor *)backgroundColor
imageData:(nullable FIRInAppMessagingImageData *)imageData
actionButton:(nullable FIRInAppMessagingActionButton *)actionButton
actionURL:(nullable NSURL *)actionURL
appData:(nullable NSDictionary *)appData;

@end

/** Class for defining a banner message for display.
Expand Down Expand Up @@ -314,6 +352,17 @@ NS_SWIFT_NAME(InAppMessagingBannerDisplay)
/// Unavailable.
- (instancetype)init NS_UNAVAILABLE;

/// Exposed for unit testing only, or for use in SwiftUI previews. Don't instantiate this in your
/// app directly.
- (instancetype)initWithCampaignName:(NSString *)campaignName
titleText:(NSString *)title
bodyText:(nullable NSString *)bodyText
textColor:(UIColor *)textColor
backgroundColor:(UIColor *)backgroundColor
imageData:(nullable FIRInAppMessagingImageData *)imageData
actionURL:(nullable NSURL *)actionURL
appData:(nullable NSDictionary *)appData;

@end

/** Class for defining a image-only message for display.
Expand All @@ -334,6 +383,13 @@ NS_SWIFT_NAME(InAppMessagingImageOnlyDisplay)
/// Unavailable.
- (instancetype)init NS_UNAVAILABLE;

/// Exposed for unit testing only, or for use in SwiftUI previews. Don't instantiate this in your
/// app directly.
- (instancetype)initWithCampaignName:(NSString *)campaignName
imageData:(FIRInAppMessagingImageData *)imageData
actionURL:(nullable NSURL *)actionURL
appData:(nullable NSDictionary *)appData;

@end

/// The way that an in-app message was dismissed.
Expand Down
Loading