Skip to content
Snippets Groups Projects
Commit 7f21e82a authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Make new identity in MyIdentityFeature

parent deb1f482
Branches
Tags
1 merge request!14[Example App] Make identity & contact
......@@ -52,6 +52,7 @@ extension AppEnvironment {
myIdentity: MyIdentityEnvironment(
getClient: { clientSubject.value },
observeIdentity: { identitySubject.eraseToAnyPublisher() },
updateIdentity: { identitySubject.value = $0 },
bgScheduler: bgScheduler,
mainScheduler: mainScheduler
)
......
......@@ -17,23 +17,28 @@ public enum MyIdentityAction: Equatable {
case viewDidLoad
case observeMyIdentity
case didUpdateMyIdentity(Identity?)
case makeIdentity
case didFailMakingIdentity(NSError)
}
public struct MyIdentityEnvironment {
public init(
getClient: @escaping () -> Client?,
observeIdentity: @escaping () -> AnyPublisher<Identity?, Never>,
updateIdentity: @escaping (Identity?) -> Void,
bgScheduler: AnySchedulerOf<DispatchQueue>,
mainScheduler: AnySchedulerOf<DispatchQueue>
) {
self.getClient = getClient
self.observeIdentity = observeIdentity
self.updateIdentity = updateIdentity
self.bgScheduler = bgScheduler
self.mainScheduler = mainScheduler
}
public var getClient: () -> Client?
public var observeIdentity: () -> AnyPublisher<Identity?, Never>
public var updateIdentity: (Identity?) -> Void
public var bgScheduler: AnySchedulerOf<DispatchQueue>
public var mainScheduler: AnySchedulerOf<DispatchQueue>
}
......@@ -61,6 +66,23 @@ public let myIdentityReducer = Reducer<MyIdentityState, MyIdentityAction, MyIden
case .didUpdateMyIdentity(let identity):
state.identity = identity
return .none
case .makeIdentity:
return Effect.run { subscriber in
do {
env.updateIdentity(try env.getClient()?.makeIdentity())
} catch {
subscriber.send(.didFailMakingIdentity(error as NSError))
}
subscriber.send(completion: .finished)
return AnyCancellable {}
}
.subscribe(on: env.bgScheduler)
.receive(on: env.mainScheduler)
.eraseToEffect()
case .didFailMakingIdentity(let error):
return .none
}
}
......@@ -69,6 +91,7 @@ extension MyIdentityEnvironment {
public static let failing = MyIdentityEnvironment(
getClient: { fatalError() },
observeIdentity: { fatalError() },
updateIdentity: { _ in fatalError() },
bgScheduler: .failing,
mainScheduler: .failing
)
......
import Combine
import ComposableArchitecture
import CustomDump
import ElixxirDAppsSDK
import XCTest
@testable import MyIdentityFeature
......@@ -43,6 +44,37 @@ final class MyIdentityFeatureTests: XCTestCase {
myIdentitySubject.send(completion: .finished)
mainScheduler.advance()
}
func testMakeIdentity() {
let newIdentity = Identity.stub()
var didUpdateIdentity = [Identity?]()
let bgScheduler = DispatchQueue.test
let mainScheduler = DispatchQueue.test
var env = MyIdentityEnvironment.failing
env.getClient = {
var client = Client.failing
client.makeIdentity.make = { newIdentity }
return client
}
env.updateIdentity = { didUpdateIdentity.append($0) }
env.bgScheduler = bgScheduler.eraseToAnyScheduler()
env.mainScheduler = mainScheduler.eraseToAnyScheduler()
let store = TestStore(
initialState: MyIdentityState(id: UUID()),
reducer: myIdentityReducer,
environment: env
)
store.send(.makeIdentity)
bgScheduler.advance()
XCTAssertNoDifference(didUpdateIdentity, [newIdentity])
mainScheduler.advance()
}
}
private extension Identity {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment