//
//  SettingsStoreTests.swift
//  Astro
//
//  Created by Liz Cross on 2016-12-21.
//  Copyright © 2016 Mobify Research & Development Inc. All rights reserved.
//

import XCTest
@testable import Astro

class SettingsStoreTests: AstroTestCase {
    var messageBus: MessageBus!
    var capturedResult: CapturedRpcMethodResult!
    var settingsStore: SettingsStore!

    override func setUp() {
        messageBus = MessageBus()
        settingsStore = SettingsStore(messageBus: messageBus)
        capturedResult = CapturedRpcMethodResult()
    }

    func testSetWithEmptyKey() {
        self.settingsStore.set("", value: "a value for an empty key", respond: capturedResult.callback)
        XCTAssertTrue(capturedResult.hasError)
    }

    func testGetWithEmptyKey() {
        self.settingsStore.get("", respond: capturedResult.callback)
        XCTAssertTrue(capturedResult.hasError)
    }

    func testDeleteWithEmptyKey() {
        self.settingsStore.delete("", respond: capturedResult.callback)
        XCTAssertTrue(capturedResult.hasError)
    }

    func testSetGetDelete() {
        let testKey = "TestKey"
        let testValue = "TestValue"

        self.settingsStore.set(testKey, value: testValue, respond: capturedResult.callback)

        self.settingsStore.get(testKey, respond: capturedResult.callback)
        AssertEqual(capturedResult.result as? String, b: testValue)

        self.settingsStore.delete(testKey, respond: capturedResult.callback)
        self.settingsStore.get(testKey, respond: capturedResult.callback)
        XCTAssertEqual(capturedResult.result as? NSNull, NSNull())
    }
}
