rename some of the new public protocols in JSONAPITesting

This commit is contained in:
Mathew Polzin
2019-11-07 07:56:58 -08:00
parent 19636a47f0
commit 7fabe2574e
8 changed files with 52 additions and 52 deletions
@@ -14,7 +14,7 @@ public enum ArrayElementComparison: Equatable, CustomStringConvertible {
case differentValues(String, String)
case prebuilt(String)
public init(sameTypeComparison: Comparison) {
public init(sameTypeComparison: BasicComparison) {
switch sameTypeComparison {
case .same:
self = .same
@@ -8,11 +8,11 @@
import JSONAPI
extension Attributes {
public func compare(to other: Self) -> [String: Comparison] {
public func compare(to other: Self) -> [String: BasicComparison] {
let mirror1 = Mirror(reflecting: self)
let mirror2 = Mirror(reflecting: other)
var comparisons = [String: Comparison]()
var comparisons = [String: BasicComparison]()
for child in mirror1.children {
guard let childLabel = child.label else { continue }
@@ -5,13 +5,13 @@
// Created by Mathew Polzin on 11/3/19.
//
public protocol Comparable: CustomStringConvertible {
public protocol Comparison: CustomStringConvertible {
var rawValue: String { get }
var isSame: Bool { get }
}
public enum Comparison: Comparable, Equatable {
public enum BasicComparison: Comparison, Equatable {
case same
case different(String, String)
case prebuilt(String)
@@ -56,11 +56,11 @@ public enum Comparison: Comparable, Equatable {
public typealias NamedDifferences = [String: String]
public protocol PropertyComparable: Comparable {
public protocol PropertyComparison: Comparison {
var differences: NamedDifferences { get }
}
extension PropertyComparable {
extension PropertyComparison {
public var description: String {
return differences
.map { "(\($0): \($1))" }
@@ -7,11 +7,11 @@
import JSONAPI
public struct DocumentComparison: Equatable, PropertyComparable {
public let apiDescription: Comparison
public struct DocumentComparison: Equatable, PropertyComparison {
public let apiDescription: BasicComparison
public let body: BodyComparison
init(apiDescription: Comparison, body: BodyComparison) {
init(apiDescription: BasicComparison, body: BodyComparison) {
self.apiDescription = apiDescription
self.body = body
}
@@ -33,7 +33,7 @@ public enum BodyComparison: Equatable, CustomStringConvertible {
case differentErrors(ErrorComparison)
case differentData(DocumentDataComparison)
public typealias ErrorComparison = [Comparison]
public typealias ErrorComparison = [BasicComparison]
static func compare<E: JSONAPIError, M: JSONAPI.Meta, L: JSONAPI.Links>(errors errors1: [E], _ meta1: M?, _ links1: L?, with errors2: [E], _ meta2: M?, _ links2: L?) -> ErrorComparison {
return errors1.compare(
@@ -48,9 +48,9 @@ public enum BodyComparison: Equatable, CustomStringConvertible {
String(describing: error2)
)
}
).map(Comparison.init) + [
Comparison(meta1, meta2),
Comparison(links1, links2)
).map(BasicComparison.init) + [
BasicComparison(meta1, meta2),
BasicComparison(links1, links2)
]
}
@@ -79,10 +79,10 @@ public enum BodyComparison: Equatable, CustomStringConvertible {
public var rawValue: String { description }
}
extension EncodableJSONAPIDocument where Body: Equatable, PrimaryResourceBody: _OptionalResourceBody {
extension EncodableJSONAPIDocument where Body: Equatable, PrimaryResourceBody: TestableResourceBody {
public func compare(to other: Self) -> DocumentComparison {
return DocumentComparison(
apiDescription: Comparison(
apiDescription: BasicComparison(
String(describing: apiDescription),
String(describing: other.apiDescription)
),
@@ -91,7 +91,7 @@ extension EncodableJSONAPIDocument where Body: Equatable, PrimaryResourceBody: _
}
}
extension DocumentBody where Self: Equatable, PrimaryResourceBody: _OptionalResourceBody {
extension DocumentBody where Self: Equatable, PrimaryResourceBody: TestableResourceBody {
public func compare(to other: Self) -> BodyComparison {
// rule out case where they are the same
@@ -7,13 +7,13 @@
import JSONAPI
public struct DocumentDataComparison: Equatable, PropertyComparable {
public struct DocumentDataComparison: Equatable, PropertyComparison {
public let primary: PrimaryResourceBodyComparison
public let includes: IncludesComparison
public let meta: Comparison
public let links: Comparison
public let meta: BasicComparison
public let links: BasicComparison
init(primary: PrimaryResourceBodyComparison, includes: IncludesComparison, meta: Comparison, links: Comparison) {
init(primary: PrimaryResourceBodyComparison, includes: IncludesComparison, meta: BasicComparison, links: BasicComparison) {
self.primary = primary
self.includes = includes
self.meta = meta
@@ -33,20 +33,20 @@ public struct DocumentDataComparison: Equatable, PropertyComparable {
}
}
extension DocumentBodyData where PrimaryResourceBody: _OptionalResourceBody {
extension DocumentBodyData where PrimaryResourceBody: TestableResourceBody {
public func compare(to other: Self) -> DocumentDataComparison {
return .init(
primary: primary.compare(to: other.primary),
includes: includes.compare(to: other.includes),
meta: Comparison(meta, other.meta),
links: Comparison(links, other.links)
meta: BasicComparison(meta, other.meta),
links: BasicComparison(links, other.links)
)
}
}
public enum PrimaryResourceBodyComparison: Equatable, CustomStringConvertible {
case oneOrMore(ManyResourceObjectComparison)
case optionalSingle(Comparison)
case optionalSingle(BasicComparison)
public var isSame: Bool {
switch self {
@@ -69,7 +69,7 @@ public enum PrimaryResourceBodyComparison: Equatable, CustomStringConvertible {
public var rawValue: String { return description }
}
public struct ManyResourceObjectComparison: Equatable, PropertyComparable {
public struct ManyResourceObjectComparison: Equatable, PropertyComparison {
public let comparisons: [ArrayElementComparison]
public init(_ comparisons: [ArrayElementComparison]) {
@@ -86,16 +86,16 @@ public struct ManyResourceObjectComparison: Equatable, PropertyComparable {
}
}
extension _OptionalResourceBody where WrappedPrimaryResourceType: ResourceObjectType {
extension TestableResourceBody where TestablePrimaryResourceType: ResourceObjectType {
public func compare(to other: Self) -> PrimaryResourceBodyComparison {
guard let one = optionalResourceObject,
let two = other.optionalResourceObject else {
guard let one = testableResourceObject,
let two = other.testableResourceObject else {
func nilOrName<T>(_ resObj: [T]?) -> String {
resObj.map { _ in String(describing: T.self) } ?? "nil"
}
return .optionalSingle(Comparison(nilOrName(optionalResourceObject), nilOrName(other.optionalResourceObject)))
return .optionalSingle(BasicComparison(nilOrName(testableResourceObject), nilOrName(other.testableResourceObject)))
}
return .oneOrMore(.init(one.compare(to: two, using: { r1, r2 in
@@ -120,18 +120,18 @@ extension _OptionalResourceBody where WrappedPrimaryResourceType: ResourceObject
}
}
public protocol _OptionalResourceBody {
associatedtype WrappedPrimaryResourceType: ResourceObjectType
var optionalResourceObject: [WrappedPrimaryResourceType]? { get }
public protocol TestableResourceBody {
associatedtype TestablePrimaryResourceType: ResourceObjectType
var testableResourceObject: [TestablePrimaryResourceType]? { get }
}
public protocol _OptionalResourceObjectType {
public protocol OptionalResourceObjectType {
associatedtype Wrapped: ResourceObjectType
var maybeValue: Wrapped? { get }
}
extension Optional: _OptionalResourceObjectType where Wrapped: ResourceObjectType {
extension Optional: OptionalResourceObjectType where Wrapped: ResourceObjectType {
public var maybeValue: Wrapped? {
switch self {
case .none:
@@ -142,16 +142,16 @@ extension Optional: _OptionalResourceObjectType where Wrapped: ResourceObjectTyp
}
}
extension ResourceObject: _OptionalResourceObjectType {
extension ResourceObject: OptionalResourceObjectType {
public var maybeValue: Self? { self }
}
extension ManyResourceBody: _OptionalResourceBody where PrimaryResource: ResourceObjectType {
public var optionalResourceObject: [PrimaryResource]? { values }
extension ManyResourceBody: TestableResourceBody where PrimaryResource: ResourceObjectType {
public var testableResourceObject: [PrimaryResource]? { values }
}
extension SingleResourceBody: _OptionalResourceBody where PrimaryResource: _OptionalResourceObjectType {
public typealias WrappedPrimaryResourceType = PrimaryResource.Wrapped
extension SingleResourceBody: TestableResourceBody where PrimaryResource: OptionalResourceObjectType {
public typealias TestablePrimaryResourceType = PrimaryResource.Wrapped
public var optionalResourceObject: [WrappedPrimaryResourceType]? { value.maybeValue.map { [$0] } }
public var testableResourceObject: [TestablePrimaryResourceType]? { value.maybeValue.map { [$0] } }
}
@@ -8,7 +8,7 @@
import JSONAPI
import Poly
public struct IncludesComparison: Equatable, PropertyComparable {
public struct IncludesComparison: Equatable, PropertyComparison {
public let comparisons: [ArrayElementComparison]
public init(_ comparisons: [ArrayElementComparison]) {
@@ -8,11 +8,11 @@
import JSONAPI
extension Relationships {
public func compare(to other: Self) -> [String: Comparison] {
public func compare(to other: Self) -> [String: BasicComparison] {
let mirror1 = Mirror(reflecting: self)
let mirror2 = Mirror(reflecting: other)
var comparisons = [String: Comparison]()
var comparisons = [String: BasicComparison]()
for child in mirror1.children {
guard let childLabel = child.label else { continue }
@@ -7,21 +7,21 @@
import JSONAPI
public struct ResourceObjectComparison: Equatable, PropertyComparable {
public typealias ComparisonHash = [String: Comparison]
public struct ResourceObjectComparison: Equatable, PropertyComparison {
public typealias ComparisonHash = [String: BasicComparison]
public let id: Comparison
public let id: BasicComparison
public let attributes: ComparisonHash
public let relationships: ComparisonHash
public let meta: Comparison
public let links: Comparison
public let meta: BasicComparison
public let links: BasicComparison
public init<T: ResourceObjectType>(_ one: T, _ two: T) {
id = Comparison(one.id.rawValue, two.id.rawValue)
id = BasicComparison(one.id.rawValue, two.id.rawValue)
attributes = one.attributes.compare(to: two.attributes)
relationships = one.relationships.compare(to: two.relationships)
meta = Comparison(one.meta, two.meta)
links = Comparison(one.links, two.links)
meta = BasicComparison(one.meta, two.meta)
links = BasicComparison(one.links, two.links)
}
public var differences: NamedDifferences {