(ns auto-ap.parse.templates-test (:require [auto-ap.parse :as sut] [clojure.test :refer [deftest is testing]] [clojure.java.io :as io] [clojure.string :as str] [clj-time.core :as time])) (deftest parse-bonanza-produce-invoice-03881260 (testing "Should parse Bonanza Produce invoice 03881260 with customer identifier including address" (let [pdf-file (io/file "dev-resources/INVOICE - 03881260.pdf") ;; Extract text same way parse-file does pdf-text (:out (clojure.java.shell/sh "pdftotext" "-layout" (str pdf-file) "-")) results (sut/parse pdf-text) result (first results)] (is (some? results) "parse should return a result") (is (some? result) "Template should match and return a result") (when result (println "DEBUG: customer-identifier =" (pr-str (:customer-identifier result))) (println "DEBUG: account-number =" (pr-str (:account-number result))) (is (= "Bonanza Produce" (:vendor-code result))) (is (= "03881260" (:invoice-number result))) ;; Date is parsed as org.joda.time.DateTime - compare year/month/day (let [d (:date result)] (is (= 2026 (time/year d))) (is (= 1 (time/month d))) (is (= 20 (time/day d)))) ;; Customer identifier components (is (= "NICK THE GREEK" (:customer-identifier result))) (is (= "600 VISTA WAY" (str/trim (:account-number result)))) (is (= "MILPITAS, CA 95035" (str/trim (:location result)))) ;; Total is parsed as string, not number (per current behavior) (is (= "23.22" (:total result)))))))