Newer
Older
import XCTestDynamicOverlay
import XXClient
public struct ResetAuthState: Equatable {
public init(
partner: Contact,
isResetting: Bool = false,
failure: String? = nil,
didReset: Bool = false
self.isResetting = isResetting
self.failure = failure
self.didReset = didReset
public var partner: Contact
public var isResetting: Bool
public var failure: String?
public var didReset: Bool
public enum ResetAuthAction: Equatable {
case resetTapped
case didReset
case didFail(String)
}
public init(
messenger: Messenger,
mainQueue: AnySchedulerOf<DispatchQueue>,
bgQueue: AnySchedulerOf<DispatchQueue>
) {
self.messenger = messenger
self.mainQueue = mainQueue
self.bgQueue = bgQueue
}
public var messenger: Messenger
public var mainQueue: AnySchedulerOf<DispatchQueue>
public var bgQueue: AnySchedulerOf<DispatchQueue>
}
#if DEBUG
extension ResetAuthEnvironment {
public static let unimplemented = ResetAuthEnvironment(
messenger: .unimplemented,
mainQueue: .unimplemented,
bgQueue: .unimplemented
)
public let resetAuthReducer = Reducer<ResetAuthState, ResetAuthAction, ResetAuthEnvironment>
{ state, action, env in
switch action {
case .resetTapped:
state.isResetting = true
state.didReset = false
state.failure = nil
return Effect.result { [state] in
do {
let e2e = try env.messenger.e2e.tryGet()
_ = try e2e.resetAuthenticatedChannel(partner: state.partner)
return .success(.didReset)
} catch {
return .success(.didFail(error.localizedDescription))
}
}
.subscribe(on: env.bgQueue)
.receive(on: env.mainQueue)
.eraseToEffect()
case .didReset:
state.isResetting = false
state.didReset = true
state.failure = nil
return .none
case .didFail(let failure):
state.isResetting = false
state.didReset = false
state.failure = failure
return .none
}
}