Reader coverage.

Signed-off-by: Adam Rocska <adam.rocska@adams.solutions>
This commit is contained in:
Adam Rocska 2020-06-04 14:35:45 +02:00
parent 62484d2cae
commit f5b45e7e69
2 changed files with 79 additions and 3 deletions

View File

@ -5,9 +5,7 @@ public class Reader<Model> where Model: DictionaryInitialisable {
private let dbReader: DBReader.Reader private let dbReader: DBReader.Reader
init(dbReader: DBReader.Reader) { init(dbReader: DBReader.Reader) { self.dbReader = dbReader }
self.dbReader = dbReader
}
func lookup(_ ip: IpAddress) -> Model? { func lookup(_ ip: IpAddress) -> Model? {
guard let dictionary = dbReader.get(ip) else { return nil } guard let dictionary = dbReader.get(ip) else { return nil }

View File

@ -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 }
}