Skip to content
This repository has been archived by the owner on Feb 7, 2024. It is now read-only.

Commit

Permalink
Add option to search valvonta by asiakirjapohja
Browse files Browse the repository at this point in the history
Implements: AE-1895
  • Loading branch information
solita-antti-mottonen committed Jun 29, 2023
1 parent f09e53e commit 9be7436
Show file tree
Hide file tree
Showing 5 changed files with 152 additions and 40 deletions.
33 changes: 17 additions & 16 deletions etp-backend/src/main/clj/solita/etp/schema/valvonta_kaytto.clj
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@
(assoc schema :id common-schema/Key :valvonta-id common-schema/Key))

(def ValvontaQuery
{(schema/optional-key :valvoja-id) common-schema/Key
(schema/optional-key :has-valvoja) schema/Bool
(schema/optional-key :include-closed) schema/Bool
(schema/optional-key :keyword) schema/Str
(schema/optional-key :toimenpidetype-id) common-schema/Key})
{(schema/optional-key :valvoja-id) common-schema/Key
(schema/optional-key :has-valvoja) schema/Bool
(schema/optional-key :include-closed) schema/Bool
(schema/optional-key :keyword) schema/Str
(schema/optional-key :toimenpidetype-id) common-schema/Key
(schema/optional-key :asiakirjapohja-id) common-schema/Key})

(def ValvontaSave
{:rakennustunnus (schema/maybe common-schema/Rakennustunnus)
Expand Down Expand Up @@ -43,7 +44,7 @@

(def Template
(assoc valvonta-schema/Template
:tiedoksi schema/Bool))
:tiedoksi schema/Bool))

(def OsapuoliBase
(schema-tools/merge {:rooli-id (schema/maybe common-schema/Key)
Expand All @@ -69,15 +70,15 @@
(-> ToimenpideAdd
(dissoc (schema/optional-key :bypass-asha))
(assoc
:id common-schema/Key
:diaarinumero (schema/maybe schema/Str)
:author common-schema/Kayttaja
:create-time common-schema/Instant
:publish-time common-schema/Instant
:filename (schema/maybe schema/Str)
:valvonta-id common-schema/Key
:henkilot [Henkilo]
:yritykset [Yritys])))
:id common-schema/Key
:diaarinumero (schema/maybe schema/Str)
:author common-schema/Kayttaja
:create-time common-schema/Instant
:publish-time common-schema/Instant
:filename (schema/maybe schema/Str)
:valvonta-id common-schema/Key
:henkilot [Henkilo]
:yritykset [Yritys])))

(def LastToimenpide
(schema-tools/select-keys Toimenpide
Expand All @@ -101,7 +102,7 @@
:description schema/Str})

(def ExistingValvonta
{:id common-schema/Key
{:id common-schema/Key
:end-time (schema/maybe common-schema/Instant)})

(def Toimenpidetyypit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
:include-closed false
:keyword nil
:toimenpidetype-id nil
:asiakirjapohja-id nil
:limit 10
:offset 0})

Expand Down
2 changes: 2 additions & 0 deletions etp-backend/src/main/sql/solita/etp/db/valvonta-kaytto.sql
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ where
not valvonta.deleted and
(last_toimenpide.id is null or last_toimenpide.type_id <> 5 or :include-closed) and
(:toimenpidetype-id::int is null or :toimenpidetype-id = last_toimenpide.type_id) and
(:asiakirjapohja-id::int is null or :asiakirjapohja-id = last_toimenpide.template_id) and
(:keyword::text is null or
valvonta.rakennustunnus ilike :keyword or
valvonta.katuosoite ilike :keyword or
Expand Down Expand Up @@ -85,6 +86,7 @@ where
not valvonta.deleted and
(last_toimenpide.id is null or last_toimenpide.type_id <> 5 or :include-closed) and
(:toimenpidetype-id::int is null or :toimenpidetype-id = last_toimenpide.type_id) and
(:asiakirjapohja-id::int is null or :asiakirjapohja-id = last_toimenpide.template_id) and
(:keyword::text is null or
valvonta.rakennustunnus ilike :keyword or
valvonta.katuosoite ilike :keyword or
Expand Down
17 changes: 16 additions & 1 deletion etp-backend/src/test/clj/solita/etp/test_data/kayttaja.clj
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

(defn generate-updates [n]
(take n (map #(generators/complete {:henkilotunnus %1
:email %2}
:email %2}
kayttaja-schema/KayttajaUpdate)
(generators/unique-henkilotunnukset n)
(generators/unique-emails n))))
Expand All @@ -43,3 +43,18 @@
(map #(assoc % :rooli 2))
insert!
first))

(defn insert-virtu-paakayttaja!
"Inserts a new paakayttaja that can be used with headers below, and returns its id.
Headers:
x-amzn-oidc-accesstoken eyJraWQiOiJ0ZXN0LWtpZCIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJwYWFrYXl0dGFqYUBzb2xpdGEuZmkiLCJ0b2tlbl91c2UiOiJhY2Nlc3MiLCJzY29wZSI6Im9wZW5pZCIsImF1dGhfdGltZSI6MTU4MzIzMDk2OSwiaXNzIjoiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3NvbGl0YS9ldHAtY29yZS9mZWF0dXJlL0FFLTQzLWF1dGgtaGVhZGVycy1oYW5kbGluZy9ldHAtYmFja2VuZC9zcmMvbWFpbi9yZXNvdXJjZXMiLCJleHAiOjE4OTM0NTYwMDAsImlhdCI6MTU4MzQxMzQyNCwidmVyc2lvbiI6MiwianRpIjoiNWZkZDdhMjktN2VlYS00ZjNkLWE3YTYtYzIyODQyNmY2MTJiIiwiY2xpZW50X2lkIjoidGVzdC1jbGllbnRfaWQiLCJ1c2VybmFtZSI6InRlc3QtdXNlcm5hbWUifQ.PY5_jWcdxhCyn2EpFpss7Q0R3_xH1PvHi4mxDLorpppHnciGT2kFLeutebi7XeLtTYwmttTxxg2tyUyX0_UF7zj_P-tdq-kZQlud1ENmRaUxLXO5mTFKXD7zPb6BPFNe0ewRQ7Uuv3lDk_IxOf-6i86VDYB8luyesEXq7ra4S4l8akFodW_QYBSZQnUva_CVyzsTNcmgGTyrz2NI6seT1x6Pt1uFdYI97FHKlCCWVL1Z042omfujfta8j8XkTWdhKf3dfsHRWjrw31xqOkgD7uwPKcrC0U-wIj3U0uX0Rz2Tk4T-kIq4XTkKttYpkJqOmMFAYuhk6MDjfRkPWBZhUA
x-amzn-oidc-identity paakayttaja@solita.fi
x-amzn-oidc-data eyJ0eXAiOiJKV1QiLCJraWQiOiJ0ZXN0LWtpZCIsImFsZyI6IlJTMjU2IiwiaXNzIjoidGVzdC1pc3MiLCJjbGllbnQiOiJ0ZXN0LWNsaWVudCIsInNpZ25lciI6InRlc3Qtc2lnbmVyIiwiZXhwIjoxODkzNDU2MDAwfQ.eyJzdWIiOiJwYWFrYXl0dGFqYUBzb2xpdGEuZmkiLCJjdXN0b206VklSVFVfbG9jYWxJRCI6InZ2aXJrYW1pZXMiLCJjdXN0b206VklSVFVfbG9jYWxPcmciOiJ0ZXN0aXZpcmFzdG8uZmkiLCJ1c2VybmFtZSI6InRlc3QtdXNlcm5hbWUiLCJleHAiOjE4OTM0NTYwMDAsImlzcyI6InRlc3QtaXNzIn0.BfuDVOFUReiJd6N05Re6affps_47AA0F5o-g6prmXgAnk4lB1S3k9RpovCFU3-R5Zn0p38QTiwi5dENHCHaj1A6MGHHKeYd7vBZK0VquuBxlIQH-4k1MWLvpYnkK3yuEvfmbRb3jYspCA_4N-AF21cCyjd15RiuIawLCEM0Km1DRgLhXIBta6XCGSRwaRmrT7boDRMp7hUkYPpoakCahMC70sjyuvLE0pjAy1_S09g4SkboentI7WhfsfN4uAHbKy6ViVMfsnwVVvKsM8dXav_a-6PoNGywuUbi8nHt8c20KiB_AzAEYSqxbRX1YBd0UHlYS16LbLtMBTOctCBLDMg"
[]
(->> (generate-adds 1)
(map #(merge %1 {:virtu {:localid "vvirkamies" :organisaatio "testivirasto.fi"}
:rooli 2
}))
insert!
first))
139 changes: 116 additions & 23 deletions etp-backend/src/test/clj/solita/etp/valvonta_test.clj
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]
Expand All @@ -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]
(if (some? (k m)) (assoc m k (.toString (k m))) m))

(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)
Expand All @@ -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]
(let [kayttaja-id (test-kayttajat/insert-virtu-paakayttaja!)
valvonta-id (valvonta-service/add-valvonta! ts/*db*
(-> {} (generators/complete valvonta-schema/ValvontaSave)
(merge {
Expand All @@ -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)]

Expand All @@ -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)
Expand All @@ -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
Expand Down Expand Up @@ -203,9 +200,105 @@
: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))))))
;; Create 6 toimenpide for each valvonta
_ (doall (->> (repeatedly 12 (fn [] (generators/complete {} valvonta-schema/ToimenpideAdd)))
(map vector (flatten (repeatedly (constantly '(1 2)))))
(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]]
(merge toimenpide (valvonta-service/add-toimenpide! ts/*db* ts/*aws-s3-client* {} valvonta-id toimenpide))))))]
(t/testing "Valvonnalle palautetataan 6 toimenpidettä"
(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)))
(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))))))

0 comments on commit 9be7436

Please sign in to comment.