;; 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 frontend-tests.data.viewer-test (:require [app.common.uuid :as uuid] [app.main.data.viewer :as dv] [cljs.test :as t] [potok.v2.core :as ptk])) (def ^:private page-id (uuid/custom 1 1)) (defn- base-state "Build a minimal viewer state with the given frames and query-params." [{:keys [frames index]}] {:route {:params {:query {:page-id (str page-id) :index (str index)}}} :viewer {:pages {page-id {:frames frames}}} :viewer-local {:viewport-size {:width 1000 :height 800}}}) (t/deftest zoom-to-fit-clamps-out-of-bounds-index (t/testing "index exceeds frame count" (let [state (base-state {:frames [{:selrect {:width 100 :height 100}}] :index 1}) result (ptk/update dv/zoom-to-fit state)] (t/is (= (get-in result [:viewer-local :zoom-type]) :fit)) (t/is (number? (get-in result [:viewer-local :zoom]))))) (t/testing "index is zero with single frame (normal case)" (let [state (base-state {:frames [{:selrect {:width 100 :height 100}}] :index 0}) result (ptk/update dv/zoom-to-fit state)] (t/is (= (get-in result [:viewer-local :zoom-type]) :fit)) (t/is (number? (get-in result [:viewer-local :zoom]))))) (t/testing "index within valid range with multiple frames" (let [state (base-state {:frames [{:selrect {:width 100 :height 100}} {:selrect {:width 200 :height 200}}] :index 1}) result (ptk/update dv/zoom-to-fit state)] (t/is (= (get-in result [:viewer-local :zoom-type]) :fit)) (t/is (number? (get-in result [:viewer-local :zoom])))))) (t/deftest zoom-to-fill-clamps-out-of-bounds-index (t/testing "index exceeds frame count" (let [state (base-state {:frames [{:selrect {:width 100 :height 100}}] :index 1}) result (ptk/update dv/zoom-to-fill state)] (t/is (= (get-in result [:viewer-local :zoom-type]) :fill)) (t/is (number? (get-in result [:viewer-local :zoom]))))) (t/testing "index is zero with single frame (normal case)" (let [state (base-state {:frames [{:selrect {:width 100 :height 100}}] :index 0}) result (ptk/update dv/zoom-to-fill state)] (t/is (= (get-in result [:viewer-local :zoom-type]) :fill)) (t/is (number? (get-in result [:viewer-local :zoom]))))) (t/testing "index within valid range with multiple frames" (let [state (base-state {:frames [{:selrect {:width 100 :height 100}} {:selrect {:width 200 :height 200}}] :index 1}) result (ptk/update dv/zoom-to-fill state)] (t/is (= (get-in result [:viewer-local :zoom-type]) :fill)) (t/is (number? (get-in result [:viewer-local :zoom]))))))