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 * 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 * 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 * Copyright 2016 ForgeRock AS.
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRADatabaseConfiguration.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRAFMDatabaseConnectionHelper.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRAFMDatabaseFactory.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FMDatabase.h"
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni#import "FRAError.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const DatabaseFilePath = @"/database/path";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const SchemaFilePath = @"/schema/file/path";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@interface FRAFMDatabaseConnectionHelperTest : XCTestCase
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * A series of tests which will demonstrate the public interface of the
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * database code, and demonstrate that it throws exceptions for conditions
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * we consider to be exceptional.
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@implementation FRAFMDatabaseConnectionHelperTest {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott mockConfig = OCMClassMock([FRADatabaseConfiguration class]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott mockFactory = OCMClassMock([FRAFMDatabaseFactory class]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott mockSchemaResults = OCMClassMock([FMResultSet class]);
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni mockDatabase = OCMClassMock([FMDatabase class]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott .andCall(self, @selector(mockSchemaResultsListHasNext));
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockSchemaResults stringForColumnIndex:1])
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott .andCall(self, @selector(mockSchemaResultsListGetStringForColumnIndex));
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)initialiseSchemaResultsListWith:(NSString *)first, ... {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott schemaResultsList = [[NSMutableArray alloc] init];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott for (NSString *arg = first; arg != nil; arg = va_arg(args, NSString*)) {
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni- (NSString*)mockSchemaResultsListGetStringForColumnIndex {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSString* value = [schemaResultsList objectAtIndex:0];
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni- (void)testGetConnectionReturnsNilIfNotInitialised {
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni FRAFMDatabaseConnectionHelper *database = [FRAFMDatabaseConnectionHelper alloc];
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni FMDatabase *connection = [database getConnectionWithError:nil];
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni- (void)testGetConnectionReturnsNilIfCantFindDatabasePath {
FRAFMDatabaseConnectionHelper *database = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
FRAFMDatabaseConnectionHelper *database = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
OCMStub([mockFactory createDatabaseFor:DatabaseFilePath withError:[OCMArg anyObjectRef]]).andReturn(cannotOpenDatabase);
FRAFMDatabaseConnectionHelper *database = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
FRAFMDatabaseConnectionHelper *database = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
OCMStub([mockString initWithContentsOfFile:SchemaFilePath encoding:NSUTF8StringEncoding error:nil]).andReturn(nil);
FRAFMDatabaseConnectionHelper *database = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
OCMStub([mockFactory createDatabaseFor:DatabaseFilePath withError:nil]).andReturn(cannotExecuteQueryDatabase);
FRAFMDatabaseConnectionHelper *database = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
OCMStub([mockFactory createDatabaseFor:DatabaseFilePath withError:nil]).andReturn(cannotInitialiseDatabase);
FRAFMDatabaseConnectionHelper *database = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
OCMStub([mockString initWithContentsOfFile:SchemaFilePath encoding:NSUTF8StringEncoding error:nil]).andReturn(nil);
FRAFMDatabaseConnectionHelper *database = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
FRAFMDatabaseConnectionHelper *database = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
FRAFMDatabaseConnectionHelper *database = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
- (void)testThatDatabaseClosesWhenClosed {
FRAFMDatabaseConnectionHelper *sqlDatabase = [[FRAFMDatabaseConnectionHelper alloc] initWithConfiguration:mockConfig databaseFactory:mockFactory];
@end