Reader coverage.
Signed-off-by: Adam Rocska <adam.rocska@adams.solutions>
This commit is contained in:
parent
62484d2cae
commit
f5b45e7e69
|
@ -5,9 +5,7 @@ public class Reader<Model> where Model: DictionaryInitialisable {
|
|||
|
||||
private let dbReader: DBReader.Reader
|
||||
|
||||
init(dbReader: DBReader.Reader) {
|
||||
self.dbReader = dbReader
|
||||
}
|
||||
init(dbReader: DBReader.Reader) { self.dbReader = dbReader }
|
||||
|
||||
func lookup(_ ip: IpAddress) -> Model? {
|
||||
guard let dictionary = dbReader.get(ip) else { return nil }
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
import Foundation
|
||||
import XCTest
|
||||
@testable import struct MetadataReader.Metadata
|
||||
@testable import class Api.Reader
|
||||
import enum Decoder.Payload
|
||||
import enum IndexReader.IpAddress
|
||||
import protocol Api.DictionaryInitialisable
|
||||
import protocol DBReader.Reader
|
||||
|
||||
fileprivate typealias ApiReader = Api.Reader
|
||||
fileprivate typealias DBReaderReader = DBReader.Reader
|
||||
|
||||
class ReaderTest: XCTestCase {
|
||||
|
||||
func testLookup_returnsNilIfDbReaderLookupResolvedNil() {
|
||||
let expectedIp: IpAddress = .v4("127.0.0.1")
|
||||
var dbReaderLookupCalled = false
|
||||
let mockDBReader = MockDBReader { actualIp in
|
||||
XCTAssertEqual(expectedIp, actualIp)
|
||||
dbReaderLookupCalled = true
|
||||
return nil
|
||||
}
|
||||
let reader = ApiReader<MockModel>(dbReader: mockDBReader)
|
||||
XCTAssertNil(reader.lookup(expectedIp))
|
||||
XCTAssertTrue(dbReaderLookupCalled)
|
||||
}
|
||||
|
||||
func testLookup_returnsTheConstructedModelIfResolved() {
|
||||
let expectedIp: IpAddress = .v4("127.0.0.1")
|
||||
var dbReaderLookupCalled = false
|
||||
let stubDictionary = [
|
||||
"testString": Payload.utf8String("test"),
|
||||
"testMap": Payload.map(["key": Payload.int32(123)])
|
||||
]
|
||||
let mockDBReader = MockDBReader { actualIp in
|
||||
XCTAssertEqual(expectedIp, actualIp)
|
||||
dbReaderLookupCalled = true
|
||||
return stubDictionary
|
||||
}
|
||||
let reader = ApiReader<MockModel>(dbReader: mockDBReader)
|
||||
let model = reader.lookup(expectedIp)
|
||||
XCTAssertEqual(stubDictionary, model?.dictionary)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fileprivate class MockDBReader: DBReaderReader {
|
||||
var metadata = Metadata(
|
||||
nodeCount: 0,
|
||||
recordSize: 0,
|
||||
ipVersion: 0,
|
||||
databaseType: "",
|
||||
languages: [],
|
||||
binaryFormatMajorVersion: 0,
|
||||
binaryFormatMinorVersion: 0,
|
||||
buildEpoch: 0,
|
||||
description: [:],
|
||||
metadataSectionSize: 0,
|
||||
databaseSize: 0
|
||||
)
|
||||
|
||||
private let mockGet: (IpAddress) -> [String: Payload]?
|
||||
|
||||
init(mockGet: @escaping (IpAddress) -> [String: Payload]?) {
|
||||
self.mockGet = mockGet
|
||||
}
|
||||
|
||||
func get(_ ip: IpAddress) -> [String: Payload]? { return mockGet(ip) }
|
||||
|
||||
}
|
||||
|
||||
struct MockModel: DictionaryInitialisable {
|
||||
|
||||
let dictionary: [String: Payload]?
|
||||
|
||||
init(_ dictionary: [String: Payload]?) { self.dictionary = dictionary }
|
||||
|
||||
}
|
Loading…
Reference in New Issue