From a49880cc94a4119c8f3c561f2559af1c90cbf4f4 Mon Sep 17 00:00:00 2001 From: Ben Sturmfels Date: Sat, 20 Sep 2025 00:19:32 +1000 Subject: [PATCH] Fix demo mode and add a test to run demo I've extracted the main functionality into the `run` function so that this can be tested without triggering the `System/exit` in `-main`. --- deps.edn | 2 +- src/core.clj | 45 ++++++++++++++++++++++++--------------------- test/core_test.clj | 8 ++++++++ 3 files changed, 33 insertions(+), 22 deletions(-) create mode 100644 test/core_test.clj diff --git a/deps.edn b/deps.edn index 8663d9e..dd8a5cc 100644 --- a/deps.edn +++ b/deps.edn @@ -1,4 +1,4 @@ -{:paths ["src" "resources" "private"] ;; Private is not include in the build +{:paths ["src" "resources" "private"] ;; Private is not included in the build :deps { org.clojure/clojure {:mvn/version "1.11.1"} org.clojure/data.csv {:mvn/version "1.0.1"} diff --git a/src/core.clj b/src/core.clj index 35a0bbe..5257e1d 100644 --- a/src/core.clj +++ b/src/core.clj @@ -48,14 +48,34 @@ (set/difference (set (keys projects)) (->> records (map :name) set))) (def demo-options - {:csv (io/resource "example-paychex-pay-item-details.csv") + {:csv (io/resource "example-paychex-pay-item-details-2025.csv") :date "2024-01-01" :period "January 2024" :total-fees 66.67M}) +(defn run [options] + (let [options (if (:demo options) (merge options demo-options) options) + {:keys [date period pay-receipt-no pay-invoice-no total-fees project]} options + {:keys [fees-receipt-no fees-invoice-no retirement-receipt-no retirement-invoice-no]} options + records (import/read-csv (:csv options)) + imported (concat (import/net-pay date period pay-invoice-no project records) + (import/individual-taxes date period pay-invoice-no retirement-invoice-no project records) + (import/employer-taxes date period pay-invoice-no project records) + (import/net-pay-ach-debit date period pay-receipt-no pay-invoice-no project records) + (import/taxes-ach-debit date period pay-receipt-no pay-invoice-no project records) + (import/fees date period fees-receipt-no fees-invoice-no total-fees project records) + (import/retirement date period retirement-receipt-no retirement-invoice-no records)) + unmatched (unmatched-employees records project)] + (when (seq unmatched) + (println + (str "Could not find these employees in the payroll:\n\n" + (str/join ", " unmatched))) + (System/exit 1)) + (doseq [i imported] + (println (import/render-transaction i))))) + (defn -main [& args] - (let [{:keys [options errors summary]} (parse-opts args cli-options) - options (if (:demo options) (merge options demo-options) options)] + (let [{:keys [options errors summary]} (parse-opts args cli-options)] (when (:help options) (println summary) (System/exit 0)) @@ -64,24 +84,7 @@ (str "The following errors occurred:\n\n" (str/join \newline errors))) (System/exit 1)) - (let [{:keys [date period pay-receipt-no pay-invoice-no total-fees project]} options - {:keys [fees-receipt-no fees-invoice-no retirement-receipt-no retirement-invoice-no]} options - records (import/read-csv (:csv options)) - imported (concat (import/net-pay date period pay-invoice-no project records) - (import/individual-taxes date period pay-invoice-no retirement-invoice-no project records) - (import/employer-taxes date period pay-invoice-no project records) - (import/net-pay-ach-debit date period pay-receipt-no pay-invoice-no project records) - (import/taxes-ach-debit date period pay-receipt-no pay-invoice-no project records) - (import/fees date period fees-receipt-no fees-invoice-no total-fees project records) - (import/retirement date period retirement-receipt-no retirement-invoice-no records)) - unmatched (unmatched-employees records project)] - (when-not (empty? unmatched) - (println - (str "Could not find these employees in the payroll:\n\n" - (str/join ", " unmatched))) - (System/exit 1)) - (doseq [i imported] - (println (import/render-transaction i)))))) + (run options))) (comment ;; Examples to exercise the importer during development. diff --git a/test/core_test.clj b/test/core_test.clj new file mode 100644 index 0000000..c9b6032 --- /dev/null +++ b/test/core_test.clj @@ -0,0 +1,8 @@ +(ns core-test + (:require [core] + [clojure.test :as t :refer [deftest is]] + [clojure.string :as str])) + +(deftest demo-produces-output + (let [output (with-out-str (core/run {:demo true}))] + (is (not (str/blank? output)))))