FRANotificationTest.m revision 721bb987c406979bcfe705fa1ca8d54497d40fcb
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott * The contents of this file are subject to the terms of the Common Development and
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott * Distribution License (the License). You may not use this file except in compliance with the
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott * specific language governing permission and limitations under the License.
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott * When distributing Covered Software, include this CDDL Header Notice in each file and include
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott * Header, with the fields enclosed by brackets [] replaced by your own identifying
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott * information: "Portions copyright [year] [name of copyright owner]".
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott * Copyright 2016 ForgeRock AS.
415243fbc81341293a852ff6aa14e9608d08685cCraig McDonnell#import "FRAIdentityDatabase.h"
415243fbc81341293a852ff6aa14e9608d08685cCraig McDonnell#import "FRAIdentityDatabaseSQLiteOperations.h"
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott#import "FRANotification.h"
415243fbc81341293a852ff6aa14e9608d08685cCraig McDonnell mockSqlOperations = OCMClassMock([FRAIdentityDatabaseSQLiteOperations class]);
415243fbc81341293a852ff6aa14e9608d08685cCraig McDonnell database = [[FRAIdentityDatabase alloc] initWithSqlOperations:mockSqlOperations];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott notification = [[FRANotification alloc] initWithDatabase:database messageId:@"messageId" challenge:[@"challange" dataUsingEncoding:NSUTF8StringEncoding] timeReceived:[NSDate date] timeToLive:timeToLive];
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott XCTAssertEqual([notification isPending], YES);
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott XCTAssertEqual([notification isApproved], NO);
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([notification isDenied], NO);
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([notification isExpired], NO);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRANotification *expiringNotification = [[FRANotification alloc] initWithDatabase:database messageId:@"messageId" challenge:[@"challenge" dataUsingEncoding:NSUTF8StringEncoding] timeReceived:timeReceived timeToLive:timeToLive];
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqualObjects([expiringNotification timeExpired], [timeReceived dateByAddingTimeInterval:timeToLive]);
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott XCTAssertEqual([notification isPending], NO);
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott XCTAssertEqual([notification isApproved], YES);
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([notification isDenied], NO);
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott XCTAssertEqual([notification isPending], NO);
91f0e3cb60de3eba8cbb70c7e36cc0df22d71f5bRobert Wapshott XCTAssertEqual([notification isApproved], NO);
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([notification isDenied], YES);
415243fbc81341293a852ff6aa14e9608d08685cCraig McDonnell- (void)testSavedNotificationAutomaticallySavesItselfToDatabaseWhenApproved {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([(FRAIdentityDatabaseSQLiteOperations*)mockSqlOperations insertNotification:notification error:nil]).andReturn(YES);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [database insertNotification:notification error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([(FRAIdentityDatabaseSQLiteOperations*)mockSqlOperations updateNotification:notification error:nil]).andReturn(YES);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott BOOL notificationApproved = [notification approveWithError:nil];
415243fbc81341293a852ff6aa14e9608d08685cCraig McDonnell- (void)testSavedNotificationAutomaticallySavesItselfToDatabaseWhenDenied {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([(FRAIdentityDatabaseSQLiteOperations*)mockSqlOperations insertNotification:notification error:nil]).andReturn(YES);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [database insertNotification:notification error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([(FRAIdentityDatabaseSQLiteOperations*)mockSqlOperations updateNotification:notification error:nil]).andReturn(YES);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott BOOL notificationDenied = [notification denyWithError:nil];
415243fbc81341293a852ff6aa14e9608d08685cCraig McDonnell- (void)testBroadcastsOneChangeNotificationWhenNotificationUpdateIsAutomaticallySavedToDatabase {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([(FRAIdentityDatabaseSQLiteOperations*)mockSqlOperations insertNotification:notification error:nil]).andReturn(YES);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [database insertNotification:notification error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([(FRAIdentityDatabaseSQLiteOperations*)mockSqlOperations updateNotification:notification error:nil]).andReturn(YES);
415243fbc81341293a852ff6aa14e9608d08685cCraig McDonnell [[NSNotificationCenter defaultCenter] addMockObserver:databaseObserverMock name:FRAIdentityDatabaseChangedNotification object:database];
415243fbc81341293a852ff6aa14e9608d08685cCraig McDonnell [[databaseObserverMock expect] notificationWithName:FRAIdentityDatabaseChangedNotification object:database userInfo:[OCMArg any]];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott BOOL notificationApproved = [notification approveWithError:nil];
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni- (void)testIsExpiredReturnsYesIfNotificationHasExpired {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRANotification *expiredNotification = [[FRANotification alloc] initWithDatabase:database messageId:@"messageId" challenge:[@"challenge" dataUsingEncoding:NSUTF8StringEncoding] timeReceived:[NSDate date] timeToLive:-10.0];
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([expiredNotification isExpired], YES);
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([expiredNotification isPending], NO);
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([expiredNotification isApproved], NO);
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([expiredNotification isDenied], NO);
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni- (void)testIsExpiredReturnsNoIfNotificationHasNotExpired {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRANotification *expiredNotification = [[FRANotification alloc] initWithDatabase:database messageId:@"messageId" challenge:[@"challenge" dataUsingEncoding:NSUTF8StringEncoding] timeReceived:[NSDate date] timeToLive:120.0];
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([expiredNotification isExpired], NO);
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([expiredNotification isPending], YES);
3cb6a584a87fa8fec140b0bb20dd91731d13e751Diego Colantoni XCTAssertEqual([expiredNotification isApproved], NO);