mirror of
https://github.com/nim-lang/Nim.git
synced 2026-05-16 10:14:31 +00:00
84 lines
2.5 KiB
Nim
84 lines
2.5 KiB
Nim
# Tests the backend code.
|
|
|
|
import backend, db_sqlite, strutils, times
|
|
|
|
|
|
proc showPagedResults(conn: TDbConn; params: TPagedParams) =
|
|
## Shows the contents of the database in pages of specified size.
|
|
##
|
|
## Hmm... I guess this is more of a debug proc which should be moved outside,
|
|
## or to a commandline interface (hint).
|
|
var
|
|
page = 0'i64
|
|
rows = conn.getPagedTodos(params)
|
|
|
|
while rows.len > 0:
|
|
echo("page " & $page)
|
|
for row in rows:
|
|
echo("row id:$1, text:$2, priority:$3, done:$4, date:$5" % [$row.getId,
|
|
$row.text, $row.priority, $row.isDone,
|
|
$row.getModificationDate])
|
|
# Query the database for the next page or quit.
|
|
if params.pageSize > 0:
|
|
page = page + 1
|
|
rows = conn.getPagedTodos(params, page)
|
|
else:
|
|
break
|
|
|
|
|
|
proc dumTest() =
|
|
let conn = openDatabase("todo.sqlite3")
|
|
try:
|
|
let numTodos = conn.getNumEntries
|
|
echo("Current database contains " & $numTodos & " todo items.")
|
|
if numTodos < 10:
|
|
# Fill some dummy rows if there are not many entries yet.
|
|
discard conn.addTodo(3, "Filler1")
|
|
discard conn.addTodo(4, "Filler2")
|
|
|
|
var todo = conn.addTodo(2, "Testing")
|
|
echo("New todo added with id " & $todo.getId)
|
|
|
|
# Try changing it and updating the database.
|
|
var clonedTodo = conn.getTodo(todo.getId)[]
|
|
assert(clonedTodo.text == todo.text, "Should be equal")
|
|
todo.text = "Updated!"
|
|
todo.priority = 7
|
|
todo.isDone = true
|
|
if todo.save(conn):
|
|
echo("Updated priority $1, done $2" % [$todo.priority, $todo.isDone])
|
|
else:
|
|
assert(false, "Uh oh, I wasn't expecting that!")
|
|
|
|
# Verify our cloned copy is different but can be updated.
|
|
assert(clonedTodo.text != todo.text, "Should be different")
|
|
discard clonedTodo.update(conn)
|
|
assert(clonedTodo.text == todo.text, "Should be equal")
|
|
|
|
var params: TPagedParams
|
|
params.initDefaults
|
|
conn.showPagedResults(params)
|
|
conn.deleteTodo(todo.getId)
|
|
echo("Deleted rows for id 3? ")
|
|
let res = conn.deleteTodo(todo.getId)
|
|
echo("Deleted rows for id 3? " & $res)
|
|
if todo.update(conn):
|
|
echo("Later priority $1, done $2" % [$todo.priority, $todo.isDone])
|
|
else:
|
|
echo("Can't update object $1 from db!" % $todo.getId)
|
|
|
|
# Try to list content in a different way.
|
|
params.pageSize = 5
|
|
params.priorityAscending = true
|
|
params.dateAscending = true
|
|
params.showChecked = true
|
|
conn.showPagedResults(params)
|
|
finally:
|
|
conn.close
|
|
echo("Database closed")
|
|
|
|
|
|
# Code that will be run only on the commandline.
|
|
when isMainModule:
|
|
dumTest()
|