Skip to content
This repository was archived by the owner on Aug 5, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand All @@ -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))
Expand All @@ -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)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]})))))

Expand All @@ -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)
Expand Down
21 changes: 14 additions & 7 deletions src/main/clojure/com/xebia/visualreview/resource.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)))
Expand Down Expand Up @@ -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"
Expand Down
8 changes: 8 additions & 0 deletions src/main/clojure/com/xebia/visualreview/service/baseline.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
11 changes: 9 additions & 2 deletions src/main/clojure/com/xebia/visualreview/service/run.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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]
Expand Down