Files
firebase-ios-sdk/FirebaseInAppMessaging/Tests/Unit/FIRInAppMessagingRenderingTests.m
christibbs 6e3f659207 Add support for testing in-app messages in SwiftUI previews (#8351)
* Expose most of the initializers for message metadata classes for use in unit testing or SwiftUI previews

* Fix import in FIRIAMFetchFlowTests

* Simplify UI test app to use now public initializers (doesn't build)

* Update public header to use stripped down message initializers that only include parameters that effect layout

* Fix nullability for body text in in-app message initializers, add helper methods for generating mock messages

* Remove default image for image-only convenience initializer

* Make initializers non optional, document force unwraps

* Finalize helper methods, update test project to use the preview helpers

* Update UI tests to use new initializers

* Revert Cocoapods related project changes

* Add copyright notices to new files

* Change target version of DefaultUI test app back to 10.0

* Add unit tests for

* Fix color that wasn't available on tvOS

* Udpdate CHANGELOG

* Update UI test app to 13.2 to avoid [DVTiPhoneSimulator -primaryInstrumentsServer was called from the main thread

* Update to target 13.2

* Revert "Update to target 13.2"

This reverts commit 8189b64b68.

* Revert "Update UI test app to 13.2 to avoid [DVTiPhoneSimulator -primaryInstrumentsServer was called from the main thread"

This reverts commit 2371ff2a84.

* Remove unnecessary ABTExperimentPayload import. Fix nullability of ABTExperimentPayload param in initializers

* Revert iOS target in project.pbxproj file

* Revert removals of references to GoogleService-Info.plist

* Let Xcode handle spacing in project file
2021-07-16 16:04:14 -04:00

148 lines
7.2 KiB
Objective-C

/*
* Copyright 2021 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <XCTest/XCTest.h>
#import "FirebaseInAppMessaging/Sources/Public/FirebaseInAppMessaging/FIRInAppMessagingRendering.h"
@interface FIRInAppMessagingRenderingTests : XCTestCase
@end
@implementation FIRInAppMessagingRenderingTests
+ (FIRInAppMessagingImageData *)testImageData {
NSData *blankImageData = UIImagePNGRepresentation([[UIImage alloc] init]);
return [[FIRInAppMessagingImageData alloc] initWithImageURL:@"http://google.com"
imageData:blankImageData];
}
+ (FIRInAppMessagingActionButton *)testActionButton {
return [[FIRInAppMessagingActionButton alloc] initWithButtonText:@"Tap me"
buttonTextColor:[UIColor brownColor]
backgroundColor:[UIColor yellowColor]];
}
- (void)testCardMessageInit {
FIRInAppMessagingCardDisplay *cardMessage = [[FIRInAppMessagingCardDisplay alloc]
initWithCampaignName:@"campaignName"
titleText:@"titleText"
bodyText:@"bodyText"
textColor:[UIColor systemPinkColor]
portraitImageData:[[self class] testImageData]
landscapeImageData:nil
backgroundColor:[UIColor redColor]
primaryActionButton:[[self class] testActionButton]
secondaryActionButton:nil
primaryActionURL:[NSURL URLWithString:@"http://test.com"]
secondaryActionURL:nil
appData:@{@"emoji" : @"📺"}];
// Message initializers for test messages should have these stock parameters.
XCTAssertEqualObjects(cardMessage.campaignInfo.messageID, @"test_message_id");
XCTAssertTrue(cardMessage.campaignInfo.renderAsTestMessage);
XCTAssertEqual(cardMessage.triggerType, FIRInAppMessagingDisplayTriggerTypeOnAnalyticsEvent);
XCTAssertEqualObjects(cardMessage.campaignInfo.campaignName, @"campaignName");
XCTAssertEqualObjects(cardMessage.title, @"titleText");
XCTAssertEqualObjects(cardMessage.body, @"bodyText");
XCTAssertEqualObjects(cardMessage.textColor, [UIColor systemPinkColor]);
XCTAssertNotNil(cardMessage.portraitImageData);
XCTAssertNil(cardMessage.landscapeImageData);
XCTAssertEqualObjects(cardMessage.displayBackgroundColor, [UIColor redColor]);
XCTAssertEqualObjects(cardMessage.primaryActionButton.buttonText, @"Tap me");
XCTAssertEqualObjects(cardMessage.primaryActionButton.buttonTextColor, [UIColor brownColor]);
XCTAssertEqualObjects(cardMessage.primaryActionButton.buttonBackgroundColor,
[UIColor yellowColor]);
XCTAssertNil(cardMessage.secondaryActionButton);
XCTAssertEqualObjects(cardMessage.primaryActionURL, [NSURL URLWithString:@"http://test.com"]);
XCTAssertNil(cardMessage.secondaryActionURL);
XCTAssertEqualObjects(cardMessage.appData[@"emoji"], @"📺");
}
- (void)testModalMessageInit {
FIRInAppMessagingModalDisplay *modalMessage = [[FIRInAppMessagingModalDisplay alloc]
initWithCampaignName:@"campaignName"
titleText:@"titleText"
bodyText:@"bodyText"
textColor:[UIColor systemTealColor]
backgroundColor:[UIColor grayColor]
imageData:[[self class] testImageData]
actionButton:[[self class] testActionButton]
actionURL:[NSURL URLWithString:@"http://modal-test.com"]
appData:@{@"emoji" : @"🇵🇷"}];
XCTAssertEqualObjects(modalMessage.campaignInfo.messageID, @"test_message_id");
XCTAssertTrue(modalMessage.campaignInfo.renderAsTestMessage);
XCTAssertEqual(modalMessage.triggerType, FIRInAppMessagingDisplayTriggerTypeOnAnalyticsEvent);
XCTAssertEqualObjects(modalMessage.campaignInfo.campaignName, @"campaignName");
XCTAssertEqualObjects(modalMessage.title, @"titleText");
XCTAssertEqualObjects(modalMessage.bodyText, @"bodyText");
XCTAssertEqualObjects(modalMessage.textColor, [UIColor systemTealColor]);
XCTAssertNotNil(modalMessage.imageData);
XCTAssertEqualObjects(modalMessage.displayBackgroundColor, [UIColor grayColor]);
XCTAssertEqualObjects(modalMessage.actionButton.buttonText, @"Tap me");
XCTAssertEqualObjects(modalMessage.actionButton.buttonTextColor, [UIColor brownColor]);
XCTAssertEqualObjects(modalMessage.actionButton.buttonBackgroundColor, [UIColor yellowColor]);
XCTAssertEqualObjects(modalMessage.actionURL, [NSURL URLWithString:@"http://modal-test.com"]);
XCTAssertEqualObjects(modalMessage.appData[@"emoji"], @"🇵🇷");
}
- (void)testBannerMessageInit {
FIRInAppMessagingBannerDisplay *bannerMessage = [[FIRInAppMessagingBannerDisplay alloc]
initWithCampaignName:@"campaignName"
titleText:@"titleText"
bodyText:@"bodyText"
textColor:[UIColor clearColor]
backgroundColor:[UIColor blueColor]
imageData:[[self class] testImageData]
actionURL:[NSURL URLWithString:@"http://banner-test.com"]
appData:@{@"emoji" : @"🇲🇽"}];
XCTAssertEqualObjects(bannerMessage.campaignInfo.messageID, @"test_message_id");
XCTAssertTrue(bannerMessage.campaignInfo.renderAsTestMessage);
XCTAssertEqual(bannerMessage.triggerType, FIRInAppMessagingDisplayTriggerTypeOnAnalyticsEvent);
XCTAssertEqualObjects(bannerMessage.campaignInfo.campaignName, @"campaignName");
XCTAssertEqualObjects(bannerMessage.title, @"titleText");
XCTAssertEqualObjects(bannerMessage.bodyText, @"bodyText");
XCTAssertEqualObjects(bannerMessage.textColor, [UIColor clearColor]);
XCTAssertNotNil(bannerMessage.imageData);
XCTAssertEqualObjects(bannerMessage.displayBackgroundColor, [UIColor blueColor]);
XCTAssertEqualObjects(bannerMessage.actionURL, [NSURL URLWithString:@"http://banner-test.com"]);
XCTAssertEqualObjects(bannerMessage.appData[@"emoji"], @"🇲🇽");
}
- (void)testImageOnlyMessageInit {
FIRInAppMessagingImageOnlyDisplay *imageOnlyMessage = [[FIRInAppMessagingImageOnlyDisplay alloc]
initWithCampaignName:@"campaignName"
imageData:[[self class] testImageData]
actionURL:[NSURL URLWithString:@"http://image-test.com"]
appData:@{@"emoji" : @"🥊"}];
XCTAssertEqualObjects(imageOnlyMessage.campaignInfo.messageID, @"test_message_id");
XCTAssertTrue(imageOnlyMessage.campaignInfo.renderAsTestMessage);
XCTAssertEqual(imageOnlyMessage.triggerType, FIRInAppMessagingDisplayTriggerTypeOnAnalyticsEvent);
XCTAssertEqualObjects(imageOnlyMessage.campaignInfo.campaignName, @"campaignName");
XCTAssertNotNil(imageOnlyMessage.imageData);
XCTAssertEqualObjects(imageOnlyMessage.actionURL, [NSURL URLWithString:@"http://image-test.com"]);
XCTAssertEqualObjects(imageOnlyMessage.appData[@"emoji"], @"🥊");
}
@end