-
Notifications
You must be signed in to change notification settings - Fork 0
Add option to search valvonta by asiakirjapohja #921
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,7 @@ | ||
(ns solita.etp.valvonta-test | ||
(:require | ||
[clojure.core] | ||
[clojure.set] | ||
[clojure.java.io :as io] | ||
[clojure.java.jdbc :as jdbc] | ||
[clojure.test :as t] | ||
|
@@ -22,12 +24,21 @@ | |
; Mimics real handler usage with test assets | ||
(handler/handler (merge req {:db ts/*db* :aws-s3-client ts/*aws-s3-client*}))) | ||
|
||
(defn- non-null-key-to-string [m k] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Tälle olisi ehkä idiomaattisempi nimi non-nil-key->string |
||
(if (some? (k m)) (assoc m k (.toString (k m))) m)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Tässä voisi olla varmaankin .toStringin sijaan vain str-kutsu. Rivittäisin myös luettavuuden vuoksi ifin ehdon ja haarat omille riveilleen |
||
|
||
(def access-token | ||
"eyJraWQiOiJ0ZXN0LWtpZCIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJwYWFrYXl0dGFqYUBzb2xpdGEuZmkiLCJ0b2tlbl91c2UiOiJhY2Nlc3MiLCJzY29wZSI6Im9wZW5pZCIsImF1dGhfdGltZSI6MTU4MzIzMDk2OSwiaXNzIjoiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3NvbGl0YS9ldHAtY29yZS9mZWF0dXJlL0FFLTQzLWF1dGgtaGVhZGVycy1oYW5kbGluZy9ldHAtYmFja2VuZC9zcmMvbWFpbi9yZXNvdXJjZXMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTU4MzQxMzQyNCwidmVyc2lvbiI6MiwianRpIjoiNWZkZDdhMjktN2VlYS00ZjNkLWE3YTYtYzIyODQyNmY2MTJiIiwiY2xpZW50X2lkIjoidGVzdC1jbGllbnRfaWQiLCJ1c2VybmFtZSI6InRlc3QtdXNlcm5hbWUifQ.PY5_jWcdxhCyn2EpFpss7Q0R3_xH1PvHi4mxDLorpppHnciGT2kFLeutebi7XeLtTYwmttTxxg2tyUyX0_UF7zj_P-tdq-kZQlud1ENmRaUxLXO5mTFKXD7zPb6BPFNe0ewRQ7Uuv3lDk_IxOf-6i86VDYB8luyesEXq7ra4S4l8akFodW_QYBSZQnUva_CVyzsTNcmgGTyrz2NI6seT1x6Pt1uFdYI97FHKlCCWVL1Z042omfujfta8j8XkTWdhKf3dfsHRWjrw31xqOkgD7uwPKcrC0U-wIj3U0uX0Rz2Tk4T-kIq4XTkKttYpkJqOmMFAYuhk6MDjfRkPWBZhUA") | ||
|
||
(def oidc-data "eyJ0eXAiOiJKV1QiLCJraWQiOiJ0ZXN0LWtpZCIsImFsZyI6IlJTMjU2IiwiaXNzIjoidGVzdC1pc3MiLCJjbGllbnQiOiJ0ZXN0LWNsaWVudCIsInNpZ25lciI6InRlc3Qtc2lnbmVyIiwiZXhwIjoxODkzNDU2MDAwfQ.eyJzdWIiOiJwYWFrYXl0dGFqYUBzb2xpdGEuZmkiLCJjdXN0b206VklSVFVfbG9jYWxJRCI6InZ2aXJrYW1pZXMiLCJjdXN0b206VklSVFVfbG9jYWxPcmciOiJ0ZXN0aXZpcmFzdG8uZmkiLCJ1c2VybmFtZSI6InRlc3QtdXNlcm5hbWUiLCJleHAiOjE4OTM0NTYwMDAsImlzcyI6InRlc3QtaXNzIn0.BfuDVOFUReiJd6N05Re6affps_47AA0F5o-g6prmXgAnk4lB1S3k9RpovCFU3-R5Zn0p38QTiwi5dENHCHaj1A6MGHHKeYd7vBZK0VquuBxlIQH-4k1MWLvpYnkK3yuEvfmbRb3jYspCA_4N-AF21cCyjd15RiuIawLCEM0Km1DRgLhXIBta6XCGSRwaRmrT7boDRMp7hUkYPpoakCahMC70sjyuvLE0pjAy1_S09g4SkboentI7WhfsfN4uAHbKy6ViVMfsnwVVvKsM8dXav_a-6PoNGywuUbi8nHt8c20KiB_AzAEYSqxbRX1YBd0UHlYS16LbLtMBTOctCBLDMg") | ||
|
||
|
||
(defn- with-virtu-user [request] | ||
(-> request | ||
(mock/header "x-amzn-oidc-accesstoken" access-token) | ||
(mock/header "x-amzn-oidc-identity" "paakayttaja@solita.fi") | ||
(mock/header "x-amzn-oidc-data" oidc-data))) | ||
|
||
(t/deftest adding-toimenpide | ||
(t/testing "Kun uusi toimenpide lisätään, omistajille joilla on Suomi.fi-viestit käytössä lähtee viesti oikealla kuvauksella" | ||
(let [suomifi-message-sent (promise) | ||
|
@@ -46,13 +57,8 @@ | |
(:kuvaus-teksti kohde)) | ||
) | ||
(deliver suomifi-message-sent true))] | ||
(with-redefs [suomifi-viestit/send-message! assert-suomifi-message-sent] | ||
(let [kayttaja-id (first (test-kayttajat/insert! | ||
(->> (test-kayttajat/generate-adds 1) | ||
(map #(merge %1 {:virtu {:localid "vvirkamies" :organisaatio "testivirasto.fi"} | ||
:rooli 2 | ||
})) | ||
))) | ||
(with-redefs [solita.etp.service.suomifi-viestit/send-message! assert-suomifi-message-sent] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Tähän mieluummin tuo namespacen alias takaisin kuin koko fully qualified namespacen nimi |
||
(let [kayttaja-id (test-kayttajat/insert-virtu-paakayttaja!) | ||
valvonta-id (valvonta-service/add-valvonta! ts/*db* | ||
(-> {} (generators/complete valvonta-schema/ValvontaSave) | ||
(merge { | ||
|
@@ -76,9 +82,7 @@ | |
} | ||
response (handler (-> (mock/request :post (format "/api/private/valvonta/kaytto/%s/toimenpiteet" valvonta-id)) | ||
(mock/json-body body) | ||
(mock/header "x-amzn-oidc-accesstoken" access-token) | ||
(mock/header "x-amzn-oidc-identity" "paakayttaja@solita.fi") | ||
(mock/header "x-amzn-oidc-data" oidc-data) | ||
(with-virtu-user) | ||
(mock/header "Accept" "application/json"))) | ||
response-body (j/read-value (:body response) j/keyword-keys-object-mapper)] | ||
|
||
|
@@ -90,12 +94,7 @@ | |
(t/deftest fetching-valvonta | ||
(t/testing "Yksittäisen valvonnan hakeminen palauttaa vastauksen") | ||
(let [ | ||
kayttaja-id (first (test-kayttajat/insert! | ||
(->> (test-kayttajat/generate-adds 1) | ||
(map #(merge %1 {:virtu {:localid "vvirkamies" :organisaatio "testivirasto.fi"} | ||
:rooli 2 | ||
})) | ||
))) | ||
kayttaja-id (test-kayttajat/insert-virtu-paakayttaja!) | ||
valvonta-id (valvonta-service/add-valvonta! ts/*db* | ||
(-> {} | ||
(generators/complete valvonta-schema/ValvontaSave) | ||
|
@@ -110,13 +109,11 @@ | |
:havaintopaiva (LocalDate/of 2023 6 1) | ||
}))) | ||
response (handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s" valvonta-id)) | ||
(mock/header "x-amzn-oidc-accesstoken" access-token) | ||
(mock/header "x-amzn-oidc-identity" "paakayttaja@solita.fi") | ||
(mock/header "x-amzn-oidc-data" oidc-data) | ||
(with-virtu-user) | ||
(mock/header "Accept" "application/json"))) | ||
response-body (j/read-value (:body response) j/keyword-keys-object-mapper) | ||
] | ||
(t/is (:status response) 200) | ||
(t/is (= (:status response) 200)) | ||
(t/is (= response-body {:valvoja-id kayttaja-id | ||
:katuosoite "katu" | ||
:ilmoitustunnus nil | ||
|
@@ -203,9 +200,104 @@ | |
:fine 800} | ||
response (handler (-> (mock/request :post (format "/api/private/valvonta/kaytto/%s/toimenpiteet" valvonta-id)) | ||
(mock/json-body new-toimenpide) | ||
(mock/header "x-amzn-oidc-accesstoken" access-token) | ||
(mock/header "x-amzn-oidc-identity" "paakayttaja@solita.fi") | ||
(mock/header "x-amzn-oidc-data" oidc-data) | ||
(with-virtu-user) | ||
(mock/header "Accept" "application/json")))] | ||
(t/is (true? @html->pdf-called?)) | ||
(t/is (= (:status response) 201))))))) | ||
|
||
(t/deftest adding-and-fetching-valvonta | ||
(let [kayttaja-id (test-kayttajat/insert-virtu-paakayttaja!) | ||
valvonta (-> {} | ||
(generators/complete valvonta-schema/ValvontaSave) | ||
(non-null-key-to-string :havaintopaiva) ; Jackson has problems encoding local date | ||
(assoc :ilmoituspaikka-id 1) | ||
(assoc :valvoja-id kayttaja-id))] | ||
(t/testing "Uuden valvonnan luominen" | ||
(let [response (handler (-> (mock/request :post "/api/private/valvonta/kaytto") | ||
(mock/json-body valvonta) | ||
(with-virtu-user) | ||
(mock/header "Accept" "application/json"))) | ||
response-body (j/read-value (:body response) j/keyword-keys-object-mapper)] | ||
(t/is (= (:status response) 201)) | ||
(t/is (= response-body {:id 1})))) | ||
(t/testing "Luotu valvonta on tallennettu ja voidaan hakea" | ||
(let [fetch-response (handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/1")) | ||
(with-virtu-user) | ||
(mock/header "Accept" "application/json"))) | ||
fetched-valvonta (j/read-value (:body fetch-response) j/keyword-keys-object-mapper) | ||
expected-valvonta (assoc valvonta :id 1)] | ||
(t/is (= (:status fetch-response) 200)) | ||
(t/is (= fetched-valvonta expected-valvonta)))))) | ||
|
||
(t/deftest get-toimenpiteet-for-valvonta | ||
(let [kayttaja-id (test-kayttajat/insert-virtu-paakayttaja!) | ||
;; Create two valvontas | ||
valvonnat (repeatedly 2 #(-> {} | ||
(generators/complete valvonta-schema/ValvontaSave) | ||
(assoc :ilmoituspaikka-id 1 | ||
:valvoja-id kayttaja-id) | ||
((fn [valvonta] (assoc valvonta :id (valvonta-service/add-valvonta! ts/*db* valvonta)))))) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Mieluusti tämä funktion määritys tuohon ylempään letiin, niin on mielestäni luettavampi kuin että luodaan anonyymi funktio ja kutsutaan sitä heti samassa yhteydessä |
||
;; Create 6 toimenpide for each valvonta | ||
_ (doall (->> (repeatedly 12 (fn [] (generators/complete {} valvonta-schema/ToimenpideAdd))) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Pääsisikö doallista eroon jos tässä käyttäisi mapin sijaan mapv:tä? |
||
(map vector (flatten (repeatedly (constantly '(1 2))))) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. '()-syntaksilla määriteltäviä listoja on harvemmin tapana käyttää koodissa, mieluummin käyttää vektoreita kun niitä yleensä voi käyttää ihan huoletta toisiaan vastaavina asioina. Eli [1 2] siinä tapauksessa tähän. |
||
(map (fn [[template-id toimenpide]] (assoc toimenpide :template-id template-id))) | ||
(map (fn [toimenpide] (assoc toimenpide :type-id 1))) | ||
(map vector (flatten (repeat (map :id valvonnat)))) | ||
(map (fn [[valvonta-id toimenpide]] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Lopullisesta paluuarvosta ei olla ilmeisesti kiinnostuneita, joten tarvitaanko tämän mapin sisällä tuota merge-kutsua? Myöskin koska tässä tehdään sivuvaikutuksia, ottaisin ehkä tuolla ylempänä letissä kiinni paluuarvon tuohon edelliseen steppiin asti ja korvaisin tämän sitten letin sisällä tehtävällä doseqillä, koska se on tarkoitettu sivuvaikutusten tekemiseen. |
||
(merge toimenpide (valvonta-service/add-toimenpide! ts/*db* ts/*aws-s3-client* {} valvonta-id toimenpide))))))] | ||
(t/testing "Valvonnalle palautetataan 6 toimenpidettä" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Kirjoitusvirhe |
||
(let [response (handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet" (-> valvonnat first :id))) | ||
(with-virtu-user) | ||
(mock/header "Accept" "application/json"))) | ||
response-body (j/read-value (:body response) j/keyword-keys-object-mapper)] | ||
(t/is (= (:status response) 200)) | ||
(t/is (= (count response-body) 6)))))) | ||
|
||
|
||
(t/deftest get-valvonnat-with-filters | ||
(let [kayttaja-id (test-kayttajat/insert-virtu-paakayttaja!) | ||
;; Create two valvontas | ||
valvonnat (repeatedly 2 #(-> {} | ||
(generators/complete valvonta-schema/ValvontaSave) | ||
(assoc :ilmoituspaikka-id 1 | ||
:valvoja-id kayttaja-id) | ||
((fn [valvonta] (assoc valvonta :id (valvonta-service/add-valvonta! ts/*db* valvonta)))))) | ||
;; Create a toimenpide for each valvonta | ||
toimenpiteet (doall (->> (repeatedly 2 (fn [] (generators/complete {} valvonta-schema/ToimenpideAdd))) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Samat mietteet doallin, mapin, vektorin ja doseqin käytöstä tähänkin kuin ylempänä. |
||
(map (fn [toimenpide] (assoc toimenpide :type-id 1))) | ||
(map vector (flatten (repeatedly (constantly '(1 2))))) | ||
(map (fn [[template-id toimenpide]] (assoc toimenpide :template-id template-id))) | ||
(map vector (flatten (repeat (map :id valvonnat)))) | ||
(map (fn [[valvonta-id toimenpide]] | ||
(merge toimenpide (valvonta-service/add-toimenpide! ts/*db* ts/*aws-s3-client* {} valvonta-id toimenpide))))))] | ||
(t/testing "Hae valvontojen määrä joissa on käytetty asiakirjapohjaa 1" | ||
(let [response (handler (-> (mock/request :get "/api/private/valvonta/kaytto/count") | ||
(mock/query-string {:asiakirjapohja-id 1}) | ||
(with-virtu-user) | ||
(mock/header "Accept" "application/json"))) | ||
response-body (j/read-value (:body response) j/keyword-keys-object-mapper)] | ||
(t/is (= (:status response) 200)) | ||
(t/is (= response-body {:count 1})))) | ||
(t/testing "Hae valvonnat joissa on käytetty asiakirjapohjaa 1" | ||
(let [response (handler (-> (mock/request :get "/api/private/valvonta/kaytto") | ||
(mock/query-string {:asiakirjapohja-id 1}) | ||
(with-virtu-user) | ||
(mock/header "Accept" "application/json"))) | ||
response-body (j/read-value (:body response) j/keyword-keys-object-mapper) | ||
expected-valvonta (-> (first valvonnat) | ||
(assoc :henkilot [] ;Add synthetic fields | ||
:yritykset [] | ||
:energiatodistus nil) | ||
(non-null-key-to-string :havaintopaiva)) | ||
expected-last-toimenpide (-> (first toimenpiteet) | ||
(dissoc :description) ; This is not sent here | ||
(assoc :diaarinumero nil) ; Would be generated by asha | ||
(non-null-key-to-string :deadline-date)) | ||
received-valvonta (first response-body) | ||
received-last-toimenpide (-> (:last-toimenpide received-valvonta) | ||
(dissoc :publish-time :create-time))] | ||
|
||
(t/is (= (:status response) 200)) | ||
(t/is (= (count response-body) 1)) | ||
(t/is (= (dissoc received-valvonta :last-toimenpide) expected-valvonta)) | ||
(t/is (= received-last-toimenpide expected-last-toimenpide)))))) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Miksi nämä on requireina? Corea ei tarvitsisi ikinä requireta erikseen ja tällaisenaan nämä eivät tee mitään, kun ei ole määritelty aliasta tai sieltä referoitavia funktioita. Tämän tyyliset requiret ovat tarpeen ainoastaan, jos pelkkä namespacen require aiheuttaa jo sivuvaikutuksia.