🔧 add groups handling v2

This commit is contained in:
Andrés Moya 2024-09-12 10:04:03 +02:00
parent e2ff6f7ba6
commit 3a4ec32f8e
3 changed files with 766 additions and 219 deletions

View file

@ -130,10 +130,10 @@
(t/deftest add-token-set-with-group
(let [tokens-lib (ctob/make-tokens-lib)
token-set (ctob/make-token-set :name "test-group.test-token-set")
token-set (ctob/make-token-set :name "test-group/test-token-set")
tokens-lib' (ctob/add-set tokens-lib token-set)
set-group (ctob/get-set-group tokens-lib' "test-group")]
set-group (ctob/get-set-group tokens-lib' "test-group")]
(t/is (= (:attr1 set-group) "one"))
(t/is (= (:attr2 set-group) "two"))))
@ -423,8 +423,8 @@
(t/testing "grouping"
(t/deftest split-and-join
(let [name "group.subgroup.name"
path (ctob/split-path name)
name' (ctob/join-path path)]
path (ctob/split-path name ".")
name' (ctob/join-path path ".")]
(t/is (= (first path) "group"))
(t/is (= (second path) "subgroup"))
(t/is (= (nth path 2) "name"))
@ -432,7 +432,7 @@
(t/deftest remove-spaces
(let [name "group . subgroup . name"
path (ctob/split-path name)]
path (ctob/split-path name ".")]
(t/is (= (first path) "group"))
(t/is (= (second path) "subgroup"))
(t/is (= (nth path 2) "name"))))
@ -441,82 +441,555 @@
(let [token1 (ctob/make-token :name "token1" :type :boolean :value true)
token2 (ctob/make-token :name "some group.token2" :type :boolean :value true)
token1' (ctob/group-item token1 "big group")
token2' (ctob/group-item token2 "big group")
token1'' (ctob/ungroup-item token1')
token2'' (ctob/ungroup-item token2')]
token1' (ctob/group-item token1 "big group" ".")
token2' (ctob/group-item token2 "big group" ".")
token1'' (ctob/ungroup-item token1' ".")
token2'' (ctob/ungroup-item token2' ".")]
(t/is (= (:name token1') "big group.token1"))
(t/is (= (:name token2') "big group.some group.token2"))
(t/is (= (:name token1'') "token1"))
(t/is (= (:name token2'') "some group.token2"))))
(t/deftest get-path
(t/deftest get-groups-str
(let [token1 (ctob/make-token :name "token1" :type :boolean :value true)
token2 (ctob/make-token :name "some-group.token2" :type :boolean :value true)
token3 (ctob/make-token :name "some-group.some-subgroup.token3" :type :boolean :value true)]
(t/is (= (ctob/get-path token1) ""))
(t/is (= (ctob/get-path token2) "some-group"))
(t/is (= (ctob/get-path token3) "some-group.some-subgroup"))))
(t/is (= (ctob/get-groups-str token1 ".") ""))
(t/is (= (ctob/get-groups-str token2 ".") "some-group"))
(t/is (= (ctob/get-groups-str token3 ".") "some-group.some-subgroup"))))
(t/deftest get-final-name
(let [token1 (ctob/make-token :name "token1" :type :boolean :value true)
token2 (ctob/make-token :name "some-group.token2" :type :boolean :value true)
token3 (ctob/make-token :name "some-group.some-subgroup.token3" :type :boolean :value true)]
(t/is (= (ctob/get-final-name token1) "token1"))
(t/is (= (ctob/get-final-name token2) "token2"))
(t/is (= (ctob/get-final-name token3) "token3"))))
(t/deftest group-items
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "token-set1"))
(ctob/add-set (ctob/make-token-set :name "sgroup1.token-set2"))
(ctob/add-set (ctob/make-token-set :name "sgroup1.token-set3"))
(ctob/add-set (ctob/make-token-set :name "sgroup1.ssubgroup1.token-set4"))
(ctob/add-set (ctob/make-token-set :name "sgroup2.token-set5"))
(ctob/add-token-in-set "sgroup2.token-set5"
(ctob/make-token :name "tgroup1.tsubgroup1.token1"
(t/is (= (ctob/get-final-name token1 ".") "token1"))
(t/is (= (ctob/get-final-name token2 ".") "token2"))
(t/is (= (ctob/get-final-name token3 ".") "token3"))))
(t/testing "grouped tokens"
(t/deftest grouped-tokens
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "test-token-set"))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "token1"
:type :boolean
:value true))
(ctob/add-token-in-set "sgroup2.token-set5"
(ctob/make-token :name "tgroup1.tsubgroup1.token2"
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group1.token2"
:type :boolean
:value true))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group1.token3"
:type :boolean
:value true))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group1.subgroup11.token4"
:type :boolean
:value true))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group2.token5"
:type :boolean
:value true)))
sets (ctob/get-sets tokens-lib)
set (ctob/get-set tokens-lib "sgroup2.token-set5")
tokens (ctob/get-tokens set)
set-groups (ctob/group-items sets)
set (ctob/get-set tokens-lib "test-token-set")
tokens-list (ctob/get-tokens set)
token-set1 (get set-groups "token-set1")
sgroup1 (get set-groups "sgroup1")
token-set2 (get sgroup1 "token-set2")
token-set3 (get sgroup1 "token-set3")
ssubgroup1 (get sgroup1 "ssubgroup1")
token-set4 (get ssubgroup1 "token-set4")
sgroup2 (get set-groups "sgroup2")
token-set5 (get sgroup2 "token-set5")
tokens-tree (:tokens set)
[node-token1 node-group1 node-group2]
(ctob/get-children tokens-tree)
token-groups (ctob/group-items tokens)
tgroup1 (get token-groups "tgroup1")
tsubgroup1 (get tgroup1 "tsubgroup1")
token1 (get tsubgroup1 "token1")
token2 (get tsubgroup1 "token2")]
[node-token2 node-token3 node-subgroup11]
(ctob/get-children (second node-group1))
;; {"sgroup1"
;; {"token-set2" {:name "sgroup1.token-set2" ...}
;; "token-set3" {:name "sgroup1.token-set3" ...}
;; "ssubgroup1"
;; {"token-set4" {:name "sgroup1.ssubgroup1.token-set4" ...}}}
;; "sgroup2"
;; {"token-set5" {:name "sgroup2.token-set5" ...}}
;; "token-set1" {:name "token-set1" ...}}
[node-token4]
(ctob/get-children (second node-subgroup11))
(t/is (= (:name token-set1) "token-set1"))
(t/is (= (:name token-set2) "sgroup1.token-set2"))
(t/is (= (:name token-set3) "sgroup1.token-set3"))
(t/is (= (:name token-set4) "sgroup1.ssubgroup1.token-set4"))
(t/is (= (:name token-set5) "sgroup2.token-set5"))
[node-token5]
(ctob/get-children (second node-group2))]
(t/is (= (:name token1) "tgroup1.tsubgroup1.token1"))
(t/is (= (:name token2) "tgroup1.tsubgroup1.token2")))))
(t/is (= (count tokens-list) 5))
(t/is (= (:name (nth tokens-list 0)) "token1"))
(t/is (= (:name (nth tokens-list 1)) "group1.token2"))
(t/is (= (:name (nth tokens-list 2)) "group1.token3"))
(t/is (= (:name (nth tokens-list 3)) "group1.subgroup11.token4"))
(t/is (= (:name (nth tokens-list 4)) "group2.token5"))
(t/is (= (first node-token1) "token1"))
(t/is (= (ctob/group? (second node-token1)) false))
(t/is (= (:name (second node-token1)) "token1"))
(t/is (= (first node-group1) "group1"))
(t/is (= (ctob/group? (second node-group1)) true))
(t/is (= (count (second node-group1)) 3))
(t/is (= (first node-token2) "token2"))
(t/is (= (ctob/group? (second node-token2)) false))
(t/is (= (:name (second node-token2)) "group1.token2"))
(t/is (= (first node-token3) "token3"))
(t/is (= (ctob/group? (second node-token3)) false))
(t/is (= (:name (second node-token3)) "group1.token3"))
(t/is (= (first node-subgroup11) "subgroup11"))
(t/is (= (ctob/group? (second node-subgroup11)) true))
(t/is (= (count (second node-subgroup11)) 1))
(t/is (= (first node-token4) "token4"))
(t/is (= (ctob/group? (second node-token4)) false))
(t/is (= (:name (second node-token4)) "group1.subgroup11.token4"))
(t/is (= (first node-token5) "token5"))
(t/is (= (ctob/group? (second node-token5)) false))
(t/is (= (:name (second node-token5)) "group2.token5"))))
(t/deftest update-token-in-groups
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "test-token-set"))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "test-token-1"
:type :boolean
:value true))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group1.test-token-2"
:type :boolean
:value true))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group1.test-token-3"
:type :boolean
:value true)))
tokens-lib' (-> tokens-lib
(ctob/update-token-in-set "test-token-set" "group1.test-token-2"
(fn [token]
(assoc token
:description "some description"
:value false))))
token-set (ctob/get-set tokens-lib "test-token-set")
token-set' (ctob/get-set tokens-lib' "test-token-set")
group1' (get-in token-set' [:tokens "group1"])
token (get-in token-set [:tokens "group1" "test-token-2"])
token' (get-in token-set' [:tokens "group1" "test-token-2"])]
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (count group1') 2))
(t/is (= (d/index-of (keys group1') "test-token-2") 0))
(t/is (= (:name token') "group1.test-token-2"))
(t/is (= (:description token') "some description"))
(t/is (= (:value token') false))
(t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set)))
(t/is (dt/is-after? (:modified-at token') (:modified-at token)))))
(t/deftest rename-token-in-groups
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "test-token-set"))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "test-token-1"
:type :boolean
:value true))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group1.test-token-2"
:type :boolean
:value true))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group1.test-token-3"
:type :boolean
:value true)))
tokens-lib' (-> tokens-lib
(ctob/update-token-in-set "test-token-set" "group1.test-token-2"
(fn [token]
(assoc token
:name "group1.updated-name"))))
token-set (ctob/get-set tokens-lib "test-token-set")
token-set' (ctob/get-set tokens-lib' "test-token-set")
group1' (get-in token-set' [:tokens "group1"])
token (get-in token-set [:tokens "group1" "test-token-2"])
token' (get-in token-set' [:tokens "group1" "updated-name"])]
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (count group1') 2))
(t/is (= (d/index-of (keys group1') "updated-name") 0))
(t/is (= (:name token') "group1.updated-name"))
(t/is (= (:description token') nil))
(t/is (= (:value token') true))
(t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set)))
(t/is (dt/is-after? (:modified-at token') (:modified-at token)))))
(t/deftest move-token-of-group
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "test-token-set"))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "test-token-1"
:type :boolean
:value true))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group1.test-token-2"
:type :boolean
:value true))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group1.test-token-3"
:type :boolean
:value true)))
tokens-lib' (-> tokens-lib
(ctob/update-token-in-set "test-token-set" "group1.test-token-2"
(fn [token]
(assoc token
:name "group2.updated-name"))))
token-set (ctob/get-set tokens-lib "test-token-set")
token-set' (ctob/get-set tokens-lib' "test-token-set")
group1' (get-in token-set' [:tokens "group1"])
group2' (get-in token-set' [:tokens "group2"])
token (get-in token-set [:tokens "group1" "test-token-2"])
token' (get-in token-set' [:tokens "group2" "updated-name"])]
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (count group1') 1))
(t/is (= (count group2') 1))
(t/is (= (d/index-of (keys group2') "updated-name") 0))
(t/is (= (:name token') "group2.updated-name"))
(t/is (= (:description token') nil))
(t/is (= (:value token') true))
(t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set)))
(t/is (dt/is-after? (:modified-at token') (:modified-at token)))))
(t/deftest delete-token-in-group
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "test-token-set"))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "test-token-1"
:type :boolean
:value true))
(ctob/add-token-in-set "test-token-set"
(ctob/make-token :name "group1.test-token-2"
:type :boolean
:value true)))
tokens-lib' (-> tokens-lib
(ctob/delete-token-from-set "test-token-set" "group1.test-token-2"))
token-set (ctob/get-set tokens-lib "test-token-set")
token-set' (ctob/get-set tokens-lib' "test-token-set")
token' (get-in token-set' [:tokens "group1" "test-token-2"])]
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (count (:tokens token-set')) 1))
(t/is (nil? token'))
(t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set))))))
(t/testing "grouped sets"
(t/deftest grouped-sets
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "token-set-1"))
(ctob/add-set (ctob/make-token-set :name "group1/token-set-2"))
(ctob/add-set (ctob/make-token-set :name "group1/token-set-3"))
(ctob/add-set (ctob/make-token-set :name "group1/subgroup11/token-set-4"))
(ctob/add-set (ctob/make-token-set :name "group2/token-set-5")))
sets-list (ctob/get-sets tokens-lib)
sets-tree (ctob/get-set-tree tokens-lib)
[node-set1 node-group1 node-group2]
(ctob/get-children sets-tree)
[node-set2 node-set3 node-subgroup11]
(ctob/get-children (second node-group1))
[node-set4]
(ctob/get-children (second node-subgroup11))
[node-set5]
(ctob/get-children (second node-group2))]
(t/is (= (count sets-list) 5))
(t/is (= (:name (nth sets-list 0)) "token-set-1"))
(t/is (= (:name (nth sets-list 1)) "group1/token-set-2"))
(t/is (= (:name (nth sets-list 2)) "group1/token-set-3"))
(t/is (= (:name (nth sets-list 3)) "group1/subgroup11/token-set-4"))
(t/is (= (:name (nth sets-list 4)) "group2/token-set-5"))
(t/is (= (first node-set1) "token-set-1"))
(t/is (= (ctob/group? (second node-set1)) false))
(t/is (= (:name (second node-set1)) "token-set-1"))
(t/is (= (first node-group1) "group1"))
(t/is (= (ctob/group? (second node-group1)) true))
(t/is (= (count (second node-group1)) 3))
(t/is (= (first node-set2) "token-set-2"))
(t/is (= (ctob/group? (second node-set2)) false))
(t/is (= (:name (second node-set2)) "group1/token-set-2"))
(t/is (= (first node-set3) "token-set-3"))
(t/is (= (ctob/group? (second node-set3)) false))
(t/is (= (:name (second node-set3)) "group1/token-set-3"))
(t/is (= (first node-subgroup11) "subgroup11"))
(t/is (= (ctob/group? (second node-subgroup11)) true))
(t/is (= (count (second node-subgroup11)) 1))
(t/is (= (first node-set4) "token-set-4"))
(t/is (= (ctob/group? (second node-set4)) false))
(t/is (= (:name (second node-set4)) "group1/subgroup11/token-set-4"))
(t/is (= (first node-set5) "token-set-5"))
(t/is (= (ctob/group? (second node-set5)) false))
(t/is (= (:name (second node-set5)) "group2/token-set-5"))))
(t/deftest update-set-in-groups
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "token-set-1"))
(ctob/add-set (ctob/make-token-set :name "group1/token-set-2"))
(ctob/add-set (ctob/make-token-set :name "group1/token-set-3"))
(ctob/add-set (ctob/make-token-set :name "group1/subgroup11/token-set-4"))
(ctob/add-set (ctob/make-token-set :name "group2/token-set-5")))
tokens-lib' (-> tokens-lib
(ctob/update-set "group1/token-set-2"
(fn [token-set]
(assoc token-set :description "some description"))))
sets-tree (ctob/get-set-tree tokens-lib)
sets-tree' (ctob/get-set-tree tokens-lib')
group1' (get sets-tree' "group1")
token-set (get-in sets-tree ["group1" "token-set-2"])
token-set' (get-in sets-tree' ["group1" "token-set-2"])]
(t/is (= (ctob/set-count tokens-lib') 5))
(t/is (= (count group1') 3))
(t/is (= (d/index-of (keys group1') "token-set-2") 0))
(t/is (= (:name token-set') "group1/token-set-2"))
(t/is (= (:description token-set') "some description"))
(t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set)))))
(t/deftest rename-set-in-groups
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "token-set-1"))
(ctob/add-set (ctob/make-token-set :name "group1/token-set-2"))
(ctob/add-set (ctob/make-token-set :name "group1/token-set-3"))
(ctob/add-set (ctob/make-token-set :name "group1/subgroup11/token-set-4"))
(ctob/add-set (ctob/make-token-set :name "group2/token-set-5")))
tokens-lib' (-> tokens-lib
(ctob/update-set "group1/token-set-2"
(fn [token-set]
(assoc token-set
:name "group1/updated-name"))))
sets-tree (ctob/get-set-tree tokens-lib)
sets-tree' (ctob/get-set-tree tokens-lib')
group1' (get sets-tree' "group1")
token-set (get-in sets-tree ["group1" "token-set-2"])
token-set' (get-in sets-tree' ["group1" "updated-name"])]
(t/is (= (ctob/set-count tokens-lib') 5))
(t/is (= (count group1') 3))
(t/is (= (d/index-of (keys group1') "updated-name") 0))
(t/is (= (:name token-set') "group1/updated-name"))
(t/is (= (:description token-set') nil))
(t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set)))))
(t/deftest move-set-of-group
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "token-set-1"))
(ctob/add-set (ctob/make-token-set :name "group1/token-set-2"))
(ctob/add-set (ctob/make-token-set :name "group1/token-set-3"))
(ctob/add-set (ctob/make-token-set :name "group1/subgroup11/token-set-4"))
#_(ctob/add-set (ctob/make-token-set :name "group2/token-set-5")))
tokens-lib' (-> tokens-lib
(ctob/update-set "group1/token-set-2"
(fn [token-set]
(assoc token-set
:name "group2/updated-name"))))
sets-tree (ctob/get-set-tree tokens-lib)
sets-tree' (ctob/get-set-tree tokens-lib')
group1' (get sets-tree' "group1")
group2' (get sets-tree' "group2")
token-set (get-in sets-tree ["group1" "token-set-2"])
token-set' (get-in sets-tree' ["group2" "updated-name"])]
(t/is (= (ctob/set-count tokens-lib') 4))
(t/is (= (count group1') 2))
(t/is (= (count group2') 1))
(t/is (= (d/index-of (keys group2') "updated-name") 0))
(t/is (= (:name token-set') "group2/updated-name"))
(t/is (= (:description token-set') nil))
(t/is (dt/is-after? (:modified-at token-set') (:modified-at token-set)))))
(t/deftest delete-set-in-group
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "token-set-1"))
(ctob/add-set (ctob/make-token-set :name "group1/token-set-2")))
tokens-lib' (-> tokens-lib
(ctob/delete-set "group1/token-set-2"))
sets-tree' (ctob/get-set-tree tokens-lib')
token-set' (get-in sets-tree' ["group1" "token-set-2"])]
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (count sets-tree') 1))
(t/is (nil? token-set')))))
(t/testing "grouped themes"
(t/deftest grouped-themes
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-theme (ctob/make-token-theme :name "token-theme-1"))
(ctob/add-theme (ctob/make-token-theme :name "group1/token-theme-2"))
(ctob/add-theme (ctob/make-token-theme :name "group1/token-theme-3"))
(ctob/add-theme (ctob/make-token-theme :name "group1/subgroup11/token-theme-4"))
(ctob/add-theme (ctob/make-token-theme :name "group2/token-theme-5")))
themes-list (ctob/get-themes tokens-lib)
themes-tree (ctob/get-theme-tree tokens-lib)
[node-theme1 node-group1 node-group2]
(ctob/get-children themes-tree)
[node-theme2 node-theme3 node-subgroup11]
(ctob/get-children (second node-group1))
[node-theme4]
(ctob/get-children (second node-subgroup11))
[node-theme5]
(ctob/get-children (second node-group2))]
(t/is (= (count themes-list) 5))
(t/is (= (:name (nth themes-list 0)) "token-theme-1"))
(t/is (= (:name (nth themes-list 1)) "group1/token-theme-2"))
(t/is (= (:name (nth themes-list 2)) "group1/token-theme-3"))
(t/is (= (:name (nth themes-list 3)) "group1/subgroup11/token-theme-4"))
(t/is (= (:name (nth themes-list 4)) "group2/token-theme-5"))
(t/is (= (first node-theme1) "token-theme-1"))
(t/is (= (ctob/group? (second node-theme1)) false))
(t/is (= (:name (second node-theme1)) "token-theme-1"))
(t/is (= (first node-group1) "group1"))
(t/is (= (ctob/group? (second node-group1)) true))
(t/is (= (count (second node-group1)) 3))
(t/is (= (first node-theme2) "token-theme-2"))
(t/is (= (ctob/group? (second node-theme2)) false))
(t/is (= (:name (second node-theme2)) "group1/token-theme-2"))
(t/is (= (first node-theme3) "token-theme-3"))
(t/is (= (ctob/group? (second node-theme3)) false))
(t/is (= (:name (second node-theme3)) "group1/token-theme-3"))
(t/is (= (first node-subgroup11) "subgroup11"))
(t/is (= (ctob/group? (second node-subgroup11)) true))
(t/is (= (count (second node-subgroup11)) 1))
(t/is (= (first node-theme4) "token-theme-4"))
(t/is (= (ctob/group? (second node-theme4)) false))
(t/is (= (:name (second node-theme4)) "group1/subgroup11/token-theme-4"))
(t/is (= (first node-theme5) "token-theme-5"))
(t/is (= (ctob/group? (second node-theme5)) false))
(t/is (= (:name (second node-theme5)) "group2/token-theme-5"))))
(t/deftest update-theme-in-groups
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-theme (ctob/make-token-theme :name "token-theme-1"))
(ctob/add-theme (ctob/make-token-theme :name "group1/token-theme-2"))
(ctob/add-theme (ctob/make-token-theme :name "group1/token-theme-3"))
(ctob/add-theme (ctob/make-token-theme :name "group1/subgroup11/token-theme-4"))
(ctob/add-theme (ctob/make-token-theme :name "group2/token-theme-5")))
tokens-lib' (-> tokens-lib
(ctob/update-theme "group1/token-theme-2"
(fn [token-theme]
(assoc token-theme :description "some description"))))
themes-tree (ctob/get-theme-tree tokens-lib)
themes-tree' (ctob/get-theme-tree tokens-lib')
group1' (get themes-tree' "group1")
token-theme (get-in themes-tree ["group1" "token-theme-2"])
token-theme' (get-in themes-tree' ["group1" "token-theme-2"])]
(t/is (= (ctob/theme-count tokens-lib') 5))
(t/is (= (count group1') 3))
(t/is (= (d/index-of (keys group1') "token-theme-2") 0))
(t/is (= (:name token-theme') "group1/token-theme-2"))
(t/is (= (:description token-theme') "some description"))
(t/is (dt/is-after? (:modified-at token-theme') (:modified-at token-theme)))))
(t/deftest rename-theme-in-groups
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-theme (ctob/make-token-theme :name "token-theme-1"))
(ctob/add-theme (ctob/make-token-theme :name "group1/token-theme-2"))
(ctob/add-theme (ctob/make-token-theme :name "group1/token-theme-3"))
(ctob/add-theme (ctob/make-token-theme :name "group1/subgroup11/token-theme-4"))
(ctob/add-theme (ctob/make-token-theme :name "group2/token-theme-5")))
tokens-lib' (-> tokens-lib
(ctob/update-theme "group1/token-theme-2"
(fn [token-theme]
(assoc token-theme
:name "group1/updated-name"))))
themes-tree (ctob/get-theme-tree tokens-lib)
themes-tree' (ctob/get-theme-tree tokens-lib')
group1' (get themes-tree' "group1")
token-theme (get-in themes-tree ["group1" "token-theme-2"])
token-theme' (get-in themes-tree' ["group1" "updated-name"])]
(t/is (= (ctob/theme-count tokens-lib') 5))
(t/is (= (count group1') 3))
(t/is (= (d/index-of (keys group1') "updated-name") 0))
(t/is (= (:name token-theme') "group1/updated-name"))
(t/is (= (:description token-theme') nil))
(t/is (dt/is-after? (:modified-at token-theme') (:modified-at token-theme)))))
(t/deftest move-theme-of-group
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-theme (ctob/make-token-theme :name "token-theme-1"))
(ctob/add-theme (ctob/make-token-theme :name "group1/token-theme-2"))
(ctob/add-theme (ctob/make-token-theme :name "group1/token-theme-3"))
(ctob/add-theme (ctob/make-token-theme :name "group1/subgroup11/token-theme-4"))
#_(ctob/add-theme (ctob/make-token-theme :name "group2/token-theme-5")))
tokens-lib' (-> tokens-lib
(ctob/update-theme "group1/token-theme-2"
(fn [token-theme]
(assoc token-theme
:name "group2/updated-name"))))
themes-tree (ctob/get-theme-tree tokens-lib)
themes-tree' (ctob/get-theme-tree tokens-lib')
group1' (get themes-tree' "group1")
group2' (get themes-tree' "group2")
token-theme (get-in themes-tree ["group1" "token-theme-2"])
token-theme' (get-in themes-tree' ["group2" "updated-name"])]
(t/is (= (ctob/theme-count tokens-lib') 4))
(t/is (= (count group1') 2))
(t/is (= (count group2') 1))
(t/is (= (d/index-of (keys group2') "updated-name") 0))
(t/is (= (:name token-theme') "group2/updated-name"))
(t/is (= (:description token-theme') nil))
(t/is (dt/is-after? (:modified-at token-theme') (:modified-at token-theme)))))
(t/deftest delete-theme-in-group
(let [tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-theme (ctob/make-token-theme :name "token-theme-1"))
(ctob/add-theme (ctob/make-token-theme :name "group1/token-theme-2")))
tokens-lib' (-> tokens-lib
(ctob/delete-theme "group1/token-theme-2"))
themes-tree' (ctob/get-theme-tree tokens-lib')
token-theme' (get-in themes-tree' ["group1" "token-theme-2"])]
(t/is (= (ctob/theme-count tokens-lib') 1))
(t/is (= (count themes-tree') 1))
(t/is (nil? token-theme'))))))