diff --git a/common/test/cases/multiple-testing-levels.penpot b/common/test/cases/multiple-testing-levels.penpot new file mode 100644 index 000000000..06539e8f7 Binary files /dev/null and b/common/test/cases/multiple-testing-levels.penpot differ diff --git a/common/test/common_tests/logic/multiple_nesting_levels_test.cljc b/common/test/common_tests/logic/multiple_nesting_levels_test.cljc new file mode 100644 index 000000000..aeb4cb608 --- /dev/null +++ b/common/test/common_tests/logic/multiple_nesting_levels_test.cljc @@ -0,0 +1,124 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns common-tests.logic.multiple-nesting-levels-test + (:require + [app.common.files.changes :as ch] + [app.common.files.changes-builder :as pcb] + [app.common.logic.libraries :as cll] + [app.common.logic.shapes :as cls] + [app.common.pprint :as pp] + [app.common.test-helpers.components :as thc] + [app.common.test-helpers.compositions :as tho] + [app.common.test-helpers.files :as thf] + [app.common.test-helpers.ids-map :as thi] + [app.common.test-helpers.shapes :as ths] + [app.common.types.component :as ctk] + [app.common.types.container :as ctn] + [app.common.types.file :as ctf] + [app.common.uuid :as uuid] + [clojure.test :as t])) + +(t/use-fixtures :each thi/test-fixture) + +;; TODO +;; Related .penpot file: XXX +(t/deftest test-multiple-nesting-levels + (letfn [(setup [] + (-> (thf/sample-file :file1) + + (tho/add-frame :frame-simple-1) + (ths/add-sample-shape :rectangle :parent-label :frame-simple-1 :fills (ths/sample-fills-color :fill-color "#2152e5")) + (thc/make-component :simple-1 :frame-simple-1) + + (tho/add-frame :frame-simple-2) + (ths/add-sample-shape :circle :parent-label :frame-simple-2 :fills (ths/sample-fills-color :fill-color "#e56d21")) + (thc/make-component :simple-2 :frame-simple-2) + + (tho/add-frame :frame-composed-1) + (thc/instantiate-component :simple-1 :copy-simple-1 :parent-label :frame-composed-1 :children-labels [:simple-1-composed-1]) + (thc/make-component :composed-1 :frame-composed-1) + + (tho/add-frame :frame-composed-2) + (thc/instantiate-component :composed-1 :copy-frame-composed-1 :parent-label :frame-composed-2 :children-labels [:composed-1-composed-2]) + (thc/make-component :composed-2 :frame-composed-2) + + (thc/instantiate-component :composed-2 :copy-frame-composed-2 :children-labels [:composed-1-composed-2-copy]))) + + (propagate-all-component-changes [file] + (-> file + (tho/propagate-component-changes :simple-1) + (tho/propagate-component-changes :simple-2) + (tho/propagate-component-changes :composed-1) + (tho/propagate-component-changes :composed-2))) + + (reset-all-overrides [file] + (-> file + (tho/reset-overrides (ths/get-shape file :copy-simple-1)) + (tho/reset-overrides (ths/get-shape file :copy-frame-composed-1)) + (tho/reset-overrides (ths/get-shape file :composed-1-composed-2-copy)) + (propagate-all-component-changes))) + + (fill-colors [file] + [(tho/bottom-fill-color file :frame-simple-1) + (tho/bottom-fill-color file :frame-simple-2) + (tho/bottom-fill-color file :frame-composed-1) + (tho/bottom-fill-color file :frame-composed-2) + (tho/bottom-fill-color file :copy-frame-composed-2)]) + + (validate [file validator] + (validator file) + file)] + (-> (setup) + ;; Change color of Simple1 and see that it's propagated to all copies. + (tho/update-bottom-color :frame-simple-1 "#e521a8" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#e521a8" "#e56d21" "#e521a8" "#e521a8" "#e521a8"]))) + + ;; Override color in copy inside Composed1, Composed2 and the copy + ;; of Composed2 and see in all cases that a change in the main is overriden. + (tho/update-bottom-color :simple-1-composed-1 "#21e59e" :propagate-fn propagate-all-component-changes) + (tho/update-bottom-color :composed-1-composed-2 "#2186e5" :propagate-fn propagate-all-component-changes) + (tho/update-bottom-color :composed-1-composed-2-copy "#e5a221" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#e521a8" "#e56d21" "#21e59e" "#2186e5" "#e5a221"]))) + (tho/update-bottom-color :frame-simple-1 "#b2e521" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#b2e521" "#e56d21" "#21e59e" "#2186e5" "#e5a221"]))) + + ;; Reset all overrides and check again the propagation from mains. + (reset-all-overrides) + (tho/update-bottom-color :frame-simple-1 "#21aae5" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#21aae5" "#e56d21" "#21aae5" "#21aae5" "#21aae5"]))) + + ;; Swap in Composed1 to Simple2 and see that it propagates ok. + (tho/swap-component-in-shape :copy-simple-1 :simple-2 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#21aae5" "#e56d21" "#e56d21" "#e56d21" "#e56d21"]))) + + ;; Change color of Simple 2 and see that it propagates ok. + (tho/update-bottom-color :frame-simple-2 "#c321e5" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#21aae5" "#c321e5" "#c321e5" "#c321e5" "#c321e5"]))) + + ;; Swap Simple 2 copy in Composed2. Check propagations. + (tho/swap-component-in-first-child :copy-frame-composed-1 :simple-1 :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#21aae5" "#c321e5" "#c321e5" "#21aae5" "#21aae5"]))) + + ;; Change color of Simple 1 and check propagation. + (tho/update-bottom-color :frame-simple-1 "#e521a8" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#e521a8" "#c321e5" "#c321e5" "#e521a8" "#e521a8"]))) + + ;; Reset overrides in Composed2 main, and swap Simple 2 copy in + ;; Composed2 copy. Change color of Simple 2 and check propatagion. + (tho/reset-overrides-in-first-child :copy-frame-composed-1 :propagate-fn propagate-all-component-changes) + (tho/swap-component-in-first-child :composed-1-composed-2-copy :simple-1 :propagate-fn propagate-all-component-changes) + (tho/update-bottom-color :frame-simple-2 "#21e55d" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#e521a8" "#21e55d" "#21e55d" "#21e55d" "#e521a8"]))) + + ;; Swap all of three (Composed 1, Composed2 and copy of Composed2) + ;; and check propagations from Simple mains. + (tho/swap-component-in-first-child :frame-composed-1 :simple-1 :propagate-fn propagate-all-component-changes) + (tho/swap-component-in-first-child :copy-frame-composed-1 :simple-2 :propagate-fn propagate-all-component-changes) + (tho/swap-component-in-first-child :composed-1-composed-2-copy :simple-2 :propagate-fn propagate-all-component-changes) + (tho/update-bottom-color :frame-simple-1 "#111111" :propagate-fn propagate-all-component-changes) + (tho/update-bottom-color :frame-simple-2 "#222222" :propagate-fn propagate-all-component-changes) + (validate #(t/is (= (fill-colors %) ["#111111" "#222222" "#111111" "#222222" "#222222"]))))))