Skip to content

Instantly share code, notes, and snippets.

@stevebuik
Last active August 29, 2015 14:00
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stevebuik/7a8b4a8bc63cec2a6f40 to your computer and use it in GitHub Desktop.
Save stevebuik/7a8b4a8bc63cec2a6f40 to your computer and use it in GitHub Desktop.
Database function test case
(ns scratch.db-fns-test-case
(:require
[datomic.api :refer (q db) :as d]))
(def test-state (atom
{:db-str "datomic:free://localhost:4334/somedb"
;:db-str"datomic:mem://test"
}))
(swap! test-state
(fn [{:keys [db-str] :as ts}]
(when (.contains db-str "datomic:mem")
(d/create-database db-str))
(assoc ts :connection (d/connect db-str))))
(let [conn (:connection @test-state)]
(d/transact conn
[{:db/ident :user/next-id
:db/valueType :db.type/long
:db/id #db/id[:db.part/db]
:db/cardinality :db.cardinality/one
:db.install/_attribute :db.part/db
:db/noHistory true}])
(d/transact conn
[{:db/ident :user/order-number-sequence
:user/next-id 10000 ; this is the first order number
:db/id #db/id[:db.part/user -1000]}])
(d/transact conn
[{:db/id (d/tempid :db.part/user)
:db/ident :user/inc
:db/fn (d/function
'{:lang "clojure"
:params [db eid]
:code "(let [s (d/entity db eid)]
[{:db/id (:db/id s)
:user/next-id (inc (:user/next-id s))}])"})}])
(let [s (d/touch (d/entity (d/db conn) :user/order-number-sequence))
{:keys [db-after]} @(d/transact conn [[:user/inc (:db/id s)]])
s-after-inc (d/entity db-after :user/order-number-sequence)]
(assert (= 10001 (:user/next-id s-after-inc)) "next-id shoudl be incremented"))
:done)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment