All tests pass again.

This commit is contained in:
2023-03-20 15:59:57 -07:00
parent 9260834135
commit 1497549d64
6 changed files with 2092 additions and 47 deletions

2043
resources/schema.edn Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -129,28 +129,18 @@
allowance allowance
search-pattern) search-pattern)
(sequence xform)) (sequence xform))
(->> (dc/q '[:find ?n (pull ?i pattern) ?s (->> (dc/q '[:find ?n (pull ?i pattern) ?s
:in $ ?q ?allowance pattern :in $ [[?i ?n ?s]] pattern
:where [(fulltext $ :account/search-terms ?q) [[?i ?n _ ?s]]] :where (or [?i :account/applicability :account-applicability/global]
[?i :account/numeric-code ?numeric-code] [?i :account/applicability :account-applicability/optional])]
(or [?i :account/applicability :account-applicability/global]
[?i :account/applicability :account-applicability/optional])]
(dc/db conn) (dc/db conn)
query (search/search {:q query} "account")
allowance
search-pattern) search-pattern)
(concat (when client (concat (when client
(dc/q '[:find ?n (pull ?a pattern) ?s (dc/q '[:find ?n (pull ?i pattern) ?s
:in $ ?c ?q ?allowance pattern :in $ [[?i ?n ?s]] pattern]
:where
[?i :account-client-override/client ?c]
[(fulltext $ :account-client-override/search-terms ?q) [[?i ?n _ ?s]]]
[?a :account/client-overrides ?i]
[?a :account/numeric-code ?numeric-code]]
(dc/db conn) (dc/db conn)
client (search/search {:q query :client (str client)} "account-client-override")
query
allowance
search-pattern))) search-pattern)))
(sort-by (comp - last)) (sort-by (comp - last))
(sequence xform))) (sequence xform)))
@@ -166,6 +156,7 @@
(dc/db conn))) (dc/db conn)))
:when (:account/numeric-code (:account/_client-overrides result))] :when (:account/numeric-code (:account/_client-overrides result))]
{:id (:db/id (:account/_client-overrides result)) {:id (:db/id (:account/_client-overrides result))
:account-client-override-id (:db/id result)
:text (:account-client-override/search-terms result) :text (:account-client-override/search-terms result)
:client (str (:db/id (:account-client-override/client result))) :client (str (:db/id (:account-client-override/client result)))
:numeric-code (:account/numeric-code (:account/_client-overrides result)) :numeric-code (:account/numeric-code (:account/_client-overrides result))

View File

@@ -1,4 +1,5 @@
(ns auto-ap.search (ns auto-ap.search
(:require [config.core :refer [env]])
(:import (:import
(java.nio.file Paths) (java.nio.file Paths)
(org.apache.lucene.analysis.standard StandardAnalyzer) (org.apache.lucene.analysis.standard StandardAnalyzer)
@@ -9,7 +10,7 @@
(org.apache.lucene.store FSDirectory))) (org.apache.lucene.store FSDirectory)))
(defn full-index-query [results index-name] (defn full-index-query [results index-name]
(let [directory (FSDirectory/open (Paths/get (java.net.URI. (str "file:///tmp/" index-name)))) (let [directory (FSDirectory/open (Paths/get (java.net.URI. (str "file:///tmp/search" (:dd-env env) "/" index-name))))
analyzer (StandardAnalyzer.) analyzer (StandardAnalyzer.)
index-writer-config (IndexWriterConfig. analyzer) index-writer-config (IndexWriterConfig. analyzer)
index-writer (IndexWriter. directory index-writer-config)] index-writer (IndexWriter. directory index-writer-config)]
@@ -52,20 +53,21 @@
([n index-name] ([n index-name]
(search n index-name [])) (search n index-name []))
([n index-name other-keys] ([n index-name other-keys]
(let [directory (FSDirectory/open (Paths/get (java.net.URI. (str "file:///tmp/" index-name)))) (let [directory (FSDirectory/open (Paths/get (java.net.URI. (str "file:///tmp/search" (:dd-env env) "/" index-name))))
index-reader (DirectoryReader/open directory) index-reader (DirectoryReader/open directory)
index-searcher (IndexSearcher. index-reader)] index-searcher (IndexSearcher. index-reader)]
(for [x (seq (.scoreDocs (.search index-searcher (make-query n) 10)))] (for [x (seq (.scoreDocs (.search index-searcher (make-query n) 10)))]
(into (into
[(.get (.doc index-searcher (.-doc x)) "id") [(Long/parseLong (.get (.doc index-searcher (.-doc x)) "id"))
(.get (.doc index-searcher (.-doc x)) "name")] (.get (.doc index-searcher (.-doc x)) "name")
(.-score x)]
(map (fn [o] (map (fn [o]
(.get (.doc index-searcher (.-doc x)) o)) (.get (.doc index-searcher (.-doc x)) o))
other-keys))))) other-keys)))))
) )
(defn search-ids [n index-name] (defn search-ids [n index-name]
(let [directory (FSDirectory/open (Paths/get (java.net.URI. (str "file:///tmp/" index-name)))) (let [directory (FSDirectory/open (Paths/get (java.net.URI. (str "file:///tmp/search" (:dd-env env) "/" index-name))))
index-reader (DirectoryReader/open directory) index-reader (DirectoryReader/open directory)
index-searcher (IndexSearcher. index-reader)] index-searcher (IndexSearcher. index-reader)]
(for [x (seq (.scoreDocs (.search index-searcher (make-query n) 100)))] (for [x (seq (.scoreDocs (.search index-searcher (make-query n) 100)))]

View File

@@ -9,6 +9,13 @@
(deftest test-account-search (deftest test-account-search
(testing "It should find matching account names" (testing "It should find matching account names"
(dc/transact conn {:tx-data [{:account/name "Food Research"
:db/ident :client-specific-account
:account/numeric-code 51100
:account/search-terms "Food Research"
:account/applicability :account-applicability/global
:account/default-allowance :allowance/allowed}]})
(sut/rebuild-search-index)
(is (> (count (sut/search {:id (admin-token)} (is (> (count (sut/search {:id (admin-token)}
{:query "Food Research"} {:query "Food Research"}
nil nil
@@ -16,7 +23,7 @@
0))) 0)))
(testing "It should find exact matches by numbers" (testing "It should find exact matches by numbers"
(is (= (count (sut/search {:id (admin-token)} (is (= (count (sut/search {:id (admin-token)}
{:query "5110"} {:query "51100"}
nil nil
)) ))
1))) 1)))
@@ -27,10 +34,11 @@
:account/search-terms "CLIENTSPECIFIC" :account/search-terms "CLIENTSPECIFIC"
:account/applicability :account-applicability/customized :account/applicability :account-applicability/customized
:account/default-allowance :allowance/allowed}]}) :account/default-allowance :allowance/allowed}]})
(is (= 0 (count (sut/search {:id (admin-token)} (sut/rebuild-search-index)
{:query "CLIENTSPECIFIC"} (is (= [] (sut/search {:id (admin-token)}
nil {:query "CLIENTSPECIFIC"}
)))) nil
)))
(testing "It should show up for the client specific version" (testing "It should show up for the client specific version"
(let [client-id (-> (dc/transact conn {:tx-data [{:client/name "CLIENT" (let [client-id (-> (dc/transact conn {:tx-data [{:client/name "CLIENT"
@@ -41,6 +49,7 @@
:account-client-override/search-terms "HELLOWORLD"}]}]}) :account-client-override/search-terms "HELLOWORLD"}]}]})
:tempids :tempids
(get "client"))] (get "client"))]
(sut/rebuild-search-index)
(is (= 1 (count (sut/search {:id (admin-token)} (is (= 1 (count (sut/search {:id (admin-token)}
{:query "HELLOWORLD" {:query "HELLOWORLD"
:client_id client-id} :client_id client-id}
@@ -76,6 +85,7 @@
:account/default-allowance :allowance/warn :account/default-allowance :allowance/warn
:account/vendor-allowance :allowance/warn :account/vendor-allowance :allowance/warn
:account/invoice-allowance :allowance/warn}]}) :account/invoice-allowance :allowance/warn}]})
(sut/rebuild-search-index)
(is (some? (:warning (first (sut/search {:id (admin-token)} (is (some? (:warning (first (sut/search {:id (admin-token)}
{:query "WARNING" {:query "WARNING"
:allowance :global} :allowance :global}
@@ -97,10 +107,11 @@
:account/default-allowance :allowance/admin-only :account/default-allowance :allowance/admin-only
:account/vendor-allowance :allowance/admin-only :account/vendor-allowance :allowance/admin-only
:account/invoice-allowance :allowance/admin-only}]}) :account/invoice-allowance :allowance/admin-only}]})
(sut/rebuild-search-index)
(is (= 1 (count (sut/search {:id (admin-token)} (is (= 1 (count (sut/search {:id (admin-token)}
{:query "ADMINONLY"} {:query "ADMINONLY"}
nil)))) nil))))
(is (= 0 (count (sut/search {:id (user-token 1)} (is (= 0 (count (sut/search {:id (user-token)}
{:query "ADMINONLY"} {:query "ADMINONLY"}
nil))))) nil)))))
@@ -120,6 +131,7 @@
:db/id "vendor"}]}) :db/id "vendor"}]})
:tempids :tempids
(get "vendor"))] (get "vendor"))]
(sut/rebuild-search-index)
(is (= 0 (count (sut/search {:id (admin-token)} (is (= 0 (count (sut/search {:id (admin-token)}
{:query "VENDORONLY" {:query "VENDORONLY"
:allowance :invoice} :allowance :invoice}
@@ -130,5 +142,3 @@
:allowance :invoice :allowance :invoice
:vendor_id vendor-id} :vendor_id vendor-id}
nil)))))))) nil))))))))

View File

@@ -1,20 +1,17 @@
(ns auto-ap.integration.util (ns auto-ap.integration.util
(:require (:require [datomic.client.api :as dc]
[auto-ap.datomic :refer [conn uri]] [auto-ap.datomic :refer [client conn transact-schema]]
[clj-time.core :as time] [clj-time.core :as time]))
[datomic.api :as dc]
[auto-ap.datomic.migrate :as migrate])
)
(defn wrap-setup (defn wrap-setup
[f] [f]
(with-redefs [auto-ap.datomic/uri "datomic:mem://datomic-transactor:4334/invoice"] (with-redefs [auto-ap.datomic/client (dc/client {:server-type :dev-local
(dc/create-database uri) :system "dev"})]
(with-redefs [auto-ap.datomic/conn (dc/connect uri)] (dc/create-database client {:db-name "test"})
(migrate/migrate conn) (with-redefs [auto-ap.datomic/conn (dc/connect client {:db-name "test"})]
(transact-schema conn)
(f) (f)
(dc/delete-database uri)))) (dc/delete-database client {:db-name "test"}))))
(defn admin-token [] (defn admin-token []
{:user "TEST ADMIN" {:user "TEST ADMIN"

View File

@@ -1,15 +1,16 @@
(ns auto-ap.routes.invoice-test (ns auto-ap.routes.invoice-test
(:require (:require
[auto-ap.datomic :refer [conn]] [auto-ap.datomic :refer [conn]]
[auto-ap.integration.util :refer [user-token wrap-setup]] [auto-ap.datomic.clients :refer [rebuild-search-index]]
[auto-ap.integration.util :refer [admin-token wrap-setup]]
[auto-ap.routes.invoices :as sut] [auto-ap.routes.invoices :as sut]
[datomic.client.api :as dc]
[clj-time.coerce :as coerce] [clj-time.coerce :as coerce]
[clojure.test :as t])) [clojure.test :as t]
[datomic.client.api :as dc]))
(t/use-fixtures :each wrap-setup) (t/use-fixtures :each wrap-setup)
(def user (user-token)) (def user (admin-token))
(def client {:client/code "ABC" (def client {:client/code "ABC"
:client/name "ABC" :client/name "ABC"
@@ -39,6 +40,7 @@
(t/deftest import-uploaded-invoices (t/deftest import-uploaded-invoices
(t/testing "It should import one" (t/testing "It should import one"
(dc/transact conn {:tx-data [client expense-account vendor]}) (dc/transact conn {:tx-data [client expense-account vendor]})
(rebuild-search-index)
(t/is (= 0 (invoice-count-for-client [:client/code "ABC"]))) (t/is (= 0 (invoice-count-for-client [:client/code "ABC"])))
(sut/import-uploaded-invoice user [(assoc invoice :customer-identifier "ABC")]) (sut/import-uploaded-invoice user [(assoc invoice :customer-identifier "ABC")])