(ns dda.build.c4k.domain-test
  (:require
   [clojure.test :refer [deftest is]]
   [clojure.spec.test.alpha :as st]
   [dda.build.c4k.domain :as cut]))

(st/instrument `cut/config-path)
(st/instrument `cut/auth-path)
(st/instrument `cut/output-path)
(st/instrument `cut/clean-build-dir-command)
(st/instrument `cut/c4k-uberjar-command)
(st/instrument `cut/c4k-graalvm-command)
(st/instrument `cut/create-c4k-config)

(deftest should-calculate-config-path
  (is (= "../../target/dda-backup/config.yaml"
         (cut/config-path {:name "dda-backup"
                           :project-root-path "../.."
                           :build-dir-name "target"
                           :version "4.11.8-dev"
                           :stage "dev"
                           :debug false
                           :dry-run false
                           :c4k-config-input "config.yaml"
                           :c4k-auth-input "auth.yaml"
                           :c4k-output "out.yaml"})))
  (is (= "../../target/dda/backup/config.yaml"
         (cut/config-path {:name "dda"
                           :module "backup"
                           :project-root-path "../.."
                           :build-dir-name "target"
                           :version "4.11.8-dev"
                           :stage "dev"
                           :debug false
                           :dry-run false
                           :c4k-config-input "config.yaml"
                           :c4k-auth-input "auth.yaml"
                           :c4k-output "out.yaml"}))))

(deftest should-calculate-auth-path
  (is (= "../../target/dda-backup/auth.yaml"
         (cut/auth-path {:name "dda-backup"
                         :project-root-path "../.."
                         :build-dir-name "target"
                         :version "4.11.8-dev"
                         :stage "dev"
                         :debug false
                         :dry-run false
                         :c4k-config-input "config.yaml"
                         :c4k-auth-input "auth.yaml"
                         :c4k-output "out.yaml"})))
  (is (= "../../target/dda/backup/auth.yaml"
         (cut/auth-path {:name "dda"
                         :module "backup"
                         :project-root-path "../.."
                         :build-dir-name "target"
                         :version "4.11.8-dev"
                         :stage "dev"
                         :debug false
                         :dry-run false
                         :c4k-config-input "config.yaml"
                         :c4k-auth-input "auth.yaml"
                         :c4k-output "out.yaml"}))))


(deftest should-calculate-output-path
  (is (= "../../target/dda-backup/out.yaml"
         (cut/output-path {:name "dda-backup"
                           :project-root-path "../.."
                           :build-dir-name "target"
                           :version "4.11.8-dev"
                           :stage "dev"
                           :debug false
                           :dry-run false
                           :c4k-config-input "config.yaml"
                           :c4k-auth-input "auth.yaml"
                           :c4k-output "out.yaml"})))
  (is (= "../../target/dda/backup/out.yaml"
         (cut/output-path {:name "dda"
                           :module "backup"
                           :project-root-path "../.."
                           :build-dir-name "target"
                           :version "4.11.8-dev"
                           :stage "dev"
                           :debug false
                           :dry-run false
                           :c4k-config-input "config.yaml"
                           :c4k-auth-input "auth.yaml"
                           :c4k-output "out.yaml"}))))

(deftest should-calculate-clean-build-dir-command
  (is (= ["rm" "-rf" "../../target/dda-backup"]
         (cut/clean-build-dir-command {:name "dda-backup"
                                       :project-root-path "../.."
                                       :build-dir-name "target"
                                       :version "4.11.8-dev"
                                       :stage "dev"
                                       :debug false
                                       :dry-run false
                                       :c4k-config-input "config.yaml"
                                       :c4k-auth-input "auth.yaml"
                                       :c4k-output "out.yaml"}))))

(deftest should-calculate-c4k-uberjar-command
  (is (= [["bash" "-c" "c4k-backup-standalone.jar ../../target/dda-backup/backup/config.yaml ../../target/dda-backup/backup/auth.yaml > ../../target/dda-backup/backup/out.yaml"]]
         (cut/c4k-uberjar-command {:name "dda-backup"
                                   :module "backup"
                                   :project-root-path "../.."
                                   :build-dir-name "target"
                                   :version "4.11.8-dev"
                                   :stage "dev"
                                   :debug false
                                   :dry-run false
                                   :c4k-config-input "config.yaml"
                                   :c4k-auth-input "auth.yaml"
                                   :c4k-output "out.yaml"}))))

(deftest should-calculate-c4k-graalvm-command
  (is (= [["bash" "-c" "c4k-backup ../../target/dda-backup/backup/config.yaml ../../target/dda-backup/backup/auth.yaml > ../../target/dda-backup/backup/out.yaml"]]
         (cut/c4k-graalvm-command {:name "dda-backup"
                                   :module "backup"
                                   :project-root-path "../.."
                                   :build-dir-name "target"
                                   :version "4.11.8-dev"
                                   :stage "dev"
                                   :debug false
                                   :dry-run false
                                   :c4k-config-input "config.yaml"
                                   :c4k-auth-input "auth.yaml"
                                   :c4k-output "out.yaml"}))))