Skip to content

Commit a49fd85

Browse files
committed
Regression tests for #1512
1 parent ac8c4ae commit a49fd85

File tree

1 file changed

+119
-3
lines changed

1 file changed

+119
-3
lines changed

Tests/GRDBTests/FetchableRecordDecodableTests.swift

Lines changed: 119 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,14 +263,130 @@ extension FetchableRecordDecodableTests {
263263

264264
extension FetchableRecordDecodableTests {
265265

266+
func testStructWithData() throws {
267+
struct StructWithData : FetchableRecord, Decodable {
268+
let data: Data
269+
}
270+
271+
let dbQueue = try makeDatabaseQueue()
272+
273+
do {
274+
let data = "foo".data(using: .utf8)
275+
276+
do {
277+
let value = try StructWithData(row: ["data": data])
278+
XCTAssertEqual(value.data, data)
279+
}
280+
281+
do {
282+
let value = try dbQueue.read {
283+
try StructWithData.fetchOne($0, sql: "SELECT ? AS data", arguments: [data])!
284+
}
285+
XCTAssertEqual(value.data, data)
286+
}
287+
}
288+
do {
289+
do {
290+
_ = try StructWithData(row: ["data": nil])
291+
XCTFail("Expected Error")
292+
} catch let error as RowDecodingError {
293+
switch error {
294+
case .valueMismatch:
295+
XCTAssertEqual(error.description, """
296+
could not decode Data from database value NULL - \
297+
column: "data", \
298+
column index: 0, \
299+
row: [data:NULL]
300+
""")
301+
default:
302+
XCTFail("Unexpected Error")
303+
}
304+
}
305+
306+
do {
307+
try dbQueue.read {
308+
_ = try StructWithData.fetchOne($0, sql: "SELECT NULL AS data")
309+
}
310+
XCTFail("Expected Error")
311+
} catch let error as RowDecodingError {
312+
switch error {
313+
case .valueMismatch:
314+
XCTAssertEqual(error.description, """
315+
could not decode Data from database value NULL - \
316+
column: "data", \
317+
column index: 0, \
318+
row: [data:NULL], \
319+
sql: `SELECT NULL AS data`, \
320+
arguments: []
321+
""")
322+
default:
323+
XCTFail("Unexpected Error")
324+
}
325+
}
326+
}
327+
}
328+
266329
func testStructWithDate() throws {
267330
struct StructWithDate : FetchableRecord, Decodable {
268331
let date: Date
269332
}
270333

271-
let date = Date()
272-
let value = try StructWithDate(row: ["date": date])
273-
XCTAssert(abs(value.date.timeIntervalSince(date)) < 0.001)
334+
let dbQueue = try makeDatabaseQueue()
335+
336+
do {
337+
let date = Date()
338+
339+
do {
340+
let value = try StructWithDate(row: ["date": date])
341+
XCTAssert(abs(value.date.timeIntervalSince(date)) < 0.001)
342+
}
343+
344+
do {
345+
let value = try dbQueue.read {
346+
try StructWithDate.fetchOne($0, sql: "SELECT ? AS date", arguments: [date])!
347+
}
348+
XCTAssert(abs(value.date.timeIntervalSince(date)) < 0.001)
349+
}
350+
}
351+
do {
352+
do {
353+
_ = try StructWithDate(row: ["date": nil])
354+
XCTFail("Expected Error")
355+
} catch let error as RowDecodingError {
356+
switch error {
357+
case .valueMismatch:
358+
XCTAssertEqual(error.description, """
359+
could not decode Date from database value NULL - \
360+
column: "date", \
361+
column index: 0, \
362+
row: [date:NULL]
363+
""")
364+
default:
365+
XCTFail("Unexpected Error")
366+
}
367+
}
368+
369+
do {
370+
try dbQueue.read {
371+
_ = try StructWithDate.fetchOne($0, sql: "SELECT NULL AS date")
372+
}
373+
XCTFail("Expected Error")
374+
} catch let error as RowDecodingError {
375+
switch error {
376+
case .valueMismatch:
377+
XCTAssertEqual(error.description, """
378+
could not decode Date from database value NULL - \
379+
column: "date", \
380+
column index: 0, \
381+
row: [date:NULL], \
382+
sql: `SELECT NULL AS date`, \
383+
arguments: []
384+
""")
385+
default:
386+
XCTFail("Unexpected Error")
387+
}
388+
}
389+
}
274390
}
275391

276392
func testStructWithURL() throws {

0 commit comments

Comments
 (0)