;; This Source Code Form is subject to the terms of the Mozilla Public ;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. (ns datomish.transact-test #?(:cljs (:require-macros [datomish.pair-chan :refer [go-pair = !]]]) #?@(:cljs [[datomish.js-sqlite] [datomish.pair-chan] [datomish.test-macros :refer-macros [deftest-async deftest-db]] [datomish.node-tempfile :refer [tempfile]] [cljs.test :as t :refer-macros [is are deftest testing async]] [cljs.core.async :as a :refer [!]]])) #?(:clj (:import [clojure.lang ExceptionInfo])) #?(:clj (:import [datascript.db DB]))) #?(:cljs (def Throwable js/Error)) (defn- tempids [tx] (into {} (map (juxt (comp :idx first) second) (:tempids tx)))) (def test-schema [{:db/id (d/id-literal :db.part/user) :db/ident :x :db/unique :db.unique/identity :db/valueType :db.type/long :db.install/_attribute :db.part/db} {:db/id (d/id-literal :db.part/user) :db/ident :name :db/unique :db.unique/identity :db/valueType :db.type/string :db.install/_attribute :db.part/db} {:db/id (d/id-literal :db.part/user) :db/ident :y :db/cardinality :db.cardinality/many :db/valueType :db.type/long :db.install/_attribute :db.part/db} {:db/id (d/id-literal :db.part/user) :db/ident :aka :db/cardinality :db.cardinality/many :db/valueType :db.type/string :db.install/_attribute :db.part/db} {:db/id (d/id-literal :db.part/user) :db/ident :age :db/valueType :db.type/long :db.install/_attribute :db.part/db} {:db/id (d/id-literal :db.part/user) :db/ident :email :db/unique :db.unique/identity :db/valueType :db.type/string :db.install/_attribute :db.part/db} {:db/id (d/id-literal :db.part/user) :db/ident :spouse :db/unique :db.unique/value :db/valueType :db.type/string :db.install/_attribute :db.part/db} {:db/id (d/id-literal :db.part/user) :db/ident :friends :db/cardinality :db.cardinality/many :db/valueType :db.type/ref :db.install/_attribute :db.part/db} ]) (deftest-db test-overlapping-transacts conn (let [{tx0 :tx} ( [[id0 :email (str "@" %) (+ 3 % tx0) 0] [id0 :email (str "@" (inc %)) (+ 3 % tx0) 1]]) (range 0 (dec n)))) (filter #(not= :db/txInstant (second %)) (! c1 :token-1) (is (= :token-1 (! c2 :token-1) (is (= :token-1 ( (count xs) 0)) (is (> (count es) 0)) (is (= {:error :transact/connection-closed} (ex-data e)))))) (finally ;; Closing a closed connection is a no-op. (