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

Do not verify contact when request received

parent 71cc4baa
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!81Messenger example - contact authorization improvements
...@@ -15,7 +15,6 @@ public struct AuthCallbackHandlerRequest { ...@@ -15,7 +15,6 @@ public struct AuthCallbackHandlerRequest {
extension AuthCallbackHandlerRequest { extension AuthCallbackHandlerRequest {
public static func live( public static func live(
db: DBManagerGetDB, db: DBManagerGetDB,
messenger: Messenger,
now: @escaping () -> Date now: @escaping () -> Date
) -> AuthCallbackHandlerRequest { ) -> AuthCallbackHandlerRequest {
AuthCallbackHandlerRequest { xxContact in AuthCallbackHandlerRequest { xxContact in
...@@ -28,21 +27,9 @@ extension AuthCallbackHandlerRequest { ...@@ -28,21 +27,9 @@ extension AuthCallbackHandlerRequest {
dbContact.username = try xxContact.getFact(.username)?.value dbContact.username = try xxContact.getFact(.username)?.value
dbContact.email = try xxContact.getFact(.email)?.value dbContact.email = try xxContact.getFact(.email)?.value
dbContact.phone = try xxContact.getFact(.phone)?.value dbContact.phone = try xxContact.getFact(.phone)?.value
dbContact.authStatus = .verificationInProgress dbContact.authStatus = .stranger
dbContact.createdAt = now() dbContact.createdAt = now()
dbContact = try db().saveContact(dbContact) dbContact = try db().saveContact(dbContact)
do {
try messenger.waitForNetwork()
try messenger.waitForNodes()
let verified = try messenger.verifyContact(xxContact)
dbContact.authStatus = verified ? .verified : .verificationFailed
dbContact = try db().saveContact(dbContact)
} catch {
dbContact.authStatus = .verificationFailed
dbContact = try db().saveContact(dbContact)
throw error
}
} }
} }
} }
......
...@@ -20,11 +20,7 @@ extension AppEnvironment { ...@@ -20,11 +20,7 @@ extension AppEnvironment {
let messenger = Messenger.live(messengerEnv) let messenger = Messenger.live(messengerEnv)
let authHandler = AuthCallbackHandler.live( let authHandler = AuthCallbackHandler.live(
messenger: messenger, messenger: messenger,
handleRequest: .live( handleRequest: .live(db: dbManager.getDB, now: Date.init),
db: dbManager.getDB,
messenger: messenger,
now: Date.init
),
handleConfirm: .live(db: dbManager.getDB), handleConfirm: .live(db: dbManager.getDB),
handleReset: .live(db: dbManager.getDB) handleReset: .live(db: dbManager.getDB)
) )
......
...@@ -10,17 +10,8 @@ final class AuthCallbackHandlerRequestTests: XCTestCase { ...@@ -10,17 +10,8 @@ final class AuthCallbackHandlerRequestTests: XCTestCase {
func testRequestFromNewContact() throws { func testRequestFromNewContact() throws {
let now = Date() let now = Date()
var didFetchContacts: [XXModels.Contact.Query] = [] var didFetchContacts: [XXModels.Contact.Query] = []
var didVerifyContact: [XXClient.Contact] = []
var didSaveContact: [XXModels.Contact] = [] var didSaveContact: [XXModels.Contact] = []
var messenger: Messenger = .unimplemented
messenger.waitForNetwork.run = { _ in }
messenger.waitForNodes.run = { _, _, _, _ in }
messenger.verifyContact.run = { contact in
didVerifyContact.append(contact)
return true
}
let request = AuthCallbackHandlerRequest.live( let request = AuthCallbackHandlerRequest.live(
db: .init { db: .init {
var db: Database = .failing var db: Database = .failing
...@@ -34,7 +25,6 @@ final class AuthCallbackHandlerRequestTests: XCTestCase { ...@@ -34,7 +25,6 @@ final class AuthCallbackHandlerRequestTests: XCTestCase {
} }
return db return db
}, },
messenger: messenger,
now: { now } now: { now }
) )
var xxContact = XXClient.Contact.unimplemented("contact".data(using: .utf8)!) var xxContact = XXClient.Contact.unimplemented("contact".data(using: .utf8)!)
...@@ -50,26 +40,15 @@ final class AuthCallbackHandlerRequestTests: XCTestCase { ...@@ -50,26 +40,15 @@ final class AuthCallbackHandlerRequestTests: XCTestCase {
try request(xxContact) try request(xxContact)
XCTAssertNoDifference(didFetchContacts, [.init(id: ["id".data(using: .utf8)!])]) XCTAssertNoDifference(didFetchContacts, [.init(id: ["id".data(using: .utf8)!])])
XCTAssertNoDifference(didSaveContact, [ XCTAssertNoDifference(didSaveContact, [.init(
.init( id: "id".data(using: .utf8)!,
id: "id".data(using: .utf8)!, marshaled: "contact".data(using: .utf8)!,
marshaled: "contact".data(using: .utf8)!, username: "username",
username: "username", email: "email",
email: "email", phone: "phone",
phone: "phone", authStatus: .stranger,
authStatus: .verificationInProgress, createdAt: now
createdAt: now )])
),
.init(
id: "id".data(using: .utf8)!,
marshaled: "contact".data(using: .utf8)!,
username: "username",
email: "email",
phone: "phone",
authStatus: .verified,
createdAt: now
)
])
} }
func testRequestWhenContactInDatabase() throws { func testRequestWhenContactInDatabase() throws {
...@@ -79,7 +58,6 @@ final class AuthCallbackHandlerRequestTests: XCTestCase { ...@@ -79,7 +58,6 @@ final class AuthCallbackHandlerRequestTests: XCTestCase {
db.fetchContacts.run = { _ in [.init(id: "id".data(using: .utf8)!)] } db.fetchContacts.run = { _ in [.init(id: "id".data(using: .utf8)!)] }
return db return db
}, },
messenger: .unimplemented,
now: XCTUnimplemented("now", placeholder: Date()) now: XCTUnimplemented("now", placeholder: Date())
) )
var contact = XXClient.Contact.unimplemented("contact".data(using: .utf8)!) var contact = XXClient.Contact.unimplemented("contact".data(using: .utf8)!)
...@@ -87,96 +65,4 @@ final class AuthCallbackHandlerRequestTests: XCTestCase { ...@@ -87,96 +65,4 @@ final class AuthCallbackHandlerRequestTests: XCTestCase {
try request(contact) try request(contact)
} }
func testRequestFromNewContactVerificationFalse() throws {
let now = Date()
var didSaveContact: [XXModels.Contact] = []
var messenger: Messenger = .unimplemented
messenger.waitForNetwork.run = { _ in }
messenger.waitForNodes.run = { _, _, _, _ in }
messenger.verifyContact.run = { _ in false }
let request = AuthCallbackHandlerRequest.live(
db: .init {
var db: Database = .failing
db.fetchContacts.run = { query in return [] }
db.saveContact.run = { contact in
didSaveContact.append(contact)
return contact
}
return db
},
messenger: messenger,
now: { now }
)
var xxContact = XXClient.Contact.unimplemented("contact".data(using: .utf8)!)
xxContact.getIdFromContact.run = { _ in "id".data(using: .utf8)! }
xxContact.getFactsFromContact.run = { _ in [] }
try request(xxContact)
XCTAssertNoDifference(didSaveContact, [
.init(
id: "id".data(using: .utf8)!,
marshaled: "contact".data(using: .utf8)!,
authStatus: .verificationInProgress,
createdAt: now
),
.init(
id: "id".data(using: .utf8)!,
marshaled: "contact".data(using: .utf8)!,
authStatus: .verificationFailed,
createdAt: now
)
])
}
func testRequestFromNewContactVerificationFailure() throws {
struct Failure: Error, Equatable {}
let failure = Failure()
let now = Date()
var didSaveContact: [XXModels.Contact] = []
var messenger: Messenger = .unimplemented
messenger.waitForNetwork.run = { _ in }
messenger.waitForNodes.run = { _, _, _, _ in }
messenger.verifyContact.run = { _ in throw failure }
let request = AuthCallbackHandlerRequest.live(
db: .init {
var db: Database = .failing
db.fetchContacts.run = { query in return [] }
db.saveContact.run = { contact in
didSaveContact.append(contact)
return contact
}
return db
},
messenger: messenger,
now: { now }
)
var xxContact = XXClient.Contact.unimplemented("contact".data(using: .utf8)!)
xxContact.getIdFromContact.run = { _ in "id".data(using: .utf8)! }
xxContact.getFactsFromContact.run = { _ in [] }
XCTAssertThrowsError(try request(xxContact)) { error in
XCTAssertNoDifference(error as? Failure, failure)
}
XCTAssertNoDifference(didSaveContact, [
.init(
id: "id".data(using: .utf8)!,
marshaled: "contact".data(using: .utf8)!,
authStatus: .verificationInProgress,
createdAt: now
),
.init(
id: "id".data(using: .utf8)!,
marshaled: "contact".data(using: .utf8)!,
authStatus: .verificationFailed,
createdAt: now
)
])
}
} }
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