Files
react-native-notifications/lib/ios/RNNotificationsTests/Integration/RNCommandsHandlerIntegrationTest.m
Yogev Ben David 006e4ab86f V3 (#437)
* Add typescript support

* Add unit tests

* Splits requestPermissionsWithCategories to two functions

* Done converting the js part to typescript

* typescript WIP

* Fix unit

* Fix e2e

* Identical API for Android and iOS

* Fix bundle

* build typescript before test-e2e-ios

* build typescript before test-e2e-ios

* Add docousaurus documentation

* Fix rebase from master

* Move android and ios folders into lib folder

* Split Notification.ts, Fix android example module

* Add test coverage for Notification.ts, clean old js files

* Updated docs

* Move ios and android commands to designated classes

* Remove package.json unused packages

* Fix e2e

* Fix docs, remove circleci config file

* 3.0.0-alpha.0

* Update README.md

* Fix js tests

* Add missing flavors

* Update release script

* Add pretest scripts

* Update release script

* Revert manual version change

* Fix release build

* Gradle resolve react-native version flavor

* Fix documentation website

* Add identical registerRemoteNotifications api for iOS and Android

* Finish API documentation

* Merge from master branch

* Fix build

* Remove NOTIFICATION_RECEIVED_FOREGROUND_EVENT_NAME

* Fix iOS example project

* Split specific iOS events, Update docs

* Add subscription documentation guide

* Add Local Notifications documentation guide

* Fix handling actions, Add event handling documentation guide

* Fix platforms logo

* Fix iOS unit tests

* Update package.json version to 3.0.0-beta.0 and generate CHANGELOG.gren.md [ci skip]

* Fix documentation

* Add prerelease script

* Update package.json version to 3.0.0-beta.1 and generate CHANGELOG.gren.md [ci skip]

* Add npm run docusaurus

* Add removeAllDeliveredNotifications support for both iOS and Android

* Add CI tag support

* Fix podspec

* Update iOS installation

* Fix android installation

* fix build.gradle rn package.json path

* Fix iOS

* Add NotificationFactory

* Fix tests

* Fix resolving gradle react native version

* find rn package.json by checking if the file exists instead of an exception in JsonSlurper

* Fix e2e

* Update package.json version to 3.0.0-beta.2 and generate CHANGELOG.gren.md [ci skip]

* Rename setBadgesCount to setBadgeCount

* add ios and android Notifications object getters

* Update package.json version to 3.0.0-beta.3 and generate CHANGELOG.gren.md [ci skip]

* Fix android token registration

* Update package.json version to 3.0.0-beta.4 and generate CHANGELOG.gren.md [ci skip]

Co-authored-by: wixmobile <41264282+wixmobile@users.noreply.github.com>
Co-authored-by: Artal Druk <artald@wix.com>
2020-01-15 17:13:07 +02:00

100 lines
4.4 KiB
Objective-C

#import <XCTest/XCTest.h>
#import <OCMock/OCMock.h>
#import <objc/runtime.h>
#import "RNCommandsHandler.h"
#import "RNNotificationsStore.h"
@interface RNCommandsHandlerIntegrationTest : XCTestCase
@property (nonatomic, retain) RNCommandsHandler* uut;
@property (nonatomic, retain) id notificationCenter;
@property (nonatomic, retain) id mockUserNotifications;
@end
@implementation RNCommandsHandlerIntegrationTest
- (void)setUp {
_mockUserNotifications = [OCMockObject mockForProtocol:[self getMockUserNotificationCenterProtocol]];
id notificationCenterMock = OCMClassMock([UNUserNotificationCenter class]);
OCMStub(ClassMethod([notificationCenterMock currentNotificationCenter])).andReturn(_mockUserNotifications);
UIApplication* sharedApplication = [OCMockObject mockForClass:[UIApplication class]];
id mockedApplicationClass = OCMClassMock([UIApplication class]);
OCMStub(ClassMethod([mockedApplicationClass sharedApplication])).andReturn(sharedApplication);
_uut = [RNCommandsHandler new];
_notificationCenter = [UNUserNotificationCenter currentNotificationCenter];
}
- (void)testRequestPermissions_userAuthorizedPermissions {
UNAuthorizationOptions authOptions = (UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert);
UNNotificationSettings* settings = [UNNotificationSettings new];
[settings setValue:@(UNAuthorizationStatusAuthorized) forKey:@"authorizationStatus"];
[[_notificationCenter expect] requestAuthorizationWithOptions:authOptions completionHandler:[OCMArg invokeBlockWithArgs:@(YES), [NSNull null], nil]];
[[_notificationCenter expect] getNotificationSettingsWithCompletionHandler:[OCMArg invokeBlockWithArgs:settings, nil]];
[[(id)[UIApplication sharedApplication] expect] registerForRemoteNotifications];
[_uut requestPermissions];
[_notificationCenter verify];
}
- (void)testRequestPermissions_userDeniedPermissions {
UNAuthorizationOptions authOptions = (UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert);
UNNotificationSettings* settings = [UNNotificationSettings new];
[settings setValue:@(UNAuthorizationStatusDenied) forKey:@"authorizationStatus"];
[[_notificationCenter expect] requestAuthorizationWithOptions:authOptions completionHandler:[OCMArg invokeBlockWithArgs:@(YES), [NSNull null], nil]];
[[_notificationCenter expect] getNotificationSettingsWithCompletionHandler:[OCMArg invokeBlockWithArgs:settings, nil]];
[[(id)[UIApplication sharedApplication] reject] registerForRemoteNotifications];
[_uut requestPermissions];
[_notificationCenter verify];
}
- (void)testSetCategories_shouldSetCategories {
NSArray* json = @[@{@"identifier": @"categoryId", @"actions": @[@{@"identifier" : @"actionId", @"activationMode": @"foreground"}]}];
[[_notificationCenter expect] setNotificationCategories:[OCMArg checkWithBlock:^BOOL(NSMutableSet<UNNotificationCategory *>* categories) {
UNNotificationCategory* category = categories.allObjects.firstObject;
UNNotificationAction* action = category.actions.firstObject;
return ([category.identifier isEqualToString:@"categoryId"] &&
[action.identifier isEqualToString:@"actionId"] &&
action.options == UNNotificationActionOptionForeground);
}]];
[_uut setCategories:json];
[_notificationCenter verify];
}
- (void)testGetInitialNotification {
NSDictionary* initialNotification = @{};
[[RNNotificationsStore sharedInstance] setInitialNotification:initialNotification];
[self.uut getInitialNotification:^(id result) {
XCTAssertEqual(result, initialNotification);
} reject:^(NSString *code, NSString *message, NSError *error) {
}];
}
- (Protocol *)getMockUserNotificationCenterProtocol {
Protocol *aProtocol = objc_getProtocol("MockUserNotificationCenter");
if (!aProtocol) {
aProtocol = objc_allocateProtocol("MockUserNotificationCenter");
unsigned int methodCount = 0;
Method *methods = class_copyMethodList([UNUserNotificationCenter class], &methodCount);
for (unsigned int i = 0; i < methodCount; i++) {
Method method = methods[i];
protocol_addMethodDescription(aProtocol, method_getName(method), method_getTypeEncoding(method), YES, YES);
}
free(methods);
objc_registerProtocol(aProtocol);
}
return aProtocol;
}
@end