Skip to content

Commit

Permalink
Tests added for issue #37 fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Truba committed Jul 30, 2020
1 parent 8ad6be2 commit 78b5d3f
Show file tree
Hide file tree
Showing 8 changed files with 128 additions and 5 deletions.
24 changes: 24 additions & 0 deletions Example/Japx.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@
E1F83D0D237D9A8C009F91CA /* Meta-NotAdded-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = E1F83D0A237D9A8B009F91CA /* Meta-NotAdded-JsonApi.json */; };
E1F83D0E237D9A8C009F91CA /* Meta-Added-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = E1F83D0B237D9A8C009F91CA /* Meta-Added-JsonApi.json */; };
E1F83D0F237D9A8C009F91CA /* Meta-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = E1F83D0C237D9A8C009F91CA /* Meta-Json.json */; };
E1FA0AB424D2A390000FD65B /* RelationshipList-Json.json in Resources */ = {isa = PBXBuildFile; fileRef = E1FA0AB324D2A390000FD65B /* RelationshipList-Json.json */; };
E1FA0AB624D2A3B7000FD65B /* RelationshipList-Is-Relationship-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = E1FA0AB524D2A3B7000FD65B /* RelationshipList-Is-Relationship-JsonApi.json */; };
E1FA0AB824D2A3D1000FD65B /* RelationshipList-Not-Relationship-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = E1FA0AB724D2A3D1000FD65B /* RelationshipList-Not-Relationship-JsonApi.json */; };
E1FA0ABC24D2A89D000FD65B /* RelationshipList-Broken-JsonApi.json in Resources */ = {isa = PBXBuildFile; fileRef = E1FA0ABB24D2A89D000FD65B /* RelationshipList-Broken-JsonApi.json */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -126,6 +130,10 @@
E1F83D0A237D9A8B009F91CA /* Meta-NotAdded-JsonApi.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "Meta-NotAdded-JsonApi.json"; sourceTree = "<group>"; };
E1F83D0B237D9A8C009F91CA /* Meta-Added-JsonApi.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "Meta-Added-JsonApi.json"; sourceTree = "<group>"; };
E1F83D0C237D9A8C009F91CA /* Meta-Json.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "Meta-Json.json"; sourceTree = "<group>"; };
E1FA0AB324D2A390000FD65B /* RelationshipList-Json.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "RelationshipList-Json.json"; sourceTree = "<group>"; };
E1FA0AB524D2A3B7000FD65B /* RelationshipList-Is-Relationship-JsonApi.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "RelationshipList-Is-Relationship-JsonApi.json"; sourceTree = "<group>"; };
E1FA0AB724D2A3D1000FD65B /* RelationshipList-Not-Relationship-JsonApi.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "RelationshipList-Not-Relationship-JsonApi.json"; sourceTree = "<group>"; };
E1FA0ABB24D2A89D000FD65B /* RelationshipList-Broken-JsonApi.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "RelationshipList-Broken-JsonApi.json"; sourceTree = "<group>"; };
E817D346E8E2BDDF0DC5F3F3 /* Pods_Japx_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Japx_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */

Expand Down Expand Up @@ -331,6 +339,7 @@
E18794EE2018ABA000E472C4 /* Encoding */ = {
isa = PBXGroup;
children = (
E1FA0AB024D2A2AE000FD65B /* RelationshipList */,
E1F83D09237D99A9009F91CA /* MetaParams */,
E187950D2018D76300E472C4 /* ExtraParams */,
E18795072018D76300E472C4 /* RecursivRelationships */,
Expand Down Expand Up @@ -426,6 +435,17 @@
path = MetaParams;
sourceTree = "<group>";
};
E1FA0AB024D2A2AE000FD65B /* RelationshipList */ = {
isa = PBXGroup;
children = (
E1FA0AB324D2A390000FD65B /* RelationshipList-Json.json */,
E1FA0ABB24D2A89D000FD65B /* RelationshipList-Broken-JsonApi.json */,
E1FA0AB524D2A3B7000FD65B /* RelationshipList-Is-Relationship-JsonApi.json */,
E1FA0AB724D2A3D1000FD65B /* RelationshipList-Not-Relationship-JsonApi.json */,
);
path = RelationshipList;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
Expand Down Expand Up @@ -520,16 +540,19 @@
2C5FA429202CA35D00399CC7 /* Images.xcassets in Resources */,
0A4CEF7721FF560400D3F0B8 /* RelationshipNoInclude-JsonApi.json in Resources */,
E1F83D0D237D9A8C009F91CA /* Meta-NotAdded-JsonApi.json in Resources */,
E1FA0AB824D2A3D1000FD65B /* RelationshipList-Not-Relationship-JsonApi.json in Resources */,
E18794FC2018AEC900E472C4 /* RecursivSample-JsonApi.json in Resources */,
0A57D7FD231119AC0009FBEB /* MissingRelationshipObjectNull-Json.json in Resources */,
E18795042018CA7100E472C4 /* MissingRelationship-JsonApi.json in Resources */,
E18795062018CA7100E472C4 /* ArticleExample-Json.json in Resources */,
0A30B5CE231111A60041F828 /* MissingRelationshipObjects-JsonApi.json in Resources */,
E18794F32018ABA000E472C4 /* ArticlePerson-Json.json in Resources */,
2C5FA42C202CA39500399CC7 /* Main.storyboard in Resources */,
E1FA0ABC24D2A89D000FD65B /* RelationshipList-Broken-JsonApi.json in Resources */,
E18795132018D76300E472C4 /* SimpleEncoding-Json.json in Resources */,
E1F83D0E237D9A8C009F91CA /* Meta-Added-JsonApi.json in Resources */,
E1F83D0F237D9A8C009F91CA /* Meta-Json.json in Resources */,
E1FA0AB624D2A3B7000FD65B /* RelationshipList-Is-Relationship-JsonApi.json in Resources */,
E18795102018D76300E472C4 /* RecursivRelationships-Json.json in Resources */,
0A6C2FF121FB3BD000D16186 /* EmptyRelationship-Json.json in Resources */,
0A57D7FF231119C10009FBEB /* MissingRelationshipObjectsEmpty-Json.json in Resources */,
Expand All @@ -539,6 +562,7 @@
0A30B5CA231111850041F828 /* MissingRelationshipObject-Json.json in Resources */,
E18795142018D76300E472C4 /* ExtraParams-Json.json in Resources */,
E18795122018D76300E472C4 /* SimpleEncoding-JsonApi.json in Resources */,
E1FA0AB424D2A390000FD65B /* RelationshipList-Json.json in Resources */,
E18795032018CA7100E472C4 /* MissingRelationship-Json.json in Resources */,
E18795052018CA7100E472C4 /* ArticleExample-JsonApi.json in Resources */,
E18794F42018ABA000E472C4 /* ArticlePerson-JsonApi.json in Resources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"data": {
"id": "1",
"type": "articles",
"attributes": {
"name": "My Article",
"likes": [],
"author": {
"id": "1",
"type": "authors"
}
},
"relationships": {}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"data": {
"id": "1",
"type": "articles",
"attributes": {
"name": "My Article",
},
"relationships": {
"likes": {
"data": []
},
"author": {
"data": {
"id": "1",
"type": "authors"
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"id": "1",
"type": "articles",
"name": "My Article",
"likes": [],
"author": {
"id": "1",
"type": "authors"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"data": {
"id": "1",
"type": "articles",
"attributes": {
"name": "My Article",
"likes": [],
},
"relationships": {
"author": {
"data": {
"id": "1",
"type": "authors"
}
}
}
}
}
31 changes: 31 additions & 0 deletions Example/Tests/Swift/EncoderTester.swift
Original file line number Diff line number Diff line change
Expand Up @@ -56,5 +56,36 @@ class EncoderTesterSpec: QuickSpec {
}

}

describe("Testing relationship list") {

it("Should auto infer relationships without the list") {
let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "RelationshipList-Json", containsEverethingFrom: "RelationshipList-Not-Relationship-JsonApi") {
return try! Japx.Encoder.encode(data: $0)
}
expect(correctlyParsed) == true
}

it("Should decode likes as attributes") {
let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "RelationshipList-Json", containsEverethingFrom: "RelationshipList-Not-Relationship-JsonApi") {
return try! Japx.Encoder.encode(data: $0, options: .init(relationshipList: "author"))
}
expect(correctlyParsed) == true
}

it("Should decode likes and author as attributes") {
let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "RelationshipList-Json", containsEverethingFrom: "RelationshipList-Broken-JsonApi") {
return try! Japx.Encoder.encode(data: $0, options: .init(relationshipList: ""))
}
expect(correctlyParsed) == true
}

it("Should decode likes as relationships") {
let correctlyParsed = AdditionalFunctions.does(jsonFromFileNamed: "RelationshipList-Json", containsEverethingFrom: "RelationshipList-Is-Relationship-JsonApi") {
return try! Japx.Encoder.encode(data: $0, options: .init(relationshipList: "author,likes"))
}
expect(correctlyParsed) == true
}
}
}
}
11 changes: 7 additions & 4 deletions Example/Tests/Utilities/AdditionalFunctions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,8 @@ public typealias ParsingPipelineCallback = (_ json: Data) -> (Any)
@objc public class AdditionalFunctions: NSObject {

@objc public static func does(jsonFromFileNamed: String, containsEverethingFrom otherJsonFromFile: String, afterParsingBlock block: ParsingPipelineCallback) -> Bool {
let path = Bundle.main.path(forResource: jsonFromFileNamed, ofType: "json")!
let pathOther = Bundle.main.path(forResource: otherJsonFromFile, ofType: "json")!
let data = try! Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
let dataOther = try! Data(contentsOf: URL(fileURLWithPath: pathOther), options: .mappedIfSafe)
let data = jsonData(from: jsonFromFileNamed)
let dataOther = jsonData(from: otherJsonFromFile)

let json = block(data)
let jsonOther = try! JSONSerialization.jsonObject(with: dataOther)
Expand All @@ -40,6 +38,11 @@ public typealias ParsingPipelineCallback = (_ json: Data) -> (Any)

assert(false, "You should not end up here")
}

@objc public static func jsonData(from jsonFromFileNamed: String) -> Data {
let path = Bundle.main.path(forResource: jsonFromFileNamed, ofType: "json")!
return try! Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
}

@objc public static func does(jsonParameters: [Parameters], containsEverethingFrom otherJson: [Parameters]) -> Bool {
guard otherJson.count == jsonParameters.count else { return false }
Expand Down
4 changes: 3 additions & 1 deletion Japx/Classes/Core/Japx.swift
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,12 @@ public extension Japx.Encoder {
/// Creates an instance with the specified properties.
///
/// - parameter includeMetaToCommonNamespce: Read more [here](includeMetaToCommonNamespce)
/// - parameter relationshipList: Read more [here](relationshipList)
///
/// - returns: The new `Japx.Decoder.Options` instance.
public init(includeMetaToCommonNamespce: Bool = false) {
public init(includeMetaToCommonNamespce: Bool = false, relationshipList: String? = nil) {
self.includeMetaToCommonNamespce = includeMetaToCommonNamespce
self.relationshipList = relationshipList
}
}
}
Expand Down

0 comments on commit 78b5d3f

Please sign in to comment.