(ns uxbox.tests.test-svgparse (:require [clojure.test :as t] [clojure.java.io :as io] [catacumba.testing :refer [with-server]] [uxbox.frontend :as uft] [uxbox.services :as usv] [uxbox.services.svgparse :as svg] [uxbox.tests.helpers :as th])) (t/use-fixtures :each th/state-init) (t/deftest parse-svg-test (t/testing "parsing valid svg 1" (let [image (slurp (io/resource "uxbox/tests/_files/sample1.svg")) result (svg/parse-string image)] (t/is (contains? result :width)) (t/is (contains? result :height)) (t/is (contains? result :view-box)) (t/is (contains? result :name)) (t/is (contains? result :content)) (t/is (= 500.0 (:width result))) (t/is (= 500.0 (:height result))) (t/is (= [0.0 0.0 500.00001 500.00001] (:view-box result))) (t/is (= "lock.svg" (:name result))))) (t/testing "parsing valid svg 2" (let [image (slurp (io/resource "uxbox/tests/_files/sample2.svg")) result (svg/parse-string image)] (t/is (contains? result :width)) (t/is (contains? result :height)) (t/is (contains? result :view-box)) (t/is (contains? result :name)) (t/is (contains? result :content)) (t/is (= 500.0 (:width result))) (t/is (= 500.0 (:height result))) (t/is (= [0.0 0.0 500.0 500.00001] (:view-box result))) (t/is (= "play.svg" (:name result))))) (t/testing "parsing invalid data 1" (let [image (slurp (io/resource "uxbox/tests/_files/sample.jpg")) [e result] (th/try-on (svg/parse-string image))] (t/is (th/exception? e)) (t/is (th/ex-info? e)) (t/is (th/ex-with-code? e :uxbox.services.svgparse/invalid-input)))) (t/testing "parsing invalid data 2" (let [[e result] (th/try-on (svg/parse-string ""))] (t/is (th/exception? e)) (t/is (th/ex-info? e)) (t/is (th/ex-with-code? e :uxbox.services.svgparse/invalid-input)))) (t/testing "parsing invalid data 3" (let [[e result] (th/try-on (svg/parse-string ""))] (t/is (th/exception? e)) (t/is (th/ex-info? e)) (t/is (th/ex-with-code? e :uxbox.services.svgparse/invalid-result)))) (t/testing "valid http request" (let [image (slurp (io/resource "uxbox/tests/_files/sample2.svg")) path "/api/svg/parse"] (with-server {:handler (uft/routes)} (let [rsp (th/request {:method :post :path path :body image :raw? true})] (t/is (= 200 (:status rsp))) (t/is (contains? (:body rsp) :width)) (t/is (contains? (:body rsp) :height)) (t/is (contains? (:body rsp) :view-box)) (t/is (contains? (:body rsp) :name)) (t/is (contains? (:body rsp) :content)) (t/is (= 500.0 (:width (:body rsp)))) (t/is (= 500.0 (:height (:body rsp)))) (t/is (= [0.0 0.0 500.0 500.00001] (:view-box (:body rsp)))) (t/is (= "play.svg" (:name (:body rsp)))))))) (t/testing "invalid http request" (let [path "/api/svg/parse" image ""] (with-server {:handler (uft/routes)} (let [rsp (th/request {:method :post :path path :body image :raw? true})] (t/is (= 400 (:status rsp))) (t/is (= :validation (get-in rsp [:body :type]))) (t/is (= ::svg/invalid-result (get-in rsp [:body :code]))))))) )