From e2ced4351ad25bf7d452c08bd0e5860ca60640ea Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Fri, 8 Jul 2016 15:56:00 +0200 Subject: [PATCH 1/4] Refer new branches to an existing baseline though that existing baseline is now hard-coded as '2' :) --- .../com/xebia/visualreview/resource.clj | 25 +++++++++++++------ .../xebia/visualreview/service/baseline.clj | 8 ++++++ .../com/xebia/visualreview/service/run.clj | 11 ++++++-- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/main/clojure/com/xebia/visualreview/resource.clj b/src/main/clojure/com/xebia/visualreview/resource.clj index 68e0125..a54ae39 100644 --- a/src/main/clojure/com/xebia/visualreview/resource.clj +++ b/src/main/clojure/com/xebia/visualreview/resource.clj @@ -29,7 +29,8 @@ [com.xebia.visualreview.service.suite :as suite] [com.xebia.visualreview.service.run :as run] [com.xebia.visualreview.service.cleanup :as cleanup] - [com.xebia.visualreview.service.baseline :as baseline]) + [com.xebia.visualreview.service.baseline :as baseline] + [com.xebia.visualreview.service.branch :as branch]) (:import [java.util Map])) ;;;;;;;;; Projects ;;;;;;;;;;; @@ -128,7 +129,8 @@ ;;;;;;;;;;; Runs ;;;;;;;;;;; (def ^:private run-create-schema - {:projectName [String []] + {:branchName [String []] + :projectName [String []] :suiteName [String [::v/non-empty]]}) (defn run-resource [run-id] @@ -169,16 +171,22 @@ (when-let [suite (and (or +; (branch/branch-exists (tx-conn ctx) (-> ctx ::data :project-name) (-> ctx ::data :suite-name) (-> ctx ::data :branch-name)) + (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 @@ -224,10 +232,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 meta mask {:keys [tempfile]}] +(defn- process-screenshot [conn suite-id run-id branch-name screenshot-name properties 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 (:id baseline-screenshot) screenshot-id mask)] (when (and baseline-screenshot (zero? (:percentage diff))) @@ -260,7 +268,8 @@ (ex/try+ (let [{:keys [meta mask file properties 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 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 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] From 5a53422f132593a5d98f736c75e2759e130c7a48 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Sun, 31 Jul 2016 15:38:55 +0200 Subject: [PATCH 2/4] Add branch.clj --- .../com/xebia/visualreview/service/branch.clj | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/clojure/com/xebia/visualreview/service/branch.clj diff --git a/src/main/clojure/com/xebia/visualreview/service/branch.clj b/src/main/clojure/com/xebia/visualreview/service/branch.clj new file mode 100644 index 0000000..ed55450 --- /dev/null +++ b/src/main/clojure/com/xebia/visualreview/service/branch.clj @@ -0,0 +1,15 @@ +(ns com.xebia.visualreview.service.branch + (:require [com.xebia.visualreview.service.persistence.util :as putil] + [com.xebia.visualreview.service.service-util :as sutil])) + +(defn branch-exists + "Checks if a branch exists. Returns the run id's of runs of this branch (I think.)." + [conn project-name suite-name branch-name] + (putil/query-single conn + ["SELECT run.id FROM run + JOIN suite ON run.suite_id = suite.id + JOIN project ON suite.project_id = project.id + WHERE project.name = ? + AND suite.name = ? + AND run.branch_name = ?" project-name suite-name branch-name] + )) \ No newline at end of file From 8f126a3d021353e9e7b58f4d573772ef35587ee7 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Sun, 31 Jul 2016 15:50:39 +0200 Subject: [PATCH 3/4] Use 'get-baseline-branch-by-suitename' instead of 'branch-exists' --- .../clojure/com/xebia/visualreview/resource.clj | 4 +--- .../com/xebia/visualreview/service/branch.clj | 15 --------------- 2 files changed, 1 insertion(+), 18 deletions(-) delete mode 100644 src/main/clojure/com/xebia/visualreview/service/branch.clj diff --git a/src/main/clojure/com/xebia/visualreview/resource.clj b/src/main/clojure/com/xebia/visualreview/resource.clj index a54ae39..1e3088e 100644 --- a/src/main/clojure/com/xebia/visualreview/resource.clj +++ b/src/main/clojure/com/xebia/visualreview/resource.clj @@ -29,8 +29,7 @@ [com.xebia.visualreview.service.suite :as suite] [com.xebia.visualreview.service.run :as run] [com.xebia.visualreview.service.cleanup :as cleanup] - [com.xebia.visualreview.service.baseline :as baseline] - [com.xebia.visualreview.service.branch :as branch]) + [com.xebia.visualreview.service.baseline :as baseline]) (:import [java.util Map])) ;;;;;;;;; Projects ;;;;;;;;;;; @@ -171,7 +170,6 @@ (when-let [suite (and (or -; (branch/branch-exists (tx-conn ctx) (-> ctx ::data :project-name) (-> ctx ::data :suite-name) (-> ctx ::data :branch-name)) (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) diff --git a/src/main/clojure/com/xebia/visualreview/service/branch.clj b/src/main/clojure/com/xebia/visualreview/service/branch.clj deleted file mode 100644 index ed55450..0000000 --- a/src/main/clojure/com/xebia/visualreview/service/branch.clj +++ /dev/null @@ -1,15 +0,0 @@ -(ns com.xebia.visualreview.service.branch - (:require [com.xebia.visualreview.service.persistence.util :as putil] - [com.xebia.visualreview.service.service-util :as sutil])) - -(defn branch-exists - "Checks if a branch exists. Returns the run id's of runs of this branch (I think.)." - [conn project-name suite-name branch-name] - (putil/query-single conn - ["SELECT run.id FROM run - JOIN suite ON run.suite_id = suite.id - JOIN project ON suite.project_id = project.id - WHERE project.name = ? - AND suite.name = ? - AND run.branch_name = ?" project-name suite-name branch-name] - )) \ No newline at end of file From 03db5ded77fe0f4e541636a596aa359a02b3d0a8 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Sun, 31 Jul 2016 15:59:13 +0200 Subject: [PATCH 4/4] Invoke create-run with branch name parameter --- .../com/xebia/visualreview/itest/run_test.clj | 12 ++++++------ .../com/xebia/visualreview/itest/screenshot_test.clj | 2 +- .../com/xebia/visualreview/itest/suite_test.clj | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) 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)