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 "FRADatabaseConfiguration.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRAError.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshottstatic NSString * const FOLDER_NAME = @"any_folder";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@interface FRADatabaseConfigurationTest : XCTestCase
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@end
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@implementation FRADatabaseConfigurationTest {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott id mockFileManager;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)setUp {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [super setUp];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott mockFileManager = OCMClassMock([NSFileManager class]);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockFileManager defaultManager]).andReturn(mockFileManager);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)tearDown {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [mockFileManager stopMocking];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott [super tearDown];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testCreateParentFolderReturnsYesIfFolderAlreadyExists {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockFileManager fileExistsAtPath:FOLDER_NAME]).andReturn(YES);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott BOOL result = [FRADatabaseConfiguration parentFoldersFor:FOLDER_NAME error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertTrue(result);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testCreateParentFolderReturnsYesIfFolderIsCreated {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockFileManager fileExistsAtPath:FOLDER_NAME]).andReturn(NO);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockFileManager createDirectoryAtPath:FOLDER_NAME withIntermediateDirectories:YES attributes:nil error:nil]).andReturn(YES);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott BOOL result = [FRADatabaseConfiguration parentFoldersFor:FOLDER_NAME error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertTrue(result);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testCreateParentFolderReturnsNoIfFails {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockFileManager fileExistsAtPath:FOLDER_NAME]).andReturn(NO);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockFileManager createDirectoryAtPath:FOLDER_NAME withIntermediateDirectories:YES attributes:nil error:[OCMArg anyObjectRef]]).andReturn(NO);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott BOOL result = [FRADatabaseConfiguration parentFoldersFor:FOLDER_NAME error:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertFalse(result);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testGetDatabasePathReturnsNilIfNoLibraryDirectories {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSArray<NSURL*> *urls = [NSMutableArray new];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockFileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]).andReturn(urls);
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni NSError *error;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRADatabaseConfiguration *databaseConfiguration = [FRADatabaseConfiguration alloc];
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni NSString *path = [databaseConfiguration getDatabasePathWithError:&error];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertNil(path);
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni XCTAssertNotNil(error);
78c07714ec1113f7f21c75b818f2bf6a7021618aDiego Colantoni XCTAssertEqualObjects([error.userInfo valueForKey:NSLocalizedDescriptionKey], @"Could not locate system folder /Library");
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testGetDatabasePathReturnsNilIfCannotCreateFolder {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([FRADatabaseConfiguration parentFoldersFor:@"" error:nil]).andReturn(NO);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRADatabaseConfiguration *databaseConfiguration = [FRADatabaseConfiguration alloc];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSString *path = [databaseConfiguration getDatabasePathWithError:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertNil(path);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott- (void)testGetDatabasePathReturnsPathToSQLliteFile {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSString *databaseDirectoryName = @"Database";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSString *libraryDirectory = @"/library_directory";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSString *databaseDirectoryPath = [NSString stringWithFormat:@"%@/%@", libraryDirectory, databaseDirectoryName];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSString *expectedDatabaseFilePath = [NSString stringWithFormat:@"%@/%@/%@", libraryDirectory, databaseDirectoryName, @"database.sqlite"];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSArray<NSURL*> *urls = [[NSMutableArray alloc] initWithObjects:[NSURL URLWithString:libraryDirectory], nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([mockFileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]).andReturn(urls);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott OCMStub([FRADatabaseConfiguration parentFoldersFor:databaseDirectoryPath error:nil]).andReturn(YES);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott FRADatabaseConfiguration *databaseConfiguration = [FRADatabaseConfiguration alloc];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSString *path = [databaseConfiguration getDatabasePathWithError:nil];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott XCTAssertEqualObjects(path, expectedDatabaseFilePath);
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@end