Files
react-native-notifications/lib/ios/RNNotificationsTests/RNNotificationEventHandlerTests.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

117 lines
6.2 KiB
Objective-C

#import <XCTest/XCTest.h>
#import <OCMock/OCMock.h>
#import "RNNotificationEventHandler.h"
#import "RNNotificationUtils.h"
@interface RNNotificationEventHandlerTests : XCTestCase
@property (nonatomic, retain) RNNotificationEventHandler* uut;
@property (nonatomic, retain) RNNotificationsStore* store;
@property (nonatomic, retain) id mockedNotificationCenter;
@end
@implementation RNNotificationEventHandlerTests
- (void)setUp {
_store = [RNNotificationsStore sharedInstance];
_uut = [[RNNotificationEventHandler alloc] initWithStore:_store];
_mockedNotificationCenter = [OCMockObject partialMockForObject:[NSNotificationCenter new]];
[[[[[OCMockObject niceMockForClass:NSNotificationCenter.class] stub] classMethod] andReturn:_mockedNotificationCenter] defaultCenter];
}
- (void)testDidRegisterForRemoteNotifications_ShouldEmitEventWithDeviceTokenDataString {
NSData* deviceToken = [@"740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad" dataUsingEncoding:NSUTF32StringEncoding];
[[_mockedNotificationCenter expect] postNotificationName:RNRegistered object:[OCMArg any] userInfo:[OCMArg checkWithBlock:^BOOL(id obj) {
return ([[obj objectForKey:@"deviceToken"] isEqualToString:[RNNotificationUtils deviceTokenToString:deviceToken]]);
}]];
[_uut didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
[_mockedNotificationCenter verify];
}
- (void)testDidRegisterForRemoteNotifications_ShouldEmitEventWithDeviceTokenString {
NSString* deviceToken = @"740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad";
[[_mockedNotificationCenter expect] postNotificationName:RNRegistered object:[OCMArg any] userInfo:[OCMArg checkWithBlock:^BOOL(id obj) {
return ([[obj objectForKey:@"deviceToken"] isEqualToString:deviceToken]);
}]];
[_uut didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
[_mockedNotificationCenter verify];
}
- (void)testDidFailToRegisterForRemoteNotifications_ShouldEmitEvent {
NSError* error = [NSError errorWithDomain:@"domain" code:1 userInfo:nil];
[[_mockedNotificationCenter expect] postNotificationName:RNRegistrationFailed object:[OCMArg any] userInfo:[OCMArg checkWithBlock:^BOOL(id obj) {
return ([[obj valueForKey:@"code"] isEqualToNumber:@(1)] &&
[[obj valueForKey:@"domain"] isEqualToString:@"domain"]);
}]];
[_uut didFailToRegisterForRemoteNotificationsWithError:error];
[_mockedNotificationCenter verify];
}
- (void)testDidReceiveForegroundNotification_ShouldSaveCompletionBlockToStore {
UNNotification* notification = [self createNotificationWithIdentifier:@"id" andUserInfo:@{}];
void (^testBlock)(UNNotificationPresentationOptions) = ^void(UNNotificationPresentationOptions options) {};
[_uut didReceiveForegroundNotification:notification withCompletionHandler:testBlock];
XCTAssertEqual([_store getPresentationCompletionHandler:@"id"], testBlock);
}
- (void)testDidReceiveForegroundNotification_ShouldEmitEvent {
UNNotification* notification = [self createNotificationWithIdentifier:@"id" andUserInfo:@{@"extraKey": @"extraValue"}];
void (^testBlock)(UNNotificationPresentationOptions) = ^void(UNNotificationPresentationOptions options) {};
[[_mockedNotificationCenter expect] postNotificationName:RNNotificationReceived object:[OCMArg any] userInfo:[OCMArg checkWithBlock:^BOOL(id obj) {
return ([[obj valueForKey:@"identifier"] isEqualToString:@"id"] &&
[[obj valueForKey:@"extraKey"] isEqualToString:@"extraValue"]);
}]];
[_uut didReceiveForegroundNotification:notification withCompletionHandler:testBlock];
[_mockedNotificationCenter verify];
}
- (void)testDidReceiveNotificationResponse_ShouldEmitEvent {
UNNotification* notification = [self createNotificationWithIdentifier:@"id" andUserInfo:@{@"extraKey": @"extraValue"}];
UNNotificationResponse* response = [self createNotificationResponseWithIdentifier:@"actionId" andNotification:notification];
void (^testBlock)(void) = ^void() {};
[[_mockedNotificationCenter expect] postNotificationName:RNNotificationOpened object:[OCMArg any] userInfo:[OCMArg checkWithBlock:^BOOL(id response) {
NSDictionary* notification = response[@"notification"];
NSDictionary* action = response[@"action"];
return ([[notification valueForKey:@"identifier"] isEqualToString:@"id"] &&
[[notification valueForKey:@"extraKey"] isEqualToString:@"extraValue"] && [action[@"identifier"] isEqualToString:@"actionId"]);
}]];
[_uut didReceiveNotificationResponse:response completionHandler:testBlock];
[_mockedNotificationCenter verify];
}
- (void)testDidReceiveNotificationResponse_ShouldSaveCompletionBlockToStore {
UNNotification* notification = [self createNotificationWithIdentifier:@"id" andUserInfo:@{@"extraKey": @"extraValue"}];
UNNotificationResponse* response = [self createNotificationResponseWithIdentifier:@"id" andNotification:notification];
void (^testBlock)(void) = ^void() {};
[_uut didReceiveNotificationResponse:response completionHandler:testBlock];
XCTAssertEqual([_store getActionCompletionHandler:@"id"], testBlock);
}
- (UNNotification *)createNotificationWithIdentifier:(NSString *)identifier andUserInfo:(NSDictionary *)userInfo {
UNNotification* notification = [OCMockObject niceMockForClass:[UNNotification class]];
UNNotificationContent* content = [OCMockObject niceMockForClass:[UNNotificationContent class]];
OCMStub([content userInfo]).andReturn(userInfo);
UNNotificationRequest* request = [OCMockObject partialMockForObject:[UNNotificationRequest requestWithIdentifier:identifier content:content trigger:nil]];
OCMStub(notification.request).andReturn(request);
OCMStub(request.content).andReturn(content);
return notification;
}
- (UNNotificationResponse *)createNotificationResponseWithIdentifier:(NSString *)identifier andNotification:(UNNotification *)notification {
UNNotificationResponse* notificationResponse = [OCMockObject niceMockForClass:[UNNotificationResponse class]];
OCMStub(notificationResponse.actionIdentifier).andReturn(identifier);
OCMStub(notificationResponse.notification).andReturn(notification);
return notificationResponse;
}
@end