721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott/*
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * The contents of this file are subject to the terms of the Common Development and
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * Distribution License (the License). You may not use this file except in compliance with the
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * License.
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott *
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * specific language governing permission and limitations under the License.
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott *
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * When distributing Covered Software, include this CDDL Header Notice in each file and include
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * Header, with the fields enclosed by brackets [] replaced by your own identifying
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * information: "Portions copyright [year] [name of copyright owner]".
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott *
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * Copyright 2016 ForgeRock AS.
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott */
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import <OCMock/OCMock.h>
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import <XCTest/XCTest.h>
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FMDatabase.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRAError.h"
caa9e77dc369fea8df9ae2c598d3c83b7214c1cfDiego Colantoni#import "FRAFMDatabaseConnectionHelper.h"
caa9e77dc369fea8df9ae2c598d3c83b7214c1cfDiego Colantoni#import "FRAHotpOathMechanism.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRAIdentity.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRAIdentityDatabase.h"
f877f6ca2428244a6d0954a1dbef471577b32c60Diego Colantoni#import "FRAIdentityModel.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRAModelsFromDatabase.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRANotification.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRAPushMechanism.h"
caa9e77dc369fea8df9ae2c598d3c83b7214c1cfDiego Colantoni#import "FRATotpOathMechanism.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const ReadSchema = @"read_all schema";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const Issuer = @"issuer";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const AccountName = @"account name";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const ImageURL = @"image url";
caa9e77dc369fea8df9ae2c598d3c83b7214c1cfDiego Colantonistatic NSString * const BackgroundColour = @"background color";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const HMACOtpType = @"hotp";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const TimeOtpType = @"totp";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const PushType = @"push";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const UnknownType = @"unknown";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const Version = @"version";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const MechanismUID = @"mechanism uid";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const Options = @"{}";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const TimeReceived = @"500";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const TimeExpired = @"time expired";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const Data = @"{\"message_id\":\"message id\", \"push_challenge\":\"challenge_data\",\"time_to_live\":\"60.0\"}";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@interface FRAModelsFromDatabaseTest : XCTestCase
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@end
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@implementation FRAModelsFromDatabaseTest {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott id mockSqlDatabase;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott id mockIdentityDatabase;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott id mockDatabase;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott id mockQueryResults;
f877f6ca2428244a6d0954a1dbef471577b32c60Diego Colantoni id mockIdentityModel;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)setUp {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [super setUp];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott mockSqlDatabase = OCMClassMock([FRAFMDatabaseConnectionHelper class]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott mockIdentityDatabase = OCMClassMock([FRAIdentityDatabase class]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott mockDatabase = OCMClassMock([FMDatabase class]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott mockQueryResults = OCMClassMock([FMResultSet class]);
f877f6ca2428244a6d0954a1dbef471577b32c60Diego Colantoni mockIdentityModel = OCMClassMock([FRAIdentityModel class]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)tearDown {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [mockSqlDatabase stopMocking];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [mockIdentityDatabase stopMocking];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [mockDatabase stopMocking];
f877f6ca2428244a6d0954a1dbef471577b32c60Diego Colantoni [mockIdentityModel stopMocking];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [super tearDown];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testGetAllIdentitiesReturnsNilIfCannotGetReadAllSchema {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase readSchema:@"read_all" withError:nil]).andReturn(nil);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni NSArray<FRAIdentity*>* identities = [FRAModelsFromDatabase allIdentitiesWithDatabase:mockSqlDatabase identityDatabase:mockIdentityDatabase identityModel:mockIdentityModel error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertNil(identities);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testGetAllIdentitiesReturnsNilIfCannotGetDatabaseConnection {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase readSchema:@"read_all" withError:nil]).andReturn(ReadSchema);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase getConnectionWithError:nil]).andReturn(nil);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni NSArray<FRAIdentity*>* identities = [FRAModelsFromDatabase allIdentitiesWithDatabase:mockSqlDatabase identityDatabase:mockIdentityDatabase identityModel:mockIdentityModel error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertNil(identities);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testGetAllIdentitiesReturnsNilIfCannotExecuteQueryOnDatabase {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni OCMStub([mockSqlDatabase readSchema:@"read_all" withError:[OCMArg anyObjectRef]]).andReturn(ReadSchema);
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni OCMStub([mockSqlDatabase getConnectionWithError:[OCMArg anyObjectRef]]).andReturn(mockDatabase);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockDatabase executeQuery:ReadSchema]).andReturn(nil);
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni NSError *error;
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni NSArray<FRAIdentity*>* identities = [FRAModelsFromDatabase allIdentitiesWithDatabase:mockSqlDatabase identityDatabase:mockIdentityDatabase identityModel:mockIdentityModel error:&error];
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertNil(identities);
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni XCTAssertNotNil(error);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testGetAllIdentitiesReturnsIdentityWithHMACOneTimePasswordMechanism {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase readSchema:@"read_all" withError:nil]).andReturn(ReadSchema);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase getConnectionWithError:nil]).andReturn(mockDatabase);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockDatabase executeQuery:ReadSchema]).andReturn(mockQueryResults);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [self setUpDummyIdentity:HMACOtpType];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni NSArray<FRAIdentity*>* identities = [FRAModelsFromDatabase allIdentitiesWithDatabase:mockSqlDatabase identityDatabase:mockIdentityDatabase identityModel:mockIdentityModel error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identities.count, 1);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRAIdentity *identity = [identities objectAtIndex:0];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.issuer, Issuer);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.accountName, AccountName);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.backgroundColor, BackgroundColour);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.mechanisms.count, 1);
caa9e77dc369fea8df9ae2c598d3c83b7214c1cfDiego Colantoni FRAHotpOathMechanism *mechanism = (FRAHotpOathMechanism *)[identity.mechanisms objectAtIndex:0];
caa9e77dc369fea8df9ae2c598d3c83b7214c1cfDiego Colantoni XCTAssertEqual([mechanism class], [FRAHotpOathMechanism class]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testGetAllIdentitiesReturnsIdentityWithTimeOneTimePasswordMechanism {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase readSchema:@"read_all" withError:nil]).andReturn(ReadSchema);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase getConnectionWithError:nil]).andReturn(mockDatabase);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockDatabase executeQuery:ReadSchema]).andReturn(mockQueryResults);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [self setUpDummyIdentity:TimeOtpType];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni NSArray<FRAIdentity*>* identities = [FRAModelsFromDatabase allIdentitiesWithDatabase:mockSqlDatabase identityDatabase:mockIdentityDatabase identityModel:mockIdentityModel error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identities.count, 1);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRAIdentity *identity = [identities objectAtIndex:0];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.issuer, Issuer);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.accountName, AccountName);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.backgroundColor, BackgroundColour);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.mechanisms.count, 1);
caa9e77dc369fea8df9ae2c598d3c83b7214c1cfDiego Colantoni FRATotpOathMechanism *mechanism = (FRATotpOathMechanism *)[identity.mechanisms objectAtIndex:0];
caa9e77dc369fea8df9ae2c598d3c83b7214c1cfDiego Colantoni XCTAssertEqual([mechanism class], [FRATotpOathMechanism class]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testGetAllIdentitiesReturnsIdentityWithPushMechanism {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase readSchema:@"read_all" withError:nil]).andReturn(ReadSchema);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase getConnectionWithError:nil]).andReturn(mockDatabase);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockDatabase executeQuery:ReadSchema]).andReturn(mockQueryResults);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [self setUpDummyIdentity:PushType];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni NSArray<FRAIdentity*>* identities = [FRAModelsFromDatabase allIdentitiesWithDatabase:mockSqlDatabase identityDatabase:mockIdentityDatabase identityModel:mockIdentityModel error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identities.count, 1);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRAIdentity *identity = [identities objectAtIndex:0];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.issuer, Issuer);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.accountName, AccountName);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.backgroundColor, BackgroundColour);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(identity.mechanisms.count, 1);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRAPushMechanism *mechanism = (FRAPushMechanism *)[identity.mechanisms objectAtIndex:0];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRANotification *notification = [mechanism.notifications objectAtIndex:0];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqualObjects(notification.messageId, @"message id");
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings XCTAssertEqualObjects(notification.challenge, @"challenge_data");
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqualObjects(notification.timeReceived, [NSDate dateWithTimeIntervalSince1970:500]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqual(notification.timeToLive, (NSTimeInterval)60.0);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testGetAllIdentitiesThrowsExceptionForUnknownMechanismType {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase readSchema:@"read_all" withError:nil]).andReturn(ReadSchema);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSqlDatabase getConnectionWithError:nil]).andReturn(mockDatabase);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockDatabase executeQuery:ReadSchema]).andReturn(mockQueryResults);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [self setUpDummyIdentity:UnknownType];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni XCTAssertThrows([FRAModelsFromDatabase allIdentitiesWithDatabase:mockSqlDatabase identityDatabase:mockIdentityDatabase identityModel:mockIdentityModel error:nil]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)setUpDummyIdentity:(NSString *)type {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMExpect([mockQueryResults next]).andReturn(YES);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"issuer"]).andReturn(Issuer);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"accountName"]).andReturn(AccountName);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"imageURL"]).andReturn(ImageURL);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"bgColor"]).andReturn(BackgroundColour);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"type"]).andReturn(type);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"version"]).andReturn(Version);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"mechanismUID"]).andReturn(MechanismUID);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"options"]).andReturn(Options);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"timeReceived"]).andReturn(TimeReceived);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"timeExpired"]).andReturn(TimeExpired);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults stringForColumn:@"data"]).andReturn(Data);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults intForColumn:@"pending"]).andReturn(-1);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockQueryResults intForColumn:@"approved"]).andReturn(0);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMExpect([mockQueryResults next]).andReturn(NO);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@end