Newer
Older
import XCTest
import XXClient
@testable import XXMessengerClient
func testCreate() throws {
struct DidNewCMix: Equatable {
var ndfJSON: String
var storageDir: String
var password: Data
var registrationCode: String?
}
var didDownloadNDF: [NDFEnvironment] = []
var didGenerateSecret: [Int] = []
var didSavePassword: [Data] = []
var didCreateDirectory: [String] = []
var didNewCMix: [DidNewCMix] = []
let ndf = "ndf".data(using: .utf8)!
let password = "password".data(using: .utf8)!
let storageDir = "storage-dir"
env.ndfEnvironment = .unimplemented
env.downloadNDF.run = { ndfEnvironment in
didDownloadNDF.append(ndfEnvironment)
return ndf
}
env.generateSecret.run = { numBytes in
didGenerateSecret.append(numBytes)
return password
}
env.passwordStorage.save = { password in
didSavePassword.append(password)
}
env.fileManager.removeItem = { path in
didRemoveItem.append(path)
didCreateDirectory.append(path)
}
env.newCMix.run = { ndfJSON, storageDir, password, registrationCode in
didNewCMix.append(.init(
ndfJSON: ndfJSON,
storageDir: storageDir,
password: password,
registrationCode: registrationCode
))
}
try create()
XCTAssertNoDifference(didDownloadNDF, [.unimplemented])
XCTAssertNoDifference(didGenerateSecret, [32])
XCTAssertNoDifference(didSavePassword, [password])
XCTAssertNoDifference(didCreateDirectory, [storageDir])
XCTAssertNoDifference(didNewCMix, [.init(
ndfJSON: String(data: ndf, encoding: .utf8)!,
storageDir: storageDir,
password: password,
registrationCode: nil
)])
}
func testDownloadNDFFailure() {
struct Error: Swift.Error, Equatable {}
let error = Error()
env.ndfEnvironment = .unimplemented
env.downloadNDF.run = { _ in throw error }
XCTAssertThrowsError(try create()) { err in
XCTAssertEqual(err as? Error, error)
}
}
func testSavePasswordFailure() {
struct Error: Swift.Error, Equatable {}
let error = Error()
env.ndfEnvironment = .unimplemented
env.downloadNDF.run = { _ in "ndf".data(using: .utf8)! }
env.generateSecret.run = { _ in "password".data(using: .utf8)! }
env.passwordStorage.save = { _ in throw error }
XCTAssertThrowsError(try create()) { err in
XCTAssertEqual(err as? Error, error)
}
}
func testRemoveDirectoryFailure() {
struct Error: Swift.Error, Equatable {}
let error = Error()
env.ndfEnvironment = .unimplemented
env.downloadNDF.run = { _ in "ndf".data(using: .utf8)! }
env.generateSecret.run = { _ in "password".data(using: .utf8)! }
env.passwordStorage.save = { _ in }
XCTAssertThrowsError(try create()) { err in
XCTAssertEqual(err as? Error, error)
}
}
func testCreateDirectoryFailure() {
struct Error: Swift.Error, Equatable {}
let error = Error()
env.ndfEnvironment = .unimplemented
env.downloadNDF.run = { _ in "ndf".data(using: .utf8)! }
env.generateSecret.run = { _ in "password".data(using: .utf8)! }
env.passwordStorage.save = { _ in }
env.fileManager.createDirectory = { _ in throw error }
let create: MessengerCreate = .live(env)
XCTAssertThrowsError(try create()) { err in
XCTAssertEqual(err as? Error, error)
}
}
func testNewCMixFailure() {
struct Error: Swift.Error, Equatable {}
let error = Error()
env.ndfEnvironment = .unimplemented
env.downloadNDF.run = { _ in "ndf".data(using: .utf8)! }
env.generateSecret.run = { _ in "password".data(using: .utf8)! }
env.passwordStorage.save = { _ in }
env.newCMix.run = { _, _, _, _ in throw error }
XCTAssertThrowsError(try create()) { err in
XCTAssertEqual(err as? Error, error)
}
}
}