(ns auto-ap.integration.routes.ezcater-xls (:require [auto-ap.integration.util :refer [setup-test-data test-client wrap-setup]] [auto-ap.routes.ezcater-xls :as sut] [clojure.java.io :as io] [clojure.test :refer [deftest is testing use-fixtures]])) (use-fixtures :each wrap-setup) (deftest stream->sales-orders (with-redefs [auto-ap.solr/impl (auto-ap.solr/->InMemSolrClient (atom {}))] (testing "Should import nothing when there are no clients" (with-open [s (io/input-stream (io/resource "sample-ezcater.xlsx"))] (is (= [:missing "Nick The Greek (Santa Cruz)"] (first (sut/stream->sales-orders s)))))) (testing "should import for a single client" (let [{:strs [test-client]} (setup-test-data [(test-client :db/id "test-client" :client/code "NGOP" :client/locations ["DT"] :client/name "The client" :client/matches ["Nick the Greek (Elk Grove)"])])] (with-open [s (io/input-stream (io/resource "sample-ezcater.xlsx"))] (is (seq (sut/stream->sales-orders s)))) (with-open [s (io/input-stream (io/resource "sample-ezcater.xlsx"))] (is (= #:sales-order {:vendor :vendor/ccp-ezcater :service-charge -95.9 :date #inst "2023-04-03T18:30:00" :reference-link "ZA2-320" :charges [#:charge{:type-name "CARD" :date #inst "2023-04-03T18:30:00" :client test-client :location "DT" :external-id "ezcater/charge/17592186045501-DT-ZA2-320-0" :processor :ccp-processor/ezcater :total 516.12 :tip 0.0}] :client test-client :tip 0.0 :tax 37.12 :external-id "ezcater/order/17592186045501-DT-ZA2-320" :total 516.12 :line-items [#:order-line-item{:external-id "ezcater/order/17592186045501-DT-ZA2-320-0" :item-name "EZCater Catering" :category "EZCater Catering" :discount 0.0 :tax 37.12 :total 516.12}] :discount 0.0 :location "DT" :returns 0.0} (last (first (filter (comp #{:order} first) (sut/stream->sales-orders s)))))))))))