mirror of
https://github.com/metosin/reitit.git
synced 2025-12-17 00:11:11 +00:00
108 lines
4.1 KiB
Clojure
108 lines
4.1 KiB
Clojure
(ns reitit.frontend.controllers-test
|
|
(:require [clojure.test :refer [deftest testing is are]]
|
|
[reitit.frontend.controllers :as rfc]))
|
|
|
|
(deftest apply-controller-test
|
|
(is (= :ok (rfc/apply-controller {:stop (fn [_] :ok)} :stop)))
|
|
(is (= :ok (rfc/apply-controller {:start (fn [_] :ok)} :start))))
|
|
|
|
(deftest apply-controllers-test
|
|
(let [log (atom [])
|
|
controller-state (atom [])
|
|
controller-1 {:start (fn [_] (swap! log conj :start-1))
|
|
:stop (fn [_] (swap! log conj :stop-1))}
|
|
controller-2 {:start (fn [_] (swap! log conj :start-2))
|
|
:stop (fn [_] (swap! log conj :stop-2))}
|
|
controller-3 {:start (fn [{:keys [foo]}] (swap! log conj [:start-3 foo]))
|
|
:stop (fn [{:keys [foo]}] (swap! log conj [:stop-3 foo]))
|
|
:identity (fn [match]
|
|
{:foo (-> match :parameters :path :foo)})}]
|
|
|
|
(testing "single controller started"
|
|
(swap! controller-state rfc/apply-controllers
|
|
{:data {:controllers [controller-1]}})
|
|
|
|
(is (= [:start-1] @log))
|
|
(is (= [(assoc controller-1 ::rfc/identity nil)] @controller-state))
|
|
(reset! log []))
|
|
|
|
(testing "second controller started"
|
|
(swap! controller-state rfc/apply-controllers
|
|
{:data {:controllers [controller-1 controller-2]}})
|
|
|
|
(is (= [:start-2] @log))
|
|
(is (= [(assoc controller-1 ::rfc/identity nil)
|
|
(assoc controller-2 ::rfc/identity nil)]
|
|
@controller-state))
|
|
(reset! log []))
|
|
|
|
(testing "second controller replaced"
|
|
(swap! controller-state rfc/apply-controllers
|
|
{:data {:controllers [controller-1 controller-3]}
|
|
:parameters {:path {:foo 5}}})
|
|
|
|
(is (= [:stop-2 [:start-3 5]] @log))
|
|
(is (= [(assoc controller-1 ::rfc/identity nil)
|
|
(assoc controller-3 ::rfc/identity {:foo 5})]
|
|
@controller-state))
|
|
(reset! log []))
|
|
|
|
(testing "controller parameter changed"
|
|
(swap! controller-state rfc/apply-controllers
|
|
{:data {:controllers [controller-1 controller-3]}
|
|
:parameters {:path {:foo 1}}})
|
|
|
|
(is (= [[:stop-3 5] [:start-3 1]] @log))
|
|
(is (= [(assoc controller-1 ::rfc/identity nil)
|
|
(assoc controller-3 ::rfc/identity {:foo 1})]
|
|
@controller-state))
|
|
(reset! log []))
|
|
|
|
(testing "all controllers stopped"
|
|
(swap! controller-state rfc/apply-controllers
|
|
{:data {:controllers []}})
|
|
|
|
(is (= [[:stop-3 1] :stop-1] @log))
|
|
(is (= [] @controller-state))
|
|
(reset! log []))))
|
|
|
|
(deftest controller-data-parameters
|
|
(let [log (atom [])
|
|
controller-state (atom [])
|
|
static {:start (fn [params] (swap! log conj [:start-static]))
|
|
:stop (fn [params] (swap! log conj [:stop-static]))}
|
|
controller {:start (fn [params] (swap! log conj [:start params]))
|
|
:stop (fn [params] (swap! log conj [:stop params]))
|
|
:parameters {:path [:foo]}}]
|
|
|
|
(testing "init"
|
|
(swap! controller-state rfc/apply-controllers
|
|
{:data {:controllers [static controller]}
|
|
:parameters {:path {:foo 1}}})
|
|
|
|
(is (= [[:start-static]
|
|
[:start {:path {:foo 1}}]] @log))
|
|
(is (= [(assoc static ::rfc/identity nil)
|
|
(assoc controller ::rfc/identity {:path {:foo 1}})]
|
|
@controller-state))
|
|
(reset! log []))
|
|
|
|
(testing "params change"
|
|
(swap! controller-state rfc/apply-controllers
|
|
{:data {:controllers [static controller]}
|
|
:parameters {:path {:foo 5}}})
|
|
|
|
(is (= [[:stop {:path {:foo 1}}]
|
|
[:start {:path {:foo 5}}]] @log))
|
|
(is (= [(assoc static ::rfc/identity nil)
|
|
(assoc controller ::rfc/identity {:path {:foo 5}})]
|
|
@controller-state))
|
|
(reset! log []))
|
|
|
|
(testing "stop"
|
|
(swap! controller-state rfc/apply-controllers
|
|
{:data {:controllers []}})
|
|
|
|
(is (= [[:stop {:path {:foo 5}}]
|
|
[:stop-static]] @log))
|
|
(reset! log []))))
|