67 lines
2.6 KiB
Clojure
67 lines
2.6 KiB
Clojure
;; Copyright (C) 2023 Felisp
|
|
;;
|
|
;; This program is free software: you can redistribute it and/or modify
|
|
;; it under the terms of the GNU Affero General Public License as published by
|
|
;; the Free Software Foundation, version 3 of the License.
|
|
;;
|
|
;; This program is distributed in the hope that it will be useful,
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;; GNU Affero General Public License for more details.
|
|
;;
|
|
;; You should have received a copy of the GNU Affero General Public License
|
|
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
(ns rss-thread-watch.utils-test
|
|
(:require [clojure.test :refer :all]
|
|
[rss-thread-watch.utils :refer :all]))
|
|
|
|
(def first-map
|
|
"Example config map with two keys"
|
|
{:a :b
|
|
:c "c"
|
|
:nested {:fst 1 :scnd {:super :nested}}})
|
|
|
|
(def pony-map
|
|
"Map containing none of the items in map 1"
|
|
{:best-pony "Twilight Sparkle"})
|
|
|
|
(def conflicting-basic-merge (conj pony-map {:a 17 :c 15}))
|
|
|
|
(def deep-pony-map {:a "x"
|
|
:c :something-else
|
|
:nested {:ponies "everywhere"
|
|
:fst 69}})
|
|
|
|
(def empty-map {})
|
|
|
|
(deftest map-apply-defaults-test
|
|
(testing "Full and no-replace"
|
|
(is (= first-map (map-apply-defaults first-map empty-map))
|
|
"No defaults should return conf map unchanged")
|
|
(is (= first-map (map-apply-defaults empty-map first-map))
|
|
"Empty map should be completely replaced by defaults"))
|
|
|
|
(testing "Basic merge"
|
|
(is (= (conj pony-map first-map) (map-apply-defaults first-map pony-map))
|
|
"When all keys unique, maps should be conjd")
|
|
(is (= (conj first-map pony-map) (map-apply-defaults first-map pony-map))
|
|
"When all keys unique, maps should be conjd, order matters")
|
|
(is (= (conj first-map pony-map) (map-apply-defaults pony-map first-map))
|
|
"When all keys unique, maps should be conjd, more order that matters")
|
|
(is (= (conj first-map pony-map) (map-apply-defaults first-map pony-map))
|
|
"Conflicting basic merge"))
|
|
;; Most important part, this is the reason we have the function in the first place
|
|
;; Conj wont merge deep
|
|
(testing "Nested merge"
|
|
(is (= {:a :b
|
|
:c "c"
|
|
:nested {:ponies "everywhere"
|
|
:fst 1
|
|
:scnd {:super :nested}}}
|
|
(map-apply-defaults first-map deep-pony-map)))))
|
|
|
|
(deftest fmap-test
|
|
(testing "Applying function to values of map"
|
|
(is (= {:a 2 :b 3} (fmap (fn [k v] (inc v))
|
|
{:a 1 :b 2})))))
|