Skip to content

Commit 42d23cc

Browse files
committed
Update SQLiteAdapterTests.swift
* Added new test cases * Some code optimization
1 parent 6b5129d commit 42d23cc

1 file changed

Lines changed: 72 additions & 15 deletions

File tree

Tests/SQLiteAdapterTests/SQLiteAdapterTests.swift

Lines changed: 72 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ final class SQLiteTests: XCTestCase {
5050
"\(SQLiteTests.testTable2.primaryKey)" INTEGER NOT NULL,
5151
"jsonData" BLOB NULL,
5252
"isDeleted" BOOLEAN DEFAULT 0 NOT NULL CHECK (isDeleted IN (0, 1)),
53-
"updated" DATE NOT NULL,
53+
"updated" DATETIME NOT NULL,
5454
PRIMARY KEY("\(SQLiteTests.testTable2.primaryKey)" AUTOINCREMENT)
5555
);
5656
"""
@@ -75,7 +75,7 @@ final class SQLiteTests: XCTestCase {
7575
"textColumn" TEXT NULL,
7676
"realColumn" DOUBLE NULL,
7777
"blobColumn" BLOB NULL,
78-
"dateColumn" DATE NULL,
78+
"dateColumn" DATETIME NULL,
7979
PRIMARY KEY("\(SQLiteTests.testTable3.primaryKey)" AUTOINCREMENT)
8080
);
8181
"""
@@ -222,7 +222,7 @@ final class SQLiteTests: XCTestCase {
222222
XCTAssertEqual(row![0].value as! Int, 1) // "rowid" INTEGER NOT NULL
223223
XCTAssertEqual(String(data: (row![1].value as! Data), encoding: .utf8), "jsonString") // "jsonData" BLOB NULL
224224
XCTAssertEqual(row![2].value as! Bool, false) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
225-
XCTAssertEqual((row![3].value as! Date).stripTime(), Date().stripTime()) // "updated" DATE NOT NULL
225+
XCTAssertEqual((row![3].value as! Date).stripTime(), Date().stripTime()) // "updated" DATETIME NOT NULL
226226
}
227227

228228
func testInsertRow_whenInvalidSqlStatement() {
@@ -236,6 +236,33 @@ final class SQLiteTests: XCTestCase {
236236
XCTAssertEqual(rowCount!, 0)
237237
}
238238

239+
func testInsertRow_whenInsertingMultipleRows() {
240+
try? SQLiteTests.sqlite?.createTable(sql: SQLiteTests.sqlCreateTestTable)
241+
242+
var rowCount = try? SQLiteTests.sqlite?.getRowCount(in: SQLiteTests.testTable)
243+
XCTAssertNotNil(rowCount)
244+
XCTAssertEqual(rowCount!, 0)
245+
246+
let sqlStatement = "INSERT INTO \(SQLiteTests.testTable.name) (searchId, sortId, json) VALUES (?, ?, ?), (?, ?, ?);"
247+
let numberOfInsertedRows = try? SQLiteTests.sqlite?.insertRow(sql: sqlStatement, params: ["searchId", 2, "jsonString_2", "searchId", 1, "jsonString_1"])
248+
XCTAssertNotNil(numberOfInsertedRows)
249+
XCTAssertEqual(numberOfInsertedRows!, 2)
250+
251+
rowCount = try? SQLiteTests.sqlite?.getRowCount(in: SQLiteTests.testTable)
252+
XCTAssertNotNil(rowCount)
253+
XCTAssertEqual(rowCount!, 2)
254+
255+
let rows = try? SQLiteTests.sqlite?.getAllRows(from: SQLiteTests.testTable)
256+
XCTAssertNotNil(rows)
257+
XCTAssertEqual(rows!.count, 2)
258+
let firstRow = rows!.first
259+
XCTAssertEqual(firstRow!.count, 4)
260+
XCTAssertEqual(firstRow![0].value as! Int, 1) // "id" INTEGER NOT NULL
261+
XCTAssertEqual(firstRow![1].value as! String, "searchId") // "searchId" CHAR(255) NOT NULL
262+
XCTAssertEqual(firstRow![2].value as! Int, 2) // "sortId" INT NOT NULL
263+
XCTAssertEqual(firstRow![3].value as! String, "jsonString_2") // "json" TEXT NOT NULL
264+
}
265+
239266
func testReplaceRow() {
240267
try? SQLiteTests.sqlite?.createTable(sql: SQLiteTests.sqlCreateTestTable)
241268

@@ -303,7 +330,7 @@ final class SQLiteTests: XCTestCase {
303330
XCTAssertEqual(row![0].value as! Int, 1) // "rowid" INTEGER NOT NULL
304331
XCTAssertEqual(row![1].value as? Data, nil) // "jsonData" BLOB NULL
305332
XCTAssertEqual(row![2].value as! Bool, true) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
306-
XCTAssertEqual((row![3].value as! Date).stripTime(), updateDate.stripTime()) // "updated" DATE NOT NULL
333+
XCTAssertEqual((row![3].value as! Date).stripTime(), updateDate.stripTime()) // "updated" DATETIME NOT NULL
307334
}
308335

309336
func testUpdateRow_whenInvalidId() {
@@ -337,7 +364,6 @@ final class SQLiteTests: XCTestCase {
337364
XCTAssertEqual(updateChanges, 2)
338365
}
339366

340-
sqlStatement = "SELECT * FROM \(SQLiteTests.testTable2.name)"
341367
let rows = try? SQLiteTests.sqlite?.getAllRows(from: SQLiteTests.testTable2)
342368
XCTAssertNotNil(rows)
343369
XCTAssertEqual(rows!.count, 2)
@@ -347,14 +373,14 @@ final class SQLiteTests: XCTestCase {
347373
XCTAssertEqual(firstRow[0].value as! Int, 1) // "rowid" INTEGER NOT NULL
348374
XCTAssertEqual(String(data: (firstRow[1].value as! Data), encoding: .utf8), "jsonString")
349375
XCTAssertEqual(firstRow[2].value as! Bool, true) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
350-
XCTAssertEqual((firstRow[3].value as! Date).stripTime(), Date().stripTime()) // "updated" DATE NOT NULL
376+
XCTAssertEqual((firstRow[3].value as! Date).stripTime(), Date().stripTime()) // "updated" DATETIME NOT NULL
351377

352378
let secondRow = rows![1]
353379
XCTAssertEqual(secondRow.count, 4)
354380
XCTAssertEqual(secondRow[0].value as! Int, 2) // "rowid" INTEGER NOT NULL
355381
XCTAssertEqual(String(data: (secondRow[1].value as! Data), encoding: .utf8), "jsonString_1")
356382
XCTAssertEqual(secondRow[2].value as! Bool, true) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
357-
XCTAssertEqual((secondRow[3].value as! Date).stripTime(), Date().stripTime()) // "updated" DATE NOT NULL
383+
XCTAssertEqual((secondRow[3].value as! Date).stripTime(), Date().stripTime()) // "updated" DATETIME NOT NULL
358384
}
359385

360386
func testDeleteRow() {
@@ -520,7 +546,7 @@ final class SQLiteTests: XCTestCase {
520546
XCTAssertEqual(firstRow[0].value as! Int, 1) // "rowid" INTEGER NOT NULL
521547
XCTAssertEqual(firstRow[1].value as? Data, nil) // "jsonData" BLOB NULL
522548
XCTAssertEqual(firstRow[2].value as! Bool, false) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
523-
XCTAssertEqual((firstRow[3].value as! Date).stripTime(), Date().stripTime()) // "updated" DATE NOT NULL
549+
XCTAssertEqual((firstRow[3].value as! Date).stripTime(), Date().stripTime()) // "updated" DATETIME NOT NULL
524550
} else {
525551
XCTFail()
526552
}
@@ -532,8 +558,7 @@ final class SQLiteTests: XCTestCase {
532558
let _ = try? SQLiteTests.sqlite?.insertRow(sql: sqlStatement)
533559
let _ = try? SQLiteTests.sqlite?.insertRow(sql: sqlStatement)
534560

535-
sqlStatement = "SELECT * FROM \(SQLiteTests.testTable3.name)"
536-
rows = try? SQLiteTests.sqlite?.getRow(from: SQLiteTests.testTable3, sql: sqlStatement)
561+
rows = try? SQLiteTests.sqlite?.getAllRows(from: SQLiteTests.testTable3)
537562
XCTAssertNotNil(rows)
538563
XCTAssertEqual(rows!.count, 2)
539564
if let firstRow = rows!.first {
@@ -544,7 +569,7 @@ final class SQLiteTests: XCTestCase {
544569
XCTAssertEqual(firstRow[3].value as? String, nil) // "textColumn" TEXT NULL
545570
XCTAssertEqual(firstRow[4].value as? Double, nil) // "realColumn" DOUBLE NULL
546571
XCTAssertEqual(firstRow[5].value as? Data, nil) // "blobColumn" BLOB NULL
547-
XCTAssertEqual(firstRow[6].value as? Date, nil) // "dateColumn" DATE NULL
572+
XCTAssertEqual(firstRow[6].value as? Date, nil) // "dateColumn" DATETIME NULL
548573
} else {
549574
XCTFail()
550575
}
@@ -565,7 +590,7 @@ final class SQLiteTests: XCTestCase {
565590
XCTAssertEqual(rows!.count, 2)
566591

567592
let firstRow = rows![0]
568-
XCTAssertEqual(firstRow.count, 3)
593+
XCTAssertEqual(firstRow.count, 3) // despite the fact that testTable contains 4 columns, the resulting table of this query contains 3 columns (without searchId)
569594
XCTAssertEqual(firstRow[0].value as! Int, 1) // "id" INTEGER NOT NULL
570595
XCTAssertEqual(firstRow[1].value as! Int, 1) // "sortId" INT NOT NULL
571596
XCTAssertEqual(firstRow[2].value as! String, "jsonString_1") // "json" TEXT NOT NULL
@@ -647,7 +672,7 @@ final class SQLiteTests: XCTestCase {
647672
XCTAssertEqual(row![0].value as! Int, 2) // "rowid" INTEGER NOT NULL
648673
XCTAssertEqual(String(data: (row![1].value as! Data), encoding: .utf8), "jsonString_1") // "jsonData" BLOB NULL
649674
XCTAssertEqual(row![2].value as! Bool, false) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
650-
XCTAssertEqual((row![3].value as! Date).stripTime(), Date().stripTime()) // "updated" DATE NOT NULL
675+
XCTAssertEqual((row![3].value as! Date).stripTime(), Date().stripTime()) // "updated" DATETIME NOT NULL
651676
}
652677

653678
func testGetByID_whenInvalidId() {
@@ -661,6 +686,40 @@ final class SQLiteTests: XCTestCase {
661686
XCTAssertNil(row)
662687
}
663688

689+
func testGetByID_whenUsingDate() {
690+
try? SQLiteTests.sqlite?.createTable(sql: SQLiteTests.sqlCreateTestTable3)
691+
692+
// Insert in date format
693+
let sqlStatement = "INSERT INTO \(SQLiteTests.testTable3.name) (dateColumn) VALUES (?);"
694+
let nowDate = Date()
695+
let _ = try? SQLiteTests.sqlite?.insertRow(sql: sqlStatement, params: [nowDate])
696+
697+
let lastInsertId = SQLiteTests.sqlite?.getLastInsertID() // should be 1
698+
XCTAssertNotNil(lastInsertId)
699+
let row = try? SQLiteTests.sqlite?.getByID(from: SQLiteTests.testTable3, id: lastInsertId!)
700+
XCTAssertNotNil(row)
701+
XCTAssertEqual(row!.count, SQLiteTests.testTable3.columns.count) // should be 7
702+
XCTAssertEqual(row![0].value as! Int, lastInsertId!) // "id" INTEGER NOT NULL
703+
XCTAssertEqual((row![6].value as! Date).description, nowDate.description) // "dateColumn" DATETIME NULL
704+
}
705+
706+
func testGetByID_whenUsingTimeInterval() {
707+
try? SQLiteTests.sqlite?.createTable(sql: SQLiteTests.sqlCreateTestTable3)
708+
709+
// Insert in time interval format
710+
let sqlStatement = "INSERT INTO \(SQLiteTests.testTable3.name) (dateColumn) VALUES (?);"
711+
let secondsStamp = Int(Date().timeIntervalSince1970)
712+
let _ = try? SQLiteTests.sqlite?.insertRow(sql: sqlStatement, params: [secondsStamp])
713+
714+
let lastInsertId = SQLiteTests.sqlite?.getLastInsertID() // should be 1
715+
XCTAssertNotNil(lastInsertId)
716+
let row = try? SQLiteTests.sqlite?.getByID(from: SQLiteTests.testTable3, id: lastInsertId!)
717+
XCTAssertNotNil(row)
718+
XCTAssertEqual(row!.count, SQLiteTests.testTable3.columns.count) // should be 7
719+
XCTAssertEqual(row![0].value as! Int, lastInsertId!) // "id" INTEGER NOT NULL
720+
XCTAssertEqual(Int((row![6].value as! Date).timeIntervalSince1970), secondsStamp) // "dateColumn" DATETIME NULL
721+
}
722+
664723
func testGetLastRow() {
665724
try? SQLiteTests.sqlite?.createTable(sql: SQLiteTests.sqlCreateTestTable)
666725

@@ -787,5 +846,3 @@ extension Date {
787846
return date!
788847
}
789848
}
790-
791-

0 commit comments

Comments
 (0)