|
|
|
(ns com.owoga.frp.infrastructure-test
|
|
|
|
(:require [com.owoga.frp.infrastructure :as frp]
|
|
|
|
[clojure.test :refer [deftest is testing]]))
|
|
|
|
|
|
|
|
(deftest test-project
|
|
|
|
(testing "projection"
|
|
|
|
(let [Offer (frp/->BaseRelVar 'Offer (atom #{}) '())
|
|
|
|
OfferPrices (frp/project Offer [:price])]
|
|
|
|
(frp/load! Offer #{{:address "123 Fake St." :price 2e5}})
|
|
|
|
(is (= @OfferPrices #{{:price 2e5}})))))
|
|
|
|
|
|
|
|
(deftest test-insert!
|
|
|
|
(testing "insert!"
|
|
|
|
(let [Offer (frp/->BaseRelVar 'Offer (atom #{}) '())]
|
|
|
|
(frp/insert! Offer {:address "123 Fake St." :price 1.5e5})
|
|
|
|
(is (= @Offer #{{:address "123 Fake St." :price 1.5e5}})))))
|
|
|
|
|
|
|
|
(deftest test-defrelvar
|
|
|
|
(testing "failed constraint raises"
|
|
|
|
(let [Offer (frp/defrelvar Offer (fn [offers] (map #(> (:price %) 0) offers)))]
|
|
|
|
(is (thrown-with-msg?
|
|
|
|
Exception
|
|
|
|
#"Constraint Exception"
|
|
|
|
(frp/insert! Offer {:price -1})))))
|
|
|
|
(testing "passed constraint doesn't raise"
|
|
|
|
(let [Offer (frp/defrelvar Offer (fn [offers] (map #(> (:price %) 0) offers)))]
|
|
|
|
(frp/insert! Offer {:price 20})
|
|
|
|
(is (= @Offer #{{:price 20}})))))
|
|
|
|
|
|
|
|
(deftest test-extend
|
|
|
|
(testing "extend-"
|
|
|
|
(let [Offer (frp/->BaseRelVar 'Offer (atom #{}) '())]
|
|
|
|
(frp/load! Offer #{{:price 1e6}})
|
|
|
|
(frp/extend- Offer [:price-band (fn [e] (if (> (:price e) 1e6) :high :low))])
|
|
|
|
(is (= :low (-> @Offer first :price-band))))))
|