Skip to content

Commit

Permalink
Kampbell fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
danielsz committed Jan 12, 2018
1 parent 3ed477c commit 0e87cd0
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 16 deletions.
2 changes: 1 addition & 1 deletion project.clj
Expand Up @@ -31,7 +31,7 @@
[com.taoensso/sente "1.8.1"]
[org.danielsz/etsy "0.1.2"]
[org.danielsz/benjamin "0.1.0"]
[org.danielsz/kampbell "0.1.0"]
[org.danielsz/kampbell "0.1.1"]
[org.danielsz/maarschalk "0.1.0"]
[riemann-clojure-client "0.4.5"]
[compojure "1.4.0"]
Expand Down
7 changes: 3 additions & 4 deletions src/system/components/kampbell.clj
@@ -1,15 +1,14 @@
(ns system.components.kampbell
(:require [com.stuartsierra.component :as component]
[lang-utils.core :refer [seek ∘]]
[kampbell.core :as k]))
[kampbell.core :as k]
[clojure.set :refer [union]]))

(defrecord Kampbell [entities equality-specs]
component/Lifecycle
(start [component]
(when equality-specs
(if (sequential? equality-specs)
(alter-var-root #'k/equality-specs concat equality-specs)
(alter-var-root #'k/equality-specs conj equality-specs)))
(alter-var-root #'k/equality-specs union equality-specs))
(when entities
(when-let [db (seek ( :store val) component)]
(k/seed-db (:store (val db)) entities)))
Expand Down
33 changes: 22 additions & 11 deletions test/system/components/kampbell_test.clj
Expand Up @@ -40,30 +40,41 @@
;; register as a one-time callback
(use-fixtures :once once-fixture)

(s/def ::name string?)
(s/def ::email (s/and string? #(re-matches #"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,63}" %)))
(s/def ::user (s/keys :req [::name
::email]))
(s/def :domain.user/name string?)
(s/def :domain.user/email (s/and string? #(re-matches #"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,63}" %)))
(s/def :domain/user (s/keys :req [:domain.user/name
:domain.user/email]))

(def good-input #:domain.user{:name "Daniel Szmulewicz"
:email "daniel@szmulewicz.com"})

(def bad-input {:name "Daniel Szmulewicz"
:email "daniel@szmulewicz.com"})

(defn save-user [store v]
(let [v (assoc v :created_at (Instant/now))]
(<!! (k/save-entity store ::user v))))
(let [v (assoc v :domain/made_at (Instant/now))]
(<!! (k/save-entity store :domain/user v))))

(defn get-users [store]
(<!! (k/get-coll store "users")))

(def daniel #::{:name "Daniel Szmulewicz"
:email "daniel@szmulewicz.com"})

(deftest Kampbell
(let [system (-> (component/system-map
:db (konserve/new-konserve :type :filestore :path *db-path* :serializer (m/fressian-serializer))
:kampbell (component/using (kampbell/new-kampbell :equality-specs [:made_at] :entities ["users"]) [:db]))
:kampbell (component/using (kampbell/new-kampbell :equality-specs #{:domain/made_at} :entities #{"users"}) [:db]))
component/start)
db (:store (:db system))]
(is (some? db))
(is (= #{["users"]} (k/list-collections db)))
(is (contains? kampbell.core/equality-specs :created_at))
(is (contains? kampbell.core/equality-specs :domain/made_at))
(is (empty? (get-users db)))
(save-user db daniel)
(save-user db good-input)
(is (not (empty? (get-users db))))
(is (= 1 (count (get-users db))))
(save-user db good-input)
(is (= 1 (count (get-users db))))
(is (thrown-with-msg? clojure.lang.ExceptionInfo #"Invalid input" (save-user db bad-input)))
(save-user db (assoc good-input :domain.user/name "Alan Kay"))
(is (= 2 (count (get-users db))))
(component/stop system)))

0 comments on commit 0e87cd0

Please sign in to comment.