๐Ÿ“ฆ XVincentX / sql-generator-clj

๐Ÿ“„ generatesql_test.clj ยท 28 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28(ns generatesql-test (:require [clojure.test :refer [deftest is]]
                                    [app.generate-sql :refer [generate-sql]]))

(deftest generate-sql-fn
  (let [fields {1 :id 2 :name 3 :date_joined 4 :age}]
    (is (= "SELECT * FROM data WHERE date_joined IS NULL"
           (generate-sql :postgres fields {:where [:= [:field 3] nil]})))
    (is (= "SELECT * FROM data WHERE age > 35"
           (generate-sql :postgres fields {:where [:> [:field 4] 35]})))
    (is (= "SELECT * FROM data WHERE (id < 5) AND (name = 'joe')"
           (generate-sql :postgres fields {:where [:and [:< [:field 1] 5] [:= [:field 2] "joe"]]})))
    (is (= "SELECT * FROM data WHERE (date_joined <> '2015-11-01') OR (id = 456)"
           (generate-sql :postgres fields {:where [:or [:!= [:field 3] "2015-11-01"] [:= [:field 1] 456]]})))
    (is (= "SELECT * FROM data WHERE (date_joined IS NOT NULL) AND ((age > 25) OR (name = 'Jerry'))"
           (generate-sql :postgres fields {:where [:and [:!= [:field 3] nil] [:or [">" [:field 4] 25] [:= [:field 2] "Jerry"]]]})))
    (is (= "SELECT * FROM data WHERE NOT ((date_joined IS NOT NULL) AND ((age > 25) OR (name = 'Jerry')))"
           (generate-sql :postgres fields {:where [:not [:and [:!= [:field 3] nil] [:or [">" [:field 4] 25] [:= [:field 2] "Jerry"]]]]})))
    (is (= "SELECT * FROM data WHERE date_joined IN (25,26,27)"
           (generate-sql :postgres fields {:where [:= [:field 3] 25 26 27]})))
    (is (= "SELECT * FROM data WHERE name = 'cam'"
           (generate-sql :postgres fields {:where [:= [:field 2] "cam"]})))
    (is (= "SELECT * FROM data WHERE name = 'cam' LIMIT 10"
           (generate-sql :mysql fields {:where [:= [:field 2] "cam"], :limit 10})))
    (is (= "SELECT * FROM data LIMIT 20"
           (generate-sql :postgres fields {:limit 20})))
    (is (= "SELECT TOP 20 * FROM data"
           (generate-sql :sqlserver fields {:limit 20})))))