All tests pass again.
This commit is contained in:
2043
resources/schema.edn
Normal file
2043
resources/schema.edn
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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))
|
||||||
|
|||||||
@@ -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)))]
|
||||||
|
|||||||
@@ -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))))))))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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")])
|
||||||
|
|||||||
Reference in New Issue
Block a user