Skip to content

Commit 659afea

Browse files
authored
fix(DataStore): Support all Temporal types in predicates (#513)
1 parent ea2cb5b commit 659afea

File tree

2 files changed

+36
-25
lines changed

2 files changed

+36
-25
lines changed

AmplifyPlugins/Core/AWSPluginsCore/Model/Support/QueryPredicate+GraphQL.swift

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -134,31 +134,26 @@ extension QueryOperator {
134134

135135
extension Persistable {
136136
internal func graphQLValue() -> Any {
137-
let value = self
138-
139-
if let value = value as? Bool {
140-
return value
141-
}
142-
143-
if let value = value as? Temporal.Date {
144-
return value.iso8601String
145-
}
146-
147-
if let value = value as? Double {
148-
return Decimal(value)
149-
}
150-
151-
if let value = value as? Int {
152-
return value
153-
}
154-
155-
if let value = value as? String {
156-
return value
137+
switch self {
138+
case is Bool:
139+
return self
140+
case let double as Double:
141+
return Decimal(double)
142+
case is Int:
143+
return self
144+
case is String:
145+
return self
146+
case let temporalDate as Temporal.Date:
147+
return temporalDate.iso8601String
148+
case let temporalDateTime as Temporal.DateTime:
149+
return temporalDateTime.iso8601String
150+
case let temporalTime as Temporal.Time:
151+
return temporalTime.iso8601String
152+
default:
153+
preconditionFailure("""
154+
Value \(String(describing: self)) of type \(String(describing: type(of: self))) \
155+
is not a compatible type.
156+
""")
157157
}
158-
159-
preconditionFailure("""
160-
Value \(String(describing: value)) of type \(String(describing: type(of: value)))
161-
is not a compatible type.
162-
""")
163158
}
164159
}

AmplifyPlugins/Core/AWSPluginsCoreTests/Model/Support/QueryPredicateGraphQLTests.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,20 @@ class QueryPredicateGraphQLTests: XCTestCase {
176176

177177
XCTAssert(titleFilter["beginsWith"] as? String == "Title")
178178
}
179+
180+
func testSupportedPredicateSupportsDate() throws {
181+
let date = try Temporal.Date(iso8601String: "2019-11-23")
182+
XCTAssertNotNil(Post.keys.createdAt == date)
183+
}
184+
185+
func testSupportedPredicateSupportsDateTime() throws {
186+
let dateTime = try Temporal.DateTime(iso8601String: "2019-11-23T02:06:50.689Z")
187+
XCTAssertNotNil(Post.keys.createdAt == dateTime)
188+
}
189+
190+
func testSupportedPredicateSupportsTime() throws {
191+
let time = try Temporal.Time(iso8601String: "02:06:50.689")
192+
XCTAssertNotNil(Post.keys.createdAt == time)
193+
}
194+
179195
}

0 commit comments

Comments
 (0)