(ns recurse-test (:require #?(:cljs [cljs.test :as t :refer-macros [is are deftest testing]] :clj [clojure.test :as t :refer [is are deftest testing]]) [datascript.core :as d] [datascript.test :as test])) (def ^:private test-schema {:aka {:db/cardinality :db.cardinality/many} :friend {:db/cardinality :db.cardinality/many :db/valueType :db.type/ref}}) (def test-datoms (map #(apply d/datom %) [[1 :name "Petr"] [1 :aka "Devil"] [1 :aka "Tupen"] [2 :name "David"] [2 :aka "Davide"] [3 :name "Thomas"] [1 :friend 2] [2 :friend 3]])) (def friends-with-names {:db/id 1, :name "Petr", :friend [{:db/id 2, :name "David", :friend [{:db/id 3, :name "Thomas"}]}]}) (def friends-with-all-attrs {:db/id 1, :name "Petr", :aka ["Devil" "Tupen"], :friend [{:db/id 2, :name "David", :aka ["Davide"], :friend [{:db/id 3, :name "Thomas"}]}]}) (def test-db (d/init-db test-datoms test-schema)) (deftest test-wildcard-recursion-specified ; this fails ; wildcard prevents recursion (is (= (d/pull test-db '["*" {:friend 3}] 1) friends-with-all-attrs))) (deftest meta-test (is (= 1 1))) (deftest test-wildcard-recursion-unlimited ; this fails ; wildcard prevents recursion (is (= (d/pull test-db '["*" {:friend ...}] 1) friends-with-all-attrs) )) ; this works as expected (deftest test-normal-recursion-specified (is (= (d/pull test-db '[:db/id :name {:friend 3}] 1) friends-with-names))) ; works as expected (deftest test-normal-recursion-specified-all-attrs (is (= (d/pull test-db '[:db/id :name :aka {:friend 3}] 1) friends-with-all-attrs)))