penpot/frontend/test/frontend_tests/ui/comments_position_modifier_test.cljs
Alonso Torres ca81776d04
🐛 Fix problems when dragging frame with comments (#10460)
* 🐛 Fix undo frame position not undoing comments

* 🐛 Fix problem with hover capturing dragging event

* 🐛 Fix watch updates for comment bubbles

* 🐛 Fix "Maximum update depth" crash on SVG shape transforms

* 🐛 Fix comment geometry problems
2026-06-30 13:33:47 +02:00

61 lines
2.3 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 Sucursal en España SL
(ns frontend-tests.ui.comments-position-modifier-test
(:require
[app.common.geom.point :as gpt]
[app.common.geom.shapes :as gsh]
[app.common.math :as mth]
[app.common.types.modifiers :as ctm]
[app.common.types.shape :as cts]
[app.common.uuid :as uuid]
[app.main.data.workspace.comments :as dwcm]
[cljs.test :as t :include-macros true]))
(defn- frame
[id]
(cts/setup-shape {:id id :type :frame :name "Board"
:x 100 :y 100 :width 200 :height 150}))
(defn- close-point?
[a b]
(and (mth/close? (:x a) (:x b))
(mth/close? (:y a) (:y b))))
(t/deftest frame-pin-transform-move
(let [f (frame (uuid/next))
mods (ctm/move-modifiers (gpt/point 10 20))
m (dwcm/frame-pin-transform f mods nil)]
(t/testing "the comment follows the frame translation"
(t/is (close-point? (gpt/point 160 170)
(gpt/transform (gpt/point 150 150) m))))))
(t/deftest frame-pin-transform-rotation
(let [f (frame (uuid/next))
center (gsh/shape->center f)
mods (ctm/rotation (ctm/empty) center 90)
m (dwcm/frame-pin-transform f mods nil)
p (gpt/point 150 150)]
(t/testing "the comment rotates around the frame center"
(t/is (close-point? (gpt/transform p (ctm/modifiers->transform mods))
(gpt/transform p m))))))
(t/deftest frame-pin-transform-resize
(let [f (frame (uuid/next))
mods (ctm/resize (ctm/empty) (gpt/point 2 2) (gpt/point 100 100))
m (dwcm/frame-pin-transform f mods nil)
p (gpt/point 150 150)]
(t/testing "the comment keeps its position without scaling"
(t/is (close-point? p (gpt/transform p m))))
(t/testing "the comment is not scaled along with the frame"
(t/is (not (close-point? (gpt/transform p (ctm/modifiers->transform mods))
(gpt/transform p m)))))))
(t/deftest frame-pin-transform-without-transform
(let [f (frame (uuid/next))]
(t/testing "no active transform yields no matrix"
(t/is (nil? (dwcm/frame-pin-transform f nil nil))))))