58 lines
2.0 KiB
Racket
58 lines
2.0 KiB
Racket
#lang racket/base
|
|
(require rackunit
|
|
racket/class
|
|
(prefix-in srfi: srfi/19)
|
|
db/base
|
|
"../config.rkt")
|
|
|
|
(provide query:test)
|
|
|
|
(define vehicles-result
|
|
(rows-result
|
|
'(((name . "type")) ((name . "maker")) ((name . "model")))
|
|
`(#("car" "honda" "civic")
|
|
#("car" "ford" "focus")
|
|
#("car" "ford" "pinto")
|
|
#("bike" "giant" "boulder")
|
|
#("bike" "schwinn" ,sql-null))))
|
|
|
|
(define query:test
|
|
(test-suite "Query utilities"
|
|
(test-suite "group-rows"
|
|
(test-case "single grouping"
|
|
(check-equal?
|
|
(rows-result-rows (group-rows vehicles-result #:group '#("type")))
|
|
`(#("car" (#("honda" "civic")
|
|
#("ford" "focus")
|
|
#("ford" "pinto")))
|
|
#("bike" (#("giant" "boulder")
|
|
#("schwinn" ,sql-null))))))
|
|
(test-case "multiple groupings"
|
|
(check-equal?
|
|
(rows-result-rows
|
|
(group-rows vehicles-result #:group '(#("type") #("maker"))))
|
|
`(#("car" (#("honda" (#("civic")))
|
|
#("ford" (#("focus") #("pinto")))))
|
|
#("bike" (#("giant" (#("boulder")))
|
|
#("schwinn" ()))))))
|
|
(test-case "multiple groupings, preserve null rows"
|
|
(check-equal?
|
|
(rows-result-rows
|
|
(group-rows vehicles-result
|
|
#:group '(#("type") #("maker"))
|
|
#:group-mode '(preserve-null-rows)))
|
|
`(#("car" (#("honda" (#("civic")))
|
|
#("ford" (#("focus") #("pinto")))))
|
|
#("bike" (#("giant" (#("boulder")))
|
|
#("schwinn" (#(,sql-null))))))))
|
|
(test-case "multiple groupings, list"
|
|
(check-equal?
|
|
(rows-result-rows
|
|
(group-rows vehicles-result
|
|
#:group '(#("type") #("maker"))
|
|
#:group-mode '(list)))
|
|
`(#("car" (#("honda" ("civic"))
|
|
#("ford" ("focus" "pinto"))))
|
|
#("bike" (#("giant" ("boulder"))
|
|
#("schwinn" ())))))))))
|