Skip to content

Commit 06d3610

Browse files
authored
Add test_spec for FCM (#3088)
* Add test_spec for FCM * FIRMessagingRemoteNotificationsProxyTest - don't use OCMPartialMock([UIApplication sharedApplication]) to avoid crashing tests on iOS 8 (#3094)
1 parent 56807f3 commit 06d3610

12 files changed

+235
-190
lines changed

.travis.yml

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,27 +54,37 @@ jobs:
5454

5555
- stage: test
5656
env:
57-
- PROJECT=Storage PLATFORM=all METHOD=xcodebuild
57+
- PROJECT=Database PLATFORM=all METHOD=xcodebuild
5858
before_install:
5959
- ./scripts/if_changed.sh ./scripts/install_prereqs.sh
6060
script:
6161
- travis_retry ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM
6262
# The pod lib lint tests are fast enough that it's not worth a separate stage.
63-
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseStorage.podspec --skip-tests
64-
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseStorage.podspec --use-libraries --skip-tests
65-
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseStorage.podspec --use-modular-headers --skip-tests
63+
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseDatabase.podspec --skip-tests
64+
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseDatabase.podspec --use-libraries --skip-tests
65+
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseDatabase.podspec --use-modular-headers --skip-tests
6666

6767
- stage: test
6868
env:
69-
- PROJECT=Database PLATFORM=all METHOD=xcodebuild
69+
- PROJECT=Messaging PLATFORM=all METHOD=xcodebuild
70+
before_install:
71+
- ./scripts/if_changed.sh ./scripts/install_prereqs.sh
72+
script:
73+
# Run both build.sh and pod lib lint tests to get multi iOS version test coverage
74+
- travis_retry ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM
75+
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseMessaging.podspec
76+
77+
- stage: test
78+
env:
79+
- PROJECT=Storage PLATFORM=all METHOD=xcodebuild
7080
before_install:
7181
- ./scripts/if_changed.sh ./scripts/install_prereqs.sh
7282
script:
7383
- travis_retry ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM
7484
# The pod lib lint tests are fast enough that it's not worth a separate stage.
75-
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseDatabase.podspec --skip-tests
76-
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseDatabase.podspec --use-libraries --skip-tests
77-
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseDatabase.podspec --use-modular-headers --skip-tests
85+
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseStorage.podspec --skip-tests
86+
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseStorage.podspec --use-libraries --skip-tests
87+
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseStorage.podspec --use-modular-headers --skip-tests
7888

7989
- stage: test
8090
env:
@@ -123,7 +133,6 @@ jobs:
123133
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseAuth.podspec
124134
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseAuthInterop.podspec
125135
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseDynamicLinks.podspec
126-
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseMessaging.podspec
127136
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseInAppMessaging.podspec
128137
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseInAppMessagingDisplay.podspec
129138

@@ -149,14 +158,15 @@ jobs:
149158
- travis_retry ./scripts/pod_lib_lint.rb FirebaseAuth.podspec --use-libraries
150159
- travis_retry ./scripts/pod_lib_lint.rb FirebaseAuthInterop.podspec --use-libraries
151160
- travis_retry ./scripts/pod_lib_lint.rb FirebaseDynamicLinks.podspec --use-libraries
152-
# The Protobuf dependency of FirebaseMessaging has warnings with --use-libraries
153-
- travis_retry ./scripts/pod_lib_lint.rb FirebaseMessaging.podspec --use-libraries --allow-warnings
154161
- travis_retry ./scripts/pod_lib_lint.rb FirebaseInAppMessaging.podspec --use-libraries
155162
- travis_retry ./scripts/pod_lib_lint.rb FirebaseInAppMessagingDisplay.podspec --use-libraries
156163
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseInstanceID.podspec --use-libraries --platforms=ios
157164
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseInstanceID.podspec --use-libraries --platforms=tvos
158165
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseInstanceID.podspec --use-modular-headers --platforms=ios
159166
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseInstanceID.podspec --use-modular-headers --platforms=tvos
167+
# The Protobuf dependency of FirebaseMessaging has warnings with --use-libraries.
168+
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseMessaging.podspec --use-libraries --allow-warnings
169+
- travis_retry ./scripts/if_changed.sh ./scripts/pod_lib_lint.rb FirebaseMessaging.podspec --use-modular-headers
160170

161171
- stage: test
162172
if: type = cron

Example/Messaging/Tests/FIRMessagingAnalyticsTest.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ - (void)setUp {
147147
}
148148

149149
- (void)tearDown {
150+
_eventHandler = nil;
151+
_userPropertyHandler = nil;
150152
[self.logClassMock stopMocking];
151153
[super tearDown];
152154
}

Example/Messaging/Tests/FIRMessagingClientTest.m

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,8 @@
3232

3333
#import <GoogleUtilities/GULReachabilityChecker.h>
3434

35-
static NSString *const kFIRMessagingUserDefaultsSuite = @"FIRMessagingClientTestUserDefaultsSuite";
36-
3735
static NSString *const kDeviceAuthId = @"123456";
3836
static NSString *const kSecretToken = @"56789";
39-
static NSString *const kDigest = @"com.google.digest";
40-
static NSString *const kVersionInfo = @"1.0";
41-
static NSString *const kSubscriptionID = @"abcdef-subscription-id";
42-
static NSString *const kDeletedSubscriptionID = @"deleted-abcdef-subscription-id";
43-
static NSString *const kFIRMessagingAppIDToken = @"1234xyzdef56789";
44-
static NSString *const kTopicToSubscribeTo = @"/topics/abcdef/hello-world";
4537

4638
@interface FIRInstanceID (exposedForTests)
4739

Example/Messaging/Tests/FIRMessagingDataMessageManagerTest.m

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@
3333
#import "FIRMessagingDefines.h"
3434
#import "NSError+FIRMessaging.h"
3535

36-
static NSString *const kFIRMessagingUserDefaultsSuite = @"FIRMessagingClientTestUserDefaultsSuite";
37-
38-
static NSString *const kFIRMessagingAppIDToken = @"1234abcdef789";
39-
4036
static NSString *const kMessagePersistentID = @"abcdef123";
4137
static NSString *const kMessageFrom = @"com.example.gcm";
4238
static NSString *const kMessageTo = @"123456789";
@@ -268,7 +264,7 @@ - (void)XXX_testSendValidMessage_withTTL0AndNoFIRMessagingConnection {
268264
// should save the message to be sent when we reconnect the next time
269265
OCMExpect([self.mockClient sendOnConnectOrDrop:[OCMArg checkWithBlock:isValidStanza]]);
270266
// should also try to reconnect immediately
271-
OCMExpect([self.mockClient retryConnectionImmediately:[OCMArg isEqual:@YES]]);
267+
OCMExpect([self.mockClient retryConnectionImmediately:YES]);
272268

273269
[self.dataMessageManager setDeviceAuthID:@"auth-id" secretToken:@"secret-token"];
274270
[self.dataMessageManager sendDataMessageStanza:message];
@@ -380,7 +376,8 @@ - (void)XXX_testDelayedMessagesBeingResentOnReconnect {
380376
- (void)testSendDelayedMessage_shouldNotSend {
381377
// should not send a delayed message even with an active connection
382378
// simulate active connection
383-
[[[self.mockClient stub] andReturnValue:OCMOCK_VALUE(YES)] isConnectionActive];
379+
[[[self.mockClient stub] andReturnValue:[NSNumber numberWithBool:YES]]
380+
isConnectionActive];
384381
[[self.mockClient reject] sendMessage:[OCMArg any]];
385382

386383
[[self.mockReceiver reject] didSendDataMessageWithID:[OCMArg any]];

Example/Messaging/Tests/FIRMessagingExtensionHelperTest.m

Lines changed: 53 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@
2222
#import "FIRMessaging.h"
2323
#import "FIRMessagingExtensionHelper.h"
2424

25+
API_AVAILABLE(ios(10.0))
2526
typedef void (^FIRMessagingContentHandler)(UNNotificationContent *content);
2627

28+
#if TARGET_OS_IOS
2729
static NSString *const kFCMPayloadOptionsName = @"fcm_options";
2830
static NSString *const kFCMPayloadOptionsImageURLName = @"image";
2931
static NSString *const kValidImageURL =
3032
@"https://firebasestorage.googleapis.com/v0/b/fcm-ios-f7f9c.appspot.com/o/"
3133
@"chubbyBunny.jpg?alt=media&token=d6c56a57-c007-4b27-b20f-f267cc83e9e5";
34+
#endif
3235

3336
@interface FIRMessagingExtensionHelper (ExposedForTest)
3437
#if TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
@@ -46,67 +49,72 @@ @implementation FIRMessagingExtensionHelperTest
4649

4750
- (void)setUp {
4851
[super setUp];
49-
FIRMessagingExtensionHelper *extensionHelper = [FIRMessaging extensionHelper];
50-
_mockExtensionHelper = OCMPartialMock(extensionHelper);
52+
if (@available(iOS 10.0, *)) {
53+
FIRMessagingExtensionHelper *extensionHelper = [FIRMessaging extensionHelper];
54+
_mockExtensionHelper = OCMPartialMock(extensionHelper);
55+
} else {
56+
// Fallback on earlier versions
57+
}
5158
}
5259

5360
- (void)tearDown {
5461
[_mockExtensionHelper stopMocking];
5562
}
5663

57-
#if TARGET_OS_IOS && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
64+
#if TARGET_OS_IOS
5865
#ifdef COCOAPODS
5966
// This test requires internet access.
6067
- (void)testModifyNotificationWithValidPayloadData {
61-
XCTestExpectation *validPayloadExpectation =
62-
[self expectationWithDescription:@"Test payload is valid."];
63-
64-
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
65-
content.userInfo = @{kFCMPayloadOptionsName : @{kFCMPayloadOptionsImageURLName : kValidImageURL}};
66-
FIRMessagingContentHandler handler = ^(UNNotificationContent *content) {
67-
[validPayloadExpectation fulfill];
68-
};
69-
[_mockExtensionHelper populateNotificationContent:content withContentHandler:handler];
70-
71-
OCMVerify([_mockExtensionHelper loadAttachmentForURL:[OCMArg any]
72-
completionHandler:[OCMArg any]]);
73-
[self waitForExpectationsWithTimeout:1.0 handler:nil];
68+
if (@available(iOS 10.0, *)) {
69+
XCTestExpectation *validPayloadExpectation =
70+
[self expectationWithDescription:@"Test payload is valid."];
71+
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
72+
content.userInfo = @{kFCMPayloadOptionsName : @{kFCMPayloadOptionsImageURLName : kValidImageURL}};
73+
FIRMessagingContentHandler handler = ^(UNNotificationContent *content) {
74+
[validPayloadExpectation fulfill];
75+
};
76+
[_mockExtensionHelper populateNotificationContent:content withContentHandler:handler];
77+
OCMVerify([_mockExtensionHelper loadAttachmentForURL:[OCMArg any]
78+
completionHandler:[OCMArg any]]);
79+
[self waitForExpectationsWithTimeout:1.0 handler:nil];
80+
}
7481
}
7582
#endif
7683

7784
- (void)testModifyNotificationWithInvalidPayloadData {
78-
XCTestExpectation *validPayloadExpectation =
79-
[self expectationWithDescription:@"Test payload is valid."];
80-
81-
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
82-
content.userInfo =
83-
@{kFCMPayloadOptionsName : @{kFCMPayloadOptionsImageURLName : @"a invalid URL"}};
84-
FIRMessagingContentHandler handler = ^(UNNotificationContent *content) {
85-
[validPayloadExpectation fulfill];
86-
};
87-
[_mockExtensionHelper populateNotificationContent:content withContentHandler:handler];
88-
89-
OCMReject([_mockExtensionHelper loadAttachmentForURL:[OCMArg any]
90-
completionHandler:[OCMArg any]]);
91-
[self waitForExpectationsWithTimeout:1.0 handler:nil];
85+
if (@available(iOS 10.0, *)) {
86+
XCTestExpectation *validPayloadExpectation =
87+
[self expectationWithDescription:@"Test payload is valid."];
88+
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
89+
content.userInfo =
90+
@{kFCMPayloadOptionsName : @{kFCMPayloadOptionsImageURLName : @"a invalid URL"}};
91+
FIRMessagingContentHandler handler = ^(UNNotificationContent *content) {
92+
[validPayloadExpectation fulfill];
93+
};
94+
[_mockExtensionHelper populateNotificationContent:content withContentHandler:handler];
95+
96+
OCMReject([_mockExtensionHelper loadAttachmentForURL:[OCMArg any]
97+
completionHandler:[OCMArg any]]);
98+
[self waitForExpectationsWithTimeout:1.0 handler:nil];
99+
}
92100
}
93101

94102
- (void)testModifyNotificationWithEmptyPayloadData {
95-
XCTestExpectation *validPayloadExpectation =
96-
[self expectationWithDescription:@"Test payload is valid."];
97-
98-
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
99-
content.userInfo =
100-
@{kFCMPayloadOptionsName : @{kFCMPayloadOptionsImageURLName : @"a invalid URL"}};
101-
FIRMessagingContentHandler handler = ^(UNNotificationContent *content) {
102-
[validPayloadExpectation fulfill];
103-
};
104-
[_mockExtensionHelper populateNotificationContent:content withContentHandler:handler];
105-
106-
OCMReject([_mockExtensionHelper loadAttachmentForURL:[OCMArg any]
107-
completionHandler:[OCMArg any]]);
108-
[self waitForExpectationsWithTimeout:1.0 handler:nil];
103+
if (@available(iOS 10.0, *)) {
104+
XCTestExpectation *validPayloadExpectation =
105+
[self expectationWithDescription:@"Test payload is valid."];
106+
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
107+
content.userInfo =
108+
@{kFCMPayloadOptionsName : @{kFCMPayloadOptionsImageURLName : @"a invalid URL"}};
109+
FIRMessagingContentHandler handler = ^(UNNotificationContent *content) {
110+
[validPayloadExpectation fulfill];
111+
};
112+
[_mockExtensionHelper populateNotificationContent:content withContentHandler:handler];
113+
OCMReject([_mockExtensionHelper loadAttachmentForURL:[OCMArg any]
114+
completionHandler:[OCMArg any]]);
115+
[self waitForExpectationsWithTimeout:1.0 handler:nil];
116+
}
109117
}
110-
#endif
118+
#endif // TARGET_OS_IOS
111119

112120
@end

Example/Messaging/Tests/FIRMessagingPendingTopicsListTest.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ @interface MockPendingTopicsListDelegate: NSObject <FIRMessagingPendingTopicsLis
3535

3636
@property(nonatomic, assign) BOOL isReady;
3737
@property(nonatomic, copy) MockDelegateSubscriptionHandler subscriptionHandler;
38-
@property(nonatomic, copy) void(^updateHandler)();
38+
@property(nonatomic, copy) void(^updateHandler)(void);
3939

4040
@end
4141

@@ -121,7 +121,7 @@ - (void)testAddMultiplePendingTopicsWithSameAction {
121121
pendingTopics.delegate = self.notReadyDelegate;
122122

123123
for (NSInteger i = 0; i < 10; i++) {
124-
NSString *topic = [NSString stringWithFormat:@"/topics/%ld", i];
124+
NSString *topic = [NSString stringWithFormat:@"/topics/%ld", (long)i];
125125
[pendingTopics addOperationForTopic:topic
126126
withAction:FIRMessagingTopicActionSubscribe
127127
completion:nil];

0 commit comments

Comments
 (0)