From 39c8b2ea3cdcf4b60ed8c476f2944f86afbc260f Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 14 May 2024 13:30:31 +0200 Subject: [PATCH] :sparkles: Add multiple nesting levels component tests --- .../test/cases/multiple-testing-levels.penpot | Bin 0 -> 19735 bytes .../logic/multiple_nesting_levels_test.cljc | 124 ++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 common/test/cases/multiple-testing-levels.penpot create mode 100644 common/test/common_tests/logic/multiple_nesting_levels_test.cljc diff --git a/common/test/cases/multiple-testing-levels.penpot b/common/test/cases/multiple-testing-levels.penpot new file mode 100644 index 0000000000000000000000000000000000000000..06539e8f7ed513855152844cf449ed104dbcd321 GIT binary patch literal 19735 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 QHP>oct2)0&RRIA20LecuUjP6A literal 0 HcmV?d00001 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 0000000000..aeb4cb6085 --- /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"]))))))