mirror of
https://github.com/zhigang1992/react-native-notifications.git
synced 2026-06-10 15:58:51 +08:00
* 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>
117 lines
6.2 KiB
Objective-C
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
|