@@ -12,6 +12,19 @@ import XCTest
1212
1313class ParseQueryTests : XCTestCase { // swiftlint:disable:this type_body_length
1414
15+ enum QueryTestError : Error , CustomStringConvertible {
16+
17+ case couldNotDecodeAsString
18+
19+ var description : String {
20+ switch self {
21+ case . couldNotDecodeAsString:
22+ return " Could not decode to String "
23+ }
24+ }
25+
26+ }
27+
1528 struct GameScore : ParseObject , ParseQueryScorable {
1629 //: These are required by ParseObject
1730 var objectId : String ?
@@ -77,6 +90,14 @@ class ParseQueryTests: XCTestCase { // swiftlint:disable:this type_body_length
7790 try await ParseStorage . shared. deleteAll ( )
7891 }
7992
93+ func encodeDoubleAsString( _ double: Double ) throws -> String {
94+ let encodedDouble = try ParseCoding . jsonEncoder ( ) . encode ( double)
95+ guard let decodedDouble = String ( data: encodedDouble, encoding: . utf8) else {
96+ throw QueryTestError . couldNotDecodeAsString
97+ }
98+ return decodedDouble
99+ }
100+
80101 // MARK: Initialization
81102 func testConstructors( ) {
82103 let query = Query < GameScore > ( )
@@ -2934,23 +2955,35 @@ class ParseQueryTests: XCTestCase { // swiftlint:disable:this type_body_length
29342955
29352956 #if !os(Linux) && !os(Android) && !os(Windows)
29362957 func testWhereKeyWithinPolygonPoints( ) throws {
2958+ let latitude1 = 10.1
2959+ let longitude1 = 20.1
2960+ let latitude2 = 20.1
2961+ let longitude2 = 30.1
2962+ let latitude3 = 30.1
2963+ let longitude3 = 40.1
29372964 // swiftlint:disable:next line_length
2938- let expected = " { \" yolo \" :{ \" $geoWithin \" :{ \" $polygon \" :[{ \" __type \" : \" GeoPoint \" , \" latitude \" :10.1 , \" longitude \" :20.100000000000001 },{ \" __type \" : \" GeoPoint \" , \" latitude \" :20.100000000000001 , \" longitude \" :30.100000000000001 },{ \" __type \" : \" GeoPoint \" , \" latitude \" :30.100000000000001 , \" longitude \" :40.100000000000001 }]}}} "
2939- let geoPoint1 = try ParseGeoPoint ( latitude: 10.1 , longitude: 20.1 )
2940- let geoPoint2 = try ParseGeoPoint ( latitude: 20.1 , longitude: 30.1 )
2941- let geoPoint3 = try ParseGeoPoint ( latitude: 30.1 , longitude: 40.1 )
2965+ let expected = " { \" yolo \" :{ \" $geoWithin \" :{ \" $polygon \" :[{ \" __type \" : \" GeoPoint \" , \" latitude \" : \( try encodeDoubleAsString ( latitude1 ) ) , \" longitude \" : \( try encodeDoubleAsString ( longitude1 ) ) },{ \" __type \" : \" GeoPoint \" , \" latitude \" : \( try encodeDoubleAsString ( latitude2 ) ) , \" longitude \" : \( try encodeDoubleAsString ( longitude2 ) ) },{ \" __type \" : \" GeoPoint \" , \" latitude \" : \( try encodeDoubleAsString ( latitude3 ) ) , \" longitude \" : \( try encodeDoubleAsString ( longitude3 ) ) }]}}} "
2966+ let geoPoint1 = try ParseGeoPoint ( latitude: latitude1 , longitude: longitude1 )
2967+ let geoPoint2 = try ParseGeoPoint ( latitude: latitude2 , longitude: longitude2 )
2968+ let geoPoint3 = try ParseGeoPoint ( latitude: latitude3 , longitude: longitude3 )
29422969 let polygon = [ geoPoint1, geoPoint2, geoPoint3]
29432970 let constraint = withinPolygon ( key: " yolo " , points: polygon)
29442971 let query = GameScore . query ( constraint)
29452972 XCTAssertEqual ( query. where. description, expected)
29462973 }
29472974
29482975 func testWhereKeyWithinPolygon( ) throws {
2976+ let latitude1 = 10.1
2977+ let longitude1 = 20.1
2978+ let latitude2 = 20.1
2979+ let longitude2 = 30.1
2980+ let latitude3 = 30.1
2981+ let longitude3 = 40.1
29492982 // swiftlint:disable:next line_length
2950- let expected = " { \" yolo \" :{ \" $geoWithin \" :{ \" $polygon \" :{ \" __type \" : \" Polygon \" , \" coordinates \" :[[20.100000000000001,10.1 ],[30.100000000000001,20.100000000000001 ],[40.100000000000001,30.100000000000001 ]]}}}} "
2951- let geoPoint1 = try ParseGeoPoint ( latitude: 10.1 , longitude: 20.1 )
2952- let geoPoint2 = try ParseGeoPoint ( latitude: 20.1 , longitude: 30.1 )
2953- let geoPoint3 = try ParseGeoPoint ( latitude: 30.1 , longitude: 40.1 )
2983+ let expected = " { \" yolo \" :{ \" $geoWithin \" :{ \" $polygon \" :{ \" __type \" : \" Polygon \" , \" coordinates \" :[[ \( try encodeDoubleAsString ( longitude1 ) ) , \( try encodeDoubleAsString ( latitude1 ) ) ],[ \( try encodeDoubleAsString ( longitude2 ) ) , \( try encodeDoubleAsString ( latitude2 ) ) ],[ \( try encodeDoubleAsString ( longitude3 ) ) , \( try encodeDoubleAsString ( latitude3 ) ) ]]}}}} "
2984+ let geoPoint1 = try ParseGeoPoint ( latitude: latitude1 , longitude: longitude1 )
2985+ let geoPoint2 = try ParseGeoPoint ( latitude: latitude2 , longitude: longitude2 )
2986+ let geoPoint3 = try ParseGeoPoint ( latitude: latitude3 , longitude: longitude3 )
29542987 let polygon = try ParsePolygon ( geoPoint1, geoPoint2, geoPoint3)
29552988 let constraint = withinPolygon ( key: " yolo " , polygon: polygon)
29562989 let query = GameScore . query ( constraint)
0 commit comments