diff --git a/src/integration/clojure/com/xebia/visualreview/itest/run_test.clj b/src/integration/clojure/com/xebia/visualreview/itest/run_test.clj index 99fd8cf..c33c89c 100644 --- a/src/integration/clojure/com/xebia/visualreview/itest/run_test.clj +++ b/src/integration/clojure/com/xebia/visualreview/itest/run_test.clj @@ -27,7 +27,7 @@ (testing "stores and retrieves a run" (let [project-id (project/create-project! mock/*conn* "some project") suite-id (suite/create-suite-for-project! mock/*conn* "some project" "some suite") - run-id (run/create-run! mock/*conn* suite-id) + run-id (run/create-run! mock/*conn* suite-id "master") run (run/get-run mock/*conn* run-id)] (is (= (:id run) run-id)) (is (= (:project-id run) project-id)) @@ -40,9 +40,9 @@ (testing "retrieves a list of runs" (let [project-id (project/create-project! mock/*conn* "some project") suite-id (suite/create-suite-for-project! mock/*conn* "some project" "some suite") - run-1 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id)) - run-2 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id)) - run-3 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id)) + run-1 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id "master")) + run-2 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id "master")) + run-3 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id "master")) runs (run/get-runs mock/*conn* project-id suite-id)] (is (= (count runs) 3)) (is (= (nth runs 0) run-3)) @@ -55,9 +55,9 @@ created-project (project/get-project-by-id mock/*conn* project-id) suite-id (suite/create-suite-for-project! mock/*conn* "project name" "suite name") suite (suite/get-suite-by-id mock/*conn* suite-id) - run-id-1 (run/create-run! mock/*conn* suite-id) + run-id-1 (run/create-run! mock/*conn* suite-id "master") run-1 (run/get-run mock/*conn* run-id-1) - run-id-2(run/create-run! mock/*conn* suite-id) + run-id-2(run/create-run! mock/*conn* suite-id "master") run-2 (run/get-run mock/*conn* run-id-2) deleted-run (run/delete-run! mock/*conn* run-id-1) diff --git a/src/integration/clojure/com/xebia/visualreview/itest/screenshot_test.clj b/src/integration/clojure/com/xebia/visualreview/itest/screenshot_test.clj index d079bc0..d52cb02 100644 --- a/src/integration/clojure/com/xebia/visualreview/itest/screenshot_test.clj +++ b/src/integration/clojure/com/xebia/visualreview/itest/screenshot_test.clj @@ -31,7 +31,7 @@ (testing "Storing and retrieving a screenshot based on a screenshot-id" (project/create-project! mock/*conn* "myProject") (let [suite-id (suite/create-suite-for-project! mock/*conn* "myProject" "mySuite") - run-id (run/create-run! mock/*conn* suite-id) + run-id (run/create-run! mock/*conn* suite-id "master") image-file (io/as-file (io/resource "tapir_hat.png")) screenshot-id (s/insert-screenshot! mock/*conn* run-id "myScreenshot" {:browser "chrome" :os "windows"} {:version "4.0"} image-file) screenshot (s/get-screenshot-by-id mock/*conn* screenshot-id)] diff --git a/src/integration/clojure/com/xebia/visualreview/itest/suite_test.clj b/src/integration/clojure/com/xebia/visualreview/itest/suite_test.clj index e202887..cd3128a 100644 --- a/src/integration/clojure/com/xebia/visualreview/itest/suite_test.clj +++ b/src/integration/clojure/com/xebia/visualreview/itest/suite_test.clj @@ -52,8 +52,8 @@ (let [project-id (project/create-project! mock/*conn* "some project") project (project/get-project-by-id mock/*conn* project-id) suite-id (suite/create-suite-for-project! mock/*conn* "some project" "some suite") - run-1 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id)) - run-2 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id)) + run-1 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id "master")) + run-2 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id "master")) full-suite (suite/get-full-suite mock/*conn* project-id suite-id)] (is (= full-suite {:name "some suite" :project project :id suite-id :runs [run-2 run-1]}))))) @@ -64,10 +64,10 @@ created-project (project/get-project-by-id mock/*conn* project-id) suite-id-1 (suite/create-suite-for-project! mock/*conn* "project name" "suite name") suite-1 (suite/get-suite-by-id mock/*conn* suite-id-1) - run-1 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id-1)) + run-1 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id-1 "master")) suite-id-2 (suite/create-suite-for-project! mock/*conn* "project name" "suite name 2") suite-2 (suite/get-suite-by-id mock/*conn* suite-id-2) - run-2 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id-2)) + run-2 (run/get-run mock/*conn* (run/create-run! mock/*conn* suite-id-2 "master")) deleted-suite (suite/delete-suite! mock/*conn* suite-id-1) suite-1-after-deletion (suite/get-suite-by-id mock/*conn* suite-id-1) diff --git a/src/main/clojure/com/xebia/visualreview/resource.clj b/src/main/clojure/com/xebia/visualreview/resource.clj index 59b9bac..4e6e095 100644 --- a/src/main/clojure/com/xebia/visualreview/resource.clj +++ b/src/main/clojure/com/xebia/visualreview/resource.clj @@ -128,7 +128,8 @@ ;;;;;;;;;;; Runs ;;;;;;;;;;; (def ^:private run-create-schema - {:projectName [String []] + {:branchName [String []] + :projectName [String []] :suiteName [String [::v/non-empty]]}) (defn run-resource [run-id] @@ -168,17 +169,22 @@ {::runs runs ::suite suite})) (when-let [suite (and + (or + (baseline/get-baseline-branch-by-suitename (tx-conn ctx) (-> ctx ::data :suite-name) (-> ctx ::data :branch-name)) + (baseline/create-baseline-branch! (tx-conn ctx) 2 (-> ctx ::data :branch-name)) + true) (or (project/get-project-by-name (tx-conn ctx) (-> ctx ::data :project-name)) (project/create-project! (tx-conn ctx) (-> ctx ::data :project-name))) (or (suite/get-suite-by-name (tx-conn ctx) (-> ctx ::data :project-name) (-> ctx ::data :suite-name)) (suite/get-suite-by-id (tx-conn ctx) - (suite/create-suite-for-project! (tx-conn ctx) (-> ctx ::data :project-name) (-> ctx ::data :suite-name)))))] - {::suite suite}))) + (suite/create-suite-for-project! (tx-conn ctx) (-> ctx ::data :project-name) (-> ctx ::data :suite-name)))) + )] + {::suite suite}))) :can-post-to-missing? false :post! (fn [ctx] - (let [new-run-id (run/create-run! (tx-conn ctx) (:id (::suite ctx))) + (let [new-run-id (run/create-run! (tx-conn ctx) (:id (::suite ctx)) (-> ctx ::data :branch-name)) run (run/get-run (tx-conn ctx) new-run-id)] {::run run})) :handle-created ::run @@ -225,10 +231,10 @@ (.delete (:diff diff-report)) (analysis/get-diff conn run-id new-diff-id)))) -(defn- process-screenshot [conn suite-id run-id screenshot-name properties compare-settings meta mask {:keys [tempfile]}] +(defn- process-screenshot [conn suite-id run-id branch-name screenshot-name properties compare-settings meta mask {:keys [tempfile]}] (let [screenshot-id (screenshot/insert-screenshot! conn run-id screenshot-name properties meta tempfile) screenshot (screenshot/get-screenshot-by-id conn screenshot-id) - baseline-screenshot (baseline/get-baseline-screenshot conn suite-id "master" screenshot-name properties) + baseline-screenshot (baseline/get-baseline-screenshot conn suite-id branch-name screenshot-name properties) before-file (when baseline-screenshot (io/get-file (image/get-image-path conn (:image-id baseline-screenshot)))) diff (proces-diff conn run-id before-file tempfile compare-settings (:id baseline-screenshot) screenshot-id mask)] (when (and baseline-screenshot (zero? (:percentage diff))) @@ -262,7 +268,8 @@ (ex/try+ (let [{:keys [meta mask file properties compare-settings screenshot-name]} (::data ctx) {suite-id :suite-id run-id :id} (::run ctx) - screenshot (process-screenshot (tx-conn ctx) suite-id run-id screenshot-name properties compare-settings meta mask file)] + branch-name (run/get-branch-name-by-run-id (tx-conn ctx) run-id) + screenshot (process-screenshot (tx-conn ctx) suite-id run-id branch-name screenshot-name properties compare-settings meta mask file)] {::screenshot screenshot ::new? true}) (catch [:type :service-exception :code ::screenshot/screenshot-cannot-store-in-db-already-exists] _ {::screenshot {:error "Screenshot with identical name and properties was already uploaded in this run" diff --git a/src/main/clojure/com/xebia/visualreview/service/baseline.clj b/src/main/clojure/com/xebia/visualreview/service/baseline.clj index cc23b84..bd159d2 100644 --- a/src/main/clojure/com/xebia/visualreview/service/baseline.clj +++ b/src/main/clojure/com/xebia/visualreview/service/baseline.clj @@ -131,6 +131,14 @@ :subtype ::unique-constraint-violation :message (.getMessage e)}))))) +(defn get-baseline-branch-by-suitename [conn suite-name branch-name] + {:pre [(string? suite-name) (string? branch-name)]} + (putil/query-single conn + ["SELECT br.* FROM baseline_branch br + JOIN baseline_tree tr ON tr.id = br.baseline_tree + JOIN suite on tr.suite_id = suite.id + WHERE suite.name = ? AND br.name = ?" suite-name branch-name])) + (defn get-baseline-branch [conn suite-id branch-name] {:pre [(number? suite-id) (string? branch-name)]} (putil/query-single conn diff --git a/src/main/clojure/com/xebia/visualreview/service/run.clj b/src/main/clojure/com/xebia/visualreview/service/run.clj index c14dad5..85aec96 100644 --- a/src/main/clojure/com/xebia/visualreview/service/run.clj +++ b/src/main/clojure/com/xebia/visualreview/service/run.clj @@ -28,8 +28,9 @@ If the suite does not yet exist it will be created along with a new baseline. Creating a run also creates an analysis for the run, this may change in the future. Returns the created run id." - [conn suite-id] - (let [branch (baseline/get-baseline-branch conn suite-id "master") + [conn suite-id branch-name] + + (let [branch (baseline/get-baseline-branch conn suite-id branch-name) new-run-id (putil/insert-single! conn :run {:suite-id suite-id :start-time (Timestamp. (.getTime (Date.))) :branch-name (:name branch) @@ -38,6 +39,12 @@ _ (analysis/create-analysis! conn (:head branch) new-run-id)] new-run-id)) +(defn get-branch-name-by-run-id + [conn run-id] + (:branch-name (putil/query-single conn + ["SELECT run.branch_name FROM run WHERE run.id = ?" run-id]) + )) + (defn get-run "Returns the data for the given run-id" [conn run-id]