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

Implement loading my facts from the client

parent 2bd54573
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!98Messenger example - register, confirm, and unregister user facts
import AppCore import AppCore
import Combine
import ComposableArchitecture import ComposableArchitecture
import Foundation import Foundation
import XCTestDynamicOverlay import XCTestDynamicOverlay
...@@ -111,7 +112,24 @@ public let myContactReducer = Reducer<MyContactState, MyContactAction, MyContact ...@@ -111,7 +112,24 @@ public let myContactReducer = Reducer<MyContactState, MyContactAction, MyContact
return .none return .none
case .loadFactsTapped: case .loadFactsTapped:
return .none return Effect.run { subscriber in
do {
let contactId = try env.messenger.e2e.tryGet().getContact().getId()
if var dbContact = try env.db().fetchContacts(.init(id: [contactId])).first {
let facts = try env.messenger.ud.tryGet().getFacts()
dbContact.email = facts.get(.email)?.value
dbContact.phone = facts.get(.phone)?.value
try env.db().saveContact(dbContact)
}
} catch {
subscriber.send(.didFail(error.localizedDescription))
}
subscriber.send(completion: .finished)
return AnyCancellable {}
}
.subscribe(on: env.bgQueue)
.receive(on: env.mainQueue)
.eraseToEffect()
case .didFail(let failure): case .didFail(let failure):
state.alert = .error(failure) state.alert = .error(failure)
......
...@@ -111,13 +111,61 @@ final class MyContactFeatureTests: XCTestCase { ...@@ -111,13 +111,61 @@ final class MyContactFeatureTests: XCTestCase {
} }
func testLoadFactsFromClient() { func testLoadFactsFromClient() {
let contactId = "contact-id".data(using: .utf8)!
let dbContact = XXModels.Contact(id: contactId)
let email = "test@email.com"
let phone = "123456789"
var didFetchContacts: [XXModels.Contact.Query] = []
var didSaveContact: [XXModels.Contact] = []
let store = TestStore( let store = TestStore(
initialState: MyContactState(), initialState: MyContactState(),
reducer: myContactReducer, reducer: myContactReducer,
environment: .unimplemented environment: .unimplemented
) )
store.environment.mainQueue = .immediate
store.environment.bgQueue = .immediate
store.environment.messenger.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getContact.run = {
var contact: XXClient.Contact = .unimplemented(Data())
contact.getIdFromContact.run = { _ in contactId }
return contact
}
return e2e
}
store.environment.messenger.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getFacts.run = {
[
Fact(type: .email, value: email),
Fact(type: .phone, value: phone),
]
}
return ud
}
store.environment.db.run = {
var db: Database = .failing
db.fetchContacts.run = { query in
didFetchContacts.append(query)
return [dbContact]
}
db.saveContact.run = { contact in
didSaveContact.append(contact)
return contact
}
return db
}
store.send(.loadFactsTapped) store.send(.loadFactsTapped)
XCTAssertNoDifference(didFetchContacts, [.init(id: [contactId])])
var expectedSavedContact = dbContact
expectedSavedContact.email = email
expectedSavedContact.phone = phone
XCTAssertNoDifference(didSaveContact, [expectedSavedContact])
} }
func testErrorAlert() { func testErrorAlert() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment