Skip to content

Commit be25ddb

Browse files
committed
Merge branch 'main' of https://github.com/dblythy/Parse-Swift into main
2 parents 8e9630d + c1f3ca8 commit be25ddb

File tree

5 files changed

+88
-13
lines changed

5 files changed

+88
-13
lines changed

ParseSwift.xcodeproj/project.pbxproj

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,9 @@
385385
91678710259BC5D600BB5B4E /* ParseCloudTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916786EF259BC59600BB5B4E /* ParseCloudTests.swift */; };
386386
9167871A259BC5D600BB5B4E /* ParseCloudTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916786EF259BC59600BB5B4E /* ParseCloudTests.swift */; };
387387
9194657824F16E330070296B /* ParseACLTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9194657724F16E330070296B /* ParseACLTests.swift */; };
388+
91B40651267A66ED00B129CD /* ParseErrorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B40650267A66ED00B129CD /* ParseErrorTests.swift */; };
389+
91B40652267A66ED00B129CD /* ParseErrorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B40650267A66ED00B129CD /* ParseErrorTests.swift */; };
390+
91B40653267A66ED00B129CD /* ParseErrorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B40650267A66ED00B129CD /* ParseErrorTests.swift */; };
388391
91CB9537265966DF0043E5D6 /* ParseAnanlyticsCombineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CB9536265966DF0043E5D6 /* ParseAnanlyticsCombineTests.swift */; };
389392
91CB9538265966DF0043E5D6 /* ParseAnanlyticsCombineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CB9536265966DF0043E5D6 /* ParseAnanlyticsCombineTests.swift */; };
390393
91CB9539265966DF0043E5D6 /* ParseAnanlyticsCombineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CB9536265966DF0043E5D6 /* ParseAnanlyticsCombineTests.swift */; };
@@ -705,6 +708,7 @@
705708
916786E1259B7DDA00BB5B4E /* ParseCloud.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseCloud.swift; sourceTree = "<group>"; };
706709
916786EF259BC59600BB5B4E /* ParseCloudTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseCloudTests.swift; sourceTree = "<group>"; };
707710
9194657724F16E330070296B /* ParseACLTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseACLTests.swift; sourceTree = "<group>"; };
711+
91B40650267A66ED00B129CD /* ParseErrorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseErrorTests.swift; sourceTree = "<group>"; };
708712
91CB9536265966DF0043E5D6 /* ParseAnanlyticsCombineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseAnanlyticsCombineTests.swift; sourceTree = "<group>"; };
709713
F971F4F524DE381A006CB79B /* ParseEncoderExtraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseEncoderExtraTests.swift; sourceTree = "<group>"; };
710714
F97B45B424D9C6F200F4A88B /* ParseCoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParseCoding.swift; sourceTree = "<group>"; };
@@ -860,9 +864,9 @@
860864
70DFEA892618E77800F8EB4B /* InitializeSDKTests.swift */,
861865
4AA8076E1F794C1C008CD551 /* KeychainStoreTests.swift */,
862866
9194657724F16E330070296B /* ParseACLTests.swift */,
863-
7044C22C25C5E4E90011F6E7 /* ParseAnonymousCombineTests.swift */,
864867
70170A4D2656EBA50070C905 /* ParseAnalyticsTests.swift */,
865868
91CB9536265966DF0043E5D6 /* ParseAnanlyticsCombineTests.swift */,
869+
7044C22C25C5E4E90011F6E7 /* ParseAnonymousCombineTests.swift */,
866870
70A2D86A25B3ADB6001BEB7D /* ParseAnonymousTests.swift */,
867871
7044C24225C5EA360011F6E7 /* ParseAppleCombineTests.swift */,
868872
70C5502125B3D8F700B5DBC2 /* ParseAppleTests.swift */,
@@ -871,6 +875,7 @@
871875
916786EF259BC59600BB5B4E /* ParseCloudTests.swift */,
872876
7044C21F25C5E0160011F6E7 /* ParseConfigCombineTests.swift */,
873877
70D1BE0625BB2BF400A42E7C /* ParseConfigTests.swift */,
878+
91B40650267A66ED00B129CD /* ParseErrorTests.swift */,
874879
89899DB426045DC4002E2043 /* ParseFacebookCombineTests.swift */,
875880
89899CF32603CE9D002E2043 /* ParseFacebookTests.swift */,
876881
7044C1F825C5CFAB0011F6E7 /* ParseFileCombineTests.swift */,
@@ -1749,6 +1754,7 @@
17491754
70C5504625B40D5200B5DBC2 /* ParseSessionTests.swift in Sources */,
17501755
70110D5C2506ED0E0091CC1D /* ParseInstallationTests.swift in Sources */,
17511756
7016ED4025C4A25A00038648 /* ParseUserCombineTests.swift in Sources */,
1757+
91B40651267A66ED00B129CD /* ParseErrorTests.swift in Sources */,
17521758
705727B12593FF8800F0ADD5 /* ParseFileTests.swift in Sources */,
17531759
70BC0B33251903D1001556DB /* ParseGeoPointTests.swift in Sources */,
17541760
7003957625A0EE770052CB31 /* BatchUtilsTests.swift in Sources */,
@@ -1911,6 +1917,7 @@
19111917
70C5504825B40D5200B5DBC2 /* ParseSessionTests.swift in Sources */,
19121918
709B98572556ECAA00507778 /* ParseACLTests.swift in Sources */,
19131919
7016ED4225C4A25A00038648 /* ParseUserCombineTests.swift in Sources */,
1920+
91B40653267A66ED00B129CD /* ParseErrorTests.swift in Sources */,
19141921
705727BC2593FF8C00F0ADD5 /* ParseFileTests.swift in Sources */,
19151922
709B984F2556ECAA00507778 /* AnyCodableTests.swift in Sources */,
19161923
7003957825A0EE770052CB31 /* BatchUtilsTests.swift in Sources */,
@@ -1972,6 +1979,7 @@
19721979
70C5504725B40D5200B5DBC2 /* ParseSessionTests.swift in Sources */,
19731980
70F2E2BC254F283000B2EA5C /* ParseObjectTests.swift in Sources */,
19741981
7016ED4125C4A25A00038648 /* ParseUserCombineTests.swift in Sources */,
1982+
91B40652267A66ED00B129CD /* ParseErrorTests.swift in Sources */,
19751983
705727BB2593FF8B00F0ADD5 /* ParseFileTests.swift in Sources */,
19761984
70F2E2BD254F283000B2EA5C /* AnyDecodableTests.swift in Sources */,
19771985
7003957725A0EE770052CB31 /* BatchUtilsTests.swift in Sources */,

Sources/ParseSwift/API/URLSession+extensions.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,7 @@ extension URLSession {
3939
do {
4040
return try .success(mapper(responseData))
4141
} catch {
42-
if var error = try? ParseCoding.jsonDecoder().decode(ParseError.self, from: responseData) {
43-
if let json = try? JSONSerialization.jsonObject(with: responseData, options: []) as? [String: Any],
44-
let code = json["code"] as? Int {
45-
error.intCode = code
46-
}
42+
if let error = try? ParseCoding.jsonDecoder().decode(ParseError.self, from: responseData) {
4743
return .failure(error)
4844
}
4945
guard let parseError = error as? ParseError else {

Sources/ParseSwift/Types/ParseError.swift

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,25 @@ import Foundation
1212
An object with a Parse code and message.
1313
*/
1414
public struct ParseError: ParseType, Decodable, Swift.Error {
15+
/// The value representing the error from the Parse Server.
1516
public let code: Code
17+
/// The text representing the error from the Parse Server.
1618
public let message: String
17-
public var intCode: Int?
19+
/// An error value representing a custom error from the Parse Server.
20+
public let otherCode: Int?
1821
init(code: Code, message: String) {
1922
self.code = code
2023
self.message = message
21-
self.intCode = code.rawValue
24+
self.otherCode = code.rawValue
2225
}
2326

2427
/// A textual representation of this error.
2528
public var localizedDescription: String {
26-
return "ParseError code=\(code.rawValue) error=\(message)"
29+
if let otherCode = otherCode {
30+
return "ParseError code=\(code.rawValue) error=\(message) otherCode=\(otherCode)"
31+
} else {
32+
return "ParseError code=\(code.rawValue) error=\(message)"
33+
}
2734
}
2835

2936
enum CodingKeys: String, CodingKey {
@@ -355,9 +362,8 @@ public struct ParseError: ParseType, Decodable, Swift.Error {
355362
case xDomainRequest = 602
356363

357364
/**
358-
Error code indicating any other custom error sent from Parse Cloud
365+
Error code indicating any other custom error sent from the Parse Server.
359366
*/
360-
361367
case other
362368
}
363369
}
@@ -368,9 +374,10 @@ extension ParseError {
368374
let values = try decoder.container(keyedBy: CodingKeys.self)
369375
do {
370376
code = try values.decode(Code.self, forKey: .code)
371-
intCode = code.rawValue
377+
otherCode = nil
372378
} catch {
373379
code = .other
380+
otherCode = try values.decode(Int.self, forKey: .code)
374381
}
375382
message = try values.decode(String.self, forKey: .message)
376383
}

Tests/ParseSwiftTests/ParseCloudTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ class ParseCloudTests: XCTestCase { // swiftlint:disable:this type_body_length
374374
if let error = error as? ParseError {
375375
XCTAssertEqual(error.code, .other)
376376
XCTAssertEqual(error.message, "Error: Custom Error")
377-
XCTAssertEqual(error.intCode, 2000)
377+
XCTAssertEqual(error.otherCode, 2000)
378378
} else {
379379
XCTFail("Should have thrown ParseError")
380380
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//
2+
// ParseErrorTests.swift
3+
// ParseSwift
4+
//
5+
// Created by Corey Baker on 6/16/21.
6+
// Copyright © 2021 Parse Community. All rights reserved.
7+
//
8+
9+
import Foundation
10+
import XCTest
11+
@testable import ParseSwift
12+
13+
class ParseErrorTests: XCTestCase {
14+
15+
override func setUpWithError() throws {
16+
try super.setUpWithError()
17+
guard let url = URL(string: "http://localhost:1337/1") else {
18+
XCTFail("Should create valid URL")
19+
return
20+
}
21+
ParseSwift.initialize(applicationId: "applicationId",
22+
clientKey: "clientKey",
23+
masterKey: "masterKey",
24+
serverURL: url,
25+
testing: true)
26+
}
27+
28+
override func tearDownWithError() throws {
29+
try super.tearDownWithError()
30+
MockURLProtocol.removeAll()
31+
#if !os(Linux) && !os(Android)
32+
try KeychainStore.shared.deleteAll()
33+
#endif
34+
try ParseStorage.shared.deleteAll()
35+
}
36+
37+
func testEncode() throws {
38+
let code = -1
39+
let message = "testing ParseError"
40+
guard let encoded: Data = "{\"error\":\"\(message)\",\"code\":\(code)}".data(using: .utf8) else {
41+
XCTFail("Should have unwrapped")
42+
return
43+
}
44+
let decoded = try ParseCoding.jsonDecoder().decode(ParseError.self, from: encoded)
45+
XCTAssertEqual(decoded.code.rawValue, code)
46+
XCTAssertEqual(decoded.message, message)
47+
XCTAssertEqual(decoded.localizedDescription, "ParseError code=\(code) error=\(message)")
48+
}
49+
50+
func testEncodeOther() throws {
51+
let code = 2000
52+
let message = "testing ParseError"
53+
guard let encoded: Data = "{\"error\":\"\(message)\",\"code\":\(code)}".data(using: .utf8) else {
54+
XCTFail("Should have unwrapped")
55+
return
56+
}
57+
let decoded = try ParseCoding.jsonDecoder().decode(ParseError.self, from: encoded)
58+
XCTAssertEqual(decoded.code, .other)
59+
XCTAssertEqual(decoded.message, message)
60+
XCTAssertEqual(decoded.localizedDescription,
61+
"ParseError code=\(ParseError.Code.other.rawValue) error=\(message) otherCode=\(code)")
62+
XCTAssertEqual(decoded.otherCode, code)
63+
}
64+
}

0 commit comments

Comments
 (0)