79 lines
1.7 KiB
Swift
Raw Normal View History

//
// KeychainStorageMock.swift
// KeychainStorageTests
//
// Created by Javier Cicchelli on 11/12/2022.
// Copyright © 2022 Röck+Cöde. All rights reserved.
//
import Foundation
import KeychainStorage
class KeychainStorageMock {
// MARK: Properties
private var storage: [String: Data]
private let concurrentQueue = DispatchQueue(
label: "com.rockncode.app.assignment.my-files.library.keychain-storage.test.queue.keychain-storage",
attributes: .concurrent
)
// MARK: Initialisers
init(storage: [String: Data] = [:]) {
self.storage = storage
}
}
// MARK: - Keychainable
extension KeychainStorageMock: Keychainable {
func getData(
_ key: String,
ignoringAttributeSynchronizable: Bool
) throws -> Data? {
var data: Data?
try concurrentQueue.sync {
guard let dataValue = storage[key] else {
throw KeychainStorageMockError.keyIsNotDefined
}
data = dataValue
}
return data
}
func set(
_ value: Data,
key: String,
ignoringAttributeSynchronizable: Bool
) throws {
concurrentQueue.async(flags: .barrier) {
self.storage[key] = value
}
}
func remove(
_ key: String,
ignoringAttributeSynchronizable: Bool
) throws {
guard storage.keys.contains(key) else {
throw KeychainStorageMockError.keyIsNotDefined
}
concurrentQueue.async(flags: .barrier) {
self.storage.removeValue(forKey: key)
}
}
}
// MARK: - KeychainStorageSpyError
enum KeychainStorageMockError: Error {
case keyIsNotDefined
}