mirror of
https://github.com/encounter/JSONAPI.git
synced 2026-03-30 11:18:38 -07:00
rename some of the new public protocols in JSONAPITesting
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user