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

Merge branch 'fix/ud-search' into 'development'

Fix user discovery search

See merge request elixxir/elixxir-dapps-sdk-swift!40
parents 5a2606ef a0437bc3
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!40Fix user discovery search
......@@ -2,11 +2,11 @@ import Bindings
import XCTestDynamicOverlay
public struct UdSearchCallback {
public init(handle: @escaping (Result<[Data], NSError>) -> Void) {
public init(handle: @escaping (Result<[UDSearchResult], NSError>) -> Void) {
self.handle = handle
}
public var handle: (Result<[Data], NSError>) -> Void
public var handle: (Result<[UDSearchResult], NSError>) -> Void
}
extension UdSearchCallback {
......@@ -29,7 +29,7 @@ extension UdSearchCallback {
callback.handle(.failure(error as NSError))
} else if let data = contactListJSON {
do {
callback.handle(.success(try JSONDecoder().decode([Data].self, from: data)))
callback.handle(.success(try [UDSearchResult].decode(data)))
} catch {
callback.handle(.failure(error as NSError))
}
......
import Foundation
public struct UDSearchResult: Equatable {
public init(
id: Data,
facts: [Fact]
) {
self.id = id
self.facts = facts
}
public var id: Data
public var facts: [Fact]
}
extension UDSearchResult: Codable {
enum CodingKeys: String, CodingKey {
case id = "ID"
case facts = "Facts"
}
public static func decode(_ data: Data) throws -> Self {
let data = convertBigIntsToStrings(jsonData: data)
return try JSONDecoder().decode(Self.self, from: data)
}
public func encode() throws -> Data {
try JSONEncoder().encode(self)
}
}
extension Array where Element == UDSearchResult {
public static func decode(_ data: Data) throws -> Self {
let data = convertBigIntsToStrings(jsonData: data)
return try JSONDecoder().decode(Self.self, from: data)
}
public func encode() throws -> Data {
try JSONEncoder().encode(self)
}
}
private func convertBigIntsToStrings(jsonData input: Data) -> Data {
guard var string = String(data: input, encoding: .utf8) else {
return input
}
string = string.replacingOccurrences(
of: #":\s*([0-9]{19,})\s*,"#,
with: #": "$1","#,
options: [.regularExpression]
)
guard let output = string.data(using: .utf8) else {
return input
}
return output
}
import CustomDump
import XCTest
@testable import XXClient
final class UDSearchResultTests: XCTestCase {
func testCoding() throws {
let idB64 = "pYIpRwPy+FnOkl5tndkG8RC93W/t5b1lszqPpMDynlUD"
let facts: [Fact] = [
Fact(fact: "carlos_arimateias", type: 0),
]
let jsonString = """
{
"ID": "\(idB64)",
"Facts": \(String(data: try! facts.encode(), encoding: .utf8)!)
}
"""
let jsonData = jsonString.data(using: .utf8)!
let model = try UDSearchResult.decode(jsonData)
XCTAssertNoDifference(model, UDSearchResult(
id: Data(base64Encoded: idB64)!,
facts: facts
))
let encodedModel = try model.encode()
let decodedModel = try UDSearchResult.decode(encodedModel)
XCTAssertNoDifference(decodedModel, model)
}
func testCodingArray() throws {
let models: [UDSearchResult] = [
UDSearchResult(
id: Data(base64Encoded: "pYIpRwPy+FnOkl5tndkG8RC93W/t5b1lszqPpMDynlUD")!,
facts: [
Fact(fact: "carlos_arimateias", type: 0),
]
),
]
let encodedModels = try models.encode()
let decodedModels = try [UDSearchResult].decode(encodedModels)
XCTAssertNoDifference(decodedModels, models)
}
func testEncodeWithBigInt() throws {
let idB64 = "pYIpRwPy+FnOkl5tndkG8RC93W/t5b1lszqPpMDynlUD"
let facts: [Fact] = [
Fact(fact: "carlos_arimateias", type: 0),
]
let jsonString = """
{
"ID": "\(idB64)",
"DhPubKey": {
"Value": 1759426033802606996617132861414734059978289057332806031357800676138355264622676606691435603603751978195460163638145821347601916259127578968570412642641025630452893097179266022832268525346700655861033031712000288680395716922501450233258587788020541937373196899001184700899008948530359980753630443486308876999029238453979779103124291315202352475056237021681172884599194016245219278368648568458514708567045834427853469072638665888791358582182353417065794210125797368093469194927663862565508608719835557592421245749381164023134450699040591219966988201315627676532245052123725278573237006510683695959381015415110970848376498637637944431576313526294020390694483472829278364602405292767170719547347485307956614210210673321959886410245334772057212077704024337636501108566655549055129066343309591274727538343075929837698653965640646190405582788894021694347212874155979958144038307500444865955516612526623220973497735316081265793063949,
"Fingerprint": 15989433043166758754
},
"OwnershipProof": null,
"Facts": \(String(data: try! facts.encode(), encoding: .utf8)!)
}
"""
let jsonData = jsonString.data(using: .utf8)!
let decodedModel = try UDSearchResult.decode(jsonData)
XCTAssertNoDifference(decodedModel, UDSearchResult(
id: Data(base64Encoded: idB64)!,
facts: facts
))
}
}
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