(ns token-tests.token-set-test
  (:require
   [app.main.ui.workspace.tokens.token-set :as wtts]
   [cljs.test :as t]))

(t/deftest toggle-active-theme-id-test
  (t/testing "toggles active theme id"
    (let [state {:workspace-data {:token-themes-index {1 {:id 1}}}}]
      (t/testing "activates theme with id")
      (t/is (= (wtts/toggle-active-theme-id 1 state) #{1})))

    (let [state {:workspace-data {:token-active-themes #{1}
                                  :token-themes-index {1 {:id 1}}}}]
      (t/testing "missing temp theme returns empty set"
        (t/is (= #{} (wtts/toggle-active-theme-id 1 state)))))

    (let [state {:workspace-data {:token-theme-temporary-id :temp
                                  :token-active-themes #{1}
                                  :token-themes-index {1 {:id 1}}}}]
      (t/testing "empty set returns temp theme"
        (t/is (= #{:temp} (wtts/toggle-active-theme-id 1 state)))))

    (let [state {:workspace-data {:token-active-themes #{2 3 4}
                                  :token-themes-index {1 {:id 1}
                                                       2 {:id 2}
                                                       3 {:id 3}
                                                       4 {:id 4 :group :different}}}}]
      (t/testing "removes same group themes and keeps different group themes"
        (t/is (= #{1 4} (wtts/toggle-active-theme-id 1 state)))))

    (let [state {:workspace-data {:token-active-themes #{1 2 3 4}}
                 :token-themes-index {1 {:id 1}
                                      2 {:id 2}
                                      3 {:id 3}
                                      4 {:id 4 :group :different}}}]
      (t/testing "removes theme when active"
        (t/is (= #{4 3 2} (wtts/toggle-active-theme-id 1 state)))))))