mirror of
https://github.com/penpot/penpot.git
synced 2025-01-09 08:20:45 -05:00
122 lines
5.8 KiB
Clojure
122 lines
5.8 KiB
Clojure
;; 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.copying-and-duplicating-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)
|
|
|
|
(defn- setup []
|
|
(-> (thf/sample-file :file1)
|
|
(tho/add-simple-component :simple-1 :frame-simple-1 :rect-simple-1
|
|
:child-params {:type :rect :fills (ths/sample-fills-color :fill-color "#2152e5") :name "rect-simple-1"})
|
|
|
|
(tho/add-frame :frame-composed-1 :name "frame-composed-1")
|
|
(thc/instantiate-component :simple-1 :copy-simple-1 :parent-label :frame-composed-1 :children-labels [:composed-1-simple-1])
|
|
(ths/add-sample-shape :rect-composed-1 :parent-label :frame-composed-1 :fills (ths/sample-fills-color :fill-color "#B1B2B5"))
|
|
(thc/make-component :composed-1 :frame-composed-1)
|
|
|
|
(tho/add-frame :frame-composed-2 :name "frame-composed-2")
|
|
(thc/instantiate-component :composed-1 :copy-composed-1-composed-2 :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-composed-2)
|
|
|
|
(tho/add-frame :frame-composed-3 :name "frame-composed-3")
|
|
(tho/add-group :group-3 :parent-label :frame-composed-3)
|
|
(thc/instantiate-component :composed-2 :copy-composed-1-composed-3 :parent-label :group-3 :children-labels [:composed-1-composed-2])
|
|
(ths/add-sample-shape :circle-composed-3 :parent-label :group-3 :fills (ths/sample-fills-color :fill-color "#B1B2B5"))
|
|
(thc/make-component :composed-3 :frame-composed-3)
|
|
|
|
(thc/instantiate-component :composed-3 :copy-composed-3 :children-labels [:composed-2-composed-3])))
|
|
|
|
(defn- propagate-all-component-changes [file]
|
|
(-> file
|
|
(tho/propagate-component-changes :simple-1)
|
|
(tho/propagate-component-changes :composed-1)
|
|
(tho/propagate-component-changes :composed-2)
|
|
(tho/propagate-component-changes :composed-3)))
|
|
|
|
(defn- count-shapes [file name color]
|
|
(let [page (thf/current-page file)]
|
|
(->> (vals (:objects page))
|
|
(filter #(and
|
|
(= (:name %) name)
|
|
(-> (ths/get-shape-by-id file (:id %))
|
|
:fills
|
|
first
|
|
:fill-color
|
|
(= color))))
|
|
(count))))
|
|
|
|
(defn- validate [file validator]
|
|
(validator file)
|
|
file)
|
|
|
|
;; Related .penpot file: common/test/cases/copying-and-duplicating.penpot
|
|
(t/deftest main-and-first-level-copy
|
|
(-> (setup)
|
|
;; For each main and first level copy:
|
|
;; - Duplicate it two times.
|
|
(tho/duplicate-shape :frame-simple-1)
|
|
(tho/duplicate-shape :frame-simple-1)
|
|
(tho/duplicate-shape :frame-composed-1)
|
|
(tho/duplicate-shape :frame-composed-1)
|
|
(tho/duplicate-shape :frame-composed-2)
|
|
(tho/duplicate-shape :frame-composed-2)
|
|
(tho/duplicate-shape :frame-composed-3)
|
|
(tho/duplicate-shape :frame-composed-3)
|
|
(tho/duplicate-shape :copy-composed-2)
|
|
(tho/duplicate-shape :copy-composed-2)
|
|
(tho/duplicate-shape :copy-composed-3)
|
|
(tho/duplicate-shape :copy-composed-3)
|
|
|
|
;; - Change color of Simple1 and check propagation to all copies.
|
|
(tho/update-bottom-color :frame-simple-1 "#111111" :propagate-fn propagate-all-component-changes)
|
|
(validate #(t/is (= (count-shapes % "rect-simple-1" "#111111") 18)))
|
|
;; - Change color of the nearest main and check propagation to duplicated.
|
|
(tho/update-bottom-color :frame-composed-1 "#222222" :propagate-fn propagate-all-component-changes)
|
|
(validate #(t/is (= (count-shapes % "rect-simple-1" "#222222") 15)))
|
|
(tho/update-bottom-color :frame-composed-2 "#333333" :propagate-fn propagate-all-component-changes)
|
|
(validate #(t/is (= (count-shapes % "rect-simple-1" "#333333") 12)))
|
|
(tho/update-bottom-color :frame-composed-3 "#444444" :propagate-fn propagate-all-component-changes)
|
|
(validate #(t/is (= (count-shapes % "rect-simple-1" "#444444") 6)))))
|
|
|
|
(t/deftest copy-nested-in-main
|
|
(-> (setup)
|
|
;; For each copy of Simple1 nested in a main, and the group inside Composed3 main:
|
|
;; - Duplicate it two times, keeping the duplicated inside the same main.
|
|
(tho/duplicate-shape :copy-simple-1)
|
|
(tho/duplicate-shape :copy-simple-1)
|
|
(tho/duplicate-shape :group-3)
|
|
(tho/duplicate-shape :group-3)
|
|
|
|
;; - Change color of Simple1 and check propagation to all copies.
|
|
(tho/update-bottom-color :frame-simple-1 "#111111" :propagate-fn propagate-all-component-changes)
|
|
(validate #(t/is (= (count-shapes % "rect-simple-1" "#111111") 28)))
|
|
|
|
;; - Change color of the nearest main and check propagation to duplicated.
|
|
(tho/update-bottom-color :frame-composed-1 "#222222" :propagate-fn propagate-all-component-changes)
|
|
(validate #(t/is (= (count-shapes % "rect-simple-1" "#222222") 9)))
|
|
|
|
;; - Change color of the copy you duplicated from, and check that it's NOT PROPAGATED.
|
|
(tho/update-bottom-color :group-3 "#333333" :propagate-fn propagate-all-component-changes)
|
|
(validate #(t/is (= (count-shapes % "rect-simple-1" "#333333") 2)))))
|