From 89f7d0701e040cc5d5d49ae06c470e544bb82d1b Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Thu, 9 Nov 2023 10:10:40 +0200 Subject: [PATCH 01/18] =?UTF-8?q?AE-1977:=20Test=20fetching=20k=C3=A4skyp?= =?UTF-8?q?=C3=A4=C3=A4t=C3=B6s=20/=20varsinainen=20p=C3=A4=C3=A4t=C3=B6s?= =?UTF-8?q?=20documents?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kaskypaatos_varsinainen_paatos_test.clj | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj index 64b523529..4a65cb3e6 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj @@ -107,7 +107,13 @@ (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/json")))] (t/is (true? @html->pdf-called?)) - (t/is (= (:status response) 201)))))) + (t/is (= (:status response) 201)))) + + (t/testing "Created document can be downloaded through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/document/kaskypaatos.pdf" valvonta-id 4 osapuoli-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/pdf")))] + (t/is (= (:status response) 200)))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully for yritys and document is generated with correct information" ;; Add the valvonta and previous toimenpides @@ -234,8 +240,14 @@ :document true :recipient-answered false}] :department-head-title-sv "Kungen" - :fine 857,}, - :template-id 6})))))))) + :fine 857}, + :template-id 6})))) + + (t/testing "Created document can be downloaded through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/yritykset/%s/document/kaskypaatos.pdf" valvonta-id 8 osapuoli-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/pdf")))] + (t/is (= (:status response) 200)))))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully when there are multiple osapuolis but one lives abroad and will not receive the document because of being outside court jurisdiction" ;; Add the valvonta and previous toimenpides From d1fb8182f0bc20e9168d4ecf694d4a84bdd517ce Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Thu, 9 Nov 2023 10:33:15 +0200 Subject: [PATCH 02/18] AE-1977: Move henkilot and yritykset to their own contexts in doc urls --- .../etp/api/valvonta_kaytto_toimenpiteet.clj | 68 ++++++++++--------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj b/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj index 29a97eb51..e92f7ca53 100644 --- a/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj +++ b/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj @@ -82,36 +82,38 @@ (valvonta-service/update-toimenpide! db toimenpide-id body) (toimenpide-404-msg id toimenpide-id)))}}] - - ["/henkilot/:henkilo-id/document/:filename" - {:get {:summary "Henkilö-osapuolen toimenpiteen esikatselu tai lataus" - :parameters {:path {:id common-schema/Key - :toimenpide-id common-schema/Key - :henkilo-id common-schema/Key - :filename schema/Str}} - :access rooli-service/paakayttaja? - :responses {200 {:body nil} - 404 {:body schema/Str}} - :handler (fn [{{{:keys [id toimenpide-id henkilo-id filename]} :path} - :parameters :keys [db aws-s3-client]}] - (api-response/pdf-response - (valvonta-service/find-toimenpide-henkilo-document - db aws-s3-client id toimenpide-id henkilo-id) - filename - (api-response/msg-404 "henkilo" id toimenpide-id henkilo-id)))}}] - ["/yritykset/:yritys-id/document/:filename" - {:get {:summary "Yritys-osapuolen toimenpiteen esikatselu tai lataus" - :parameters {:path {:id common-schema/Key - :toimenpide-id common-schema/Key - :yritys-id common-schema/Key - :filename schema/Str}} - :access rooli-service/paakayttaja? - :responses {200 {:body nil} - 404 {:body schema/Str}} - :handler (fn [{{{:keys [id toimenpide-id yritys-id filename]} :path} - :parameters :keys [db aws-s3-client]}] - (api-response/pdf-response - (valvonta-service/find-toimenpide-yritys-document - db aws-s3-client id toimenpide-id yritys-id) - filename - (api-response/msg-404 "yritys "id toimenpide-id yritys-id)))}}]]]) + ;; TODO: Lisää näiden alle hallinto-oikeuden liitteen hakemista varten olevat routet + ["/henkilot" + ["/:henkilo-id/document/:filename" + {:get {:summary "Henkilö-osapuolen toimenpiteen dokumentin lataus" + :parameters {:path {:id common-schema/Key + :toimenpide-id common-schema/Key + :henkilo-id common-schema/Key + :filename schema/Str}} + :access rooli-service/paakayttaja? + :responses {200 {:body nil} + 404 {:body schema/Str}} + :handler (fn [{{{:keys [id toimenpide-id henkilo-id filename]} :path} + :parameters :keys [db aws-s3-client]}] + (api-response/pdf-response + (valvonta-service/find-toimenpide-henkilo-document + db aws-s3-client id toimenpide-id henkilo-id) + filename + (api-response/msg-404 "henkilo" id toimenpide-id henkilo-id)))}}]] + ["/yritykset" + ["/:yritys-id/document/:filename" + {:get {:summary "Yritys-osapuolen toimenpiteen esikatselu tai lataus" + :parameters {:path {:id common-schema/Key + :toimenpide-id common-schema/Key + :yritys-id common-schema/Key + :filename schema/Str}} + :access rooli-service/paakayttaja? + :responses {200 {:body nil} + 404 {:body schema/Str}} + :handler (fn [{{{:keys [id toimenpide-id yritys-id filename]} :path} + :parameters :keys [db aws-s3-client]}] + (api-response/pdf-response + (valvonta-service/find-toimenpide-yritys-document + db aws-s3-client id toimenpide-id yritys-id) + filename + (api-response/msg-404 "yritys " id toimenpide-id yritys-id)))}}]]]]) From 4b7695c042c758e639bd51cd20fc53c12de86d8e Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Thu, 9 Nov 2023 11:51:39 +0200 Subject: [PATCH 03/18] AE-1977: Check in document fetch test that content-type is pdf --- .../etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj index 4a65cb3e6..330fd3a5b 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj @@ -113,6 +113,7 @@ (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/document/kaskypaatos.pdf" valvonta-id 4 osapuoli-id)) (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/pdf")))] + (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) (t/is (= (:status response) 200)))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully for yritys and document is generated with correct information" @@ -247,6 +248,7 @@ (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/yritykset/%s/document/kaskypaatos.pdf" valvonta-id 8 osapuoli-id)) (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/pdf")))] + (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) (t/is (= (:status response) 200)))))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully when there are multiple osapuolis but one lives abroad and will not receive the document because of being outside court jurisdiction" From e221b262c1db458813539ca1df63d31ac46b7957 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Thu, 9 Nov 2023 13:15:24 +0200 Subject: [PATCH 04/18] AE-1977: Add endpoint for fetching hao-liite in toimenpide for person - Currently just returns 200, no document yet --- .../etp/api/valvonta_kaytto_toimenpiteet.clj | 80 +++++++++++-------- .../kaskypaatos_varsinainen_paatos_test.clj | 11 ++- 2 files changed, 57 insertions(+), 34 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj b/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj index e92f7ca53..a8cf8120d 100644 --- a/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj +++ b/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj @@ -82,38 +82,52 @@ (valvonta-service/update-toimenpide! db toimenpide-id body) (toimenpide-404-msg id toimenpide-id)))}}] - ;; TODO: Lisää näiden alle hallinto-oikeuden liitteen hakemista varten olevat routet ["/henkilot" - ["/:henkilo-id/document/:filename" - {:get {:summary "Henkilö-osapuolen toimenpiteen dokumentin lataus" - :parameters {:path {:id common-schema/Key - :toimenpide-id common-schema/Key - :henkilo-id common-schema/Key - :filename schema/Str}} - :access rooli-service/paakayttaja? - :responses {200 {:body nil} - 404 {:body schema/Str}} - :handler (fn [{{{:keys [id toimenpide-id henkilo-id filename]} :path} - :parameters :keys [db aws-s3-client]}] - (api-response/pdf-response - (valvonta-service/find-toimenpide-henkilo-document - db aws-s3-client id toimenpide-id henkilo-id) - filename - (api-response/msg-404 "henkilo" id toimenpide-id henkilo-id)))}}]] + ["/:henkilo-id" + ["/document/:filename" + {:get {:summary "Henkilö-osapuolen toimenpiteen dokumentin lataus" + :parameters {:path {:id common-schema/Key + :toimenpide-id common-schema/Key + :henkilo-id common-schema/Key + :filename schema/Str}} + :access rooli-service/paakayttaja? + :responses {200 {:body nil} + 404 {:body schema/Str}} + :handler (fn [{{{:keys [id toimenpide-id henkilo-id filename]} :path} + :parameters :keys [db aws-s3-client]}] + (api-response/pdf-response + (valvonta-service/find-toimenpide-henkilo-document + db aws-s3-client id toimenpide-id henkilo-id) + filename + (api-response/msg-404 "henkilo" id toimenpide-id henkilo-id)))}}] + ["/attachment" + ["/hallinto-oikeus.pdf" + {:get {:summary "Henkilö-osapuolen toimenpiteeseen liittyvän hallinto-oikeus-liitteen lataus" + :parameters {:path {:id common-schema/Key + :toimenpide-id common-schema/Key + :henkilo-id common-schema/Key}} + :access rooli-service/paakayttaja? + :responses {200 {:body nil} + 404 {:body schema/Str}} + :handler (fn [{{{:keys [id toimenpide-id henkilo-id filename]} :path} + :parameters :keys [db aws-s3-client]}] + {:status 200})}}]]]] ["/yritykset" - ["/:yritys-id/document/:filename" - {:get {:summary "Yritys-osapuolen toimenpiteen esikatselu tai lataus" - :parameters {:path {:id common-schema/Key - :toimenpide-id common-schema/Key - :yritys-id common-schema/Key - :filename schema/Str}} - :access rooli-service/paakayttaja? - :responses {200 {:body nil} - 404 {:body schema/Str}} - :handler (fn [{{{:keys [id toimenpide-id yritys-id filename]} :path} - :parameters :keys [db aws-s3-client]}] - (api-response/pdf-response - (valvonta-service/find-toimenpide-yritys-document - db aws-s3-client id toimenpide-id yritys-id) - filename - (api-response/msg-404 "yritys " id toimenpide-id yritys-id)))}}]]]]) + ["/:yritys-id" + ;; TODO: Hallinto-oikeus-liitteen hakeminen yritysosapuolelle + ["/document/:filename" + {:get {:summary "Yritys-osapuolen toimenpiteen esikatselu tai lataus" + :parameters {:path {:id common-schema/Key + :toimenpide-id common-schema/Key + :yritys-id common-schema/Key + :filename schema/Str}} + :access rooli-service/paakayttaja? + :responses {200 {:body nil} + 404 {:body schema/Str}} + :handler (fn [{{{:keys [id toimenpide-id yritys-id filename]} :path} + :parameters :keys [db aws-s3-client]}] + (api-response/pdf-response + (valvonta-service/find-toimenpide-yritys-document + db aws-s3-client id toimenpide-id yritys-id) + filename + (api-response/msg-404 "yritys " id toimenpide-id yritys-id)))}}]]]]]) diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj index 330fd3a5b..49b77f4be 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj @@ -114,6 +114,13 @@ (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/pdf")))] (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) + (t/is (= (:status response) 200)))) + + (t/testing "hallinto-oikeus-liite can be downloaded through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/attachment/hallinto-oikeus.pdf" valvonta-id 4 osapuoli-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/pdf")))] + #_(t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) (t/is (= (:status response) 200)))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully for yritys and document is generated with correct information" @@ -249,7 +256,9 @@ (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/pdf")))] (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) - (t/is (= (:status response) 200)))))))) + (t/is (= (:status response) 200)))) + + (t/testing "hallinto-oikeus-liite can be downloaded through the api"))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully when there are multiple osapuolis but one lives abroad and will not receive the document because of being outside court jurisdiction" ;; Add the valvonta and previous toimenpides From 43999c609b1080ee8748a8628ff2de5b14a85eea Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Thu, 9 Nov 2023 13:34:38 +0200 Subject: [PATCH 05/18] =?UTF-8?q?AE-1977:=20Remove=20hallinto-oikeus-liite?= =?UTF-8?q?=20from=20k=C3=A4skyp=C3=A4=C3=A4t=C3=B6s=20/=20varsinainen=20p?= =?UTF-8?q?=C3=A4=C3=A4t=C3=B6s=20document?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Will be added as a separate document later --- .../clj/solita/etp/service/valvonta_kaytto/asha.clj | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj index 12b9cc8af..2717c5902 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj @@ -228,15 +228,9 @@ tiedoksi (if (template/send-tiedoksi? template) (filter osapuoli/tiedoksi? osapuolet) []) template-data (template-data db whoami valvonta toimenpide osapuoli documents ilmoituspaikat - tiedoksi roolit) - generated-pdf (pdf/generate-pdf->bytes {:template (:content template) - :data template-data})] - (if (toimenpide/kaskypaatos-varsinainen-paatos? toimenpide) - (add-hallinto-oikeus-attachment db generated-pdf (-> toimenpide - :type-specific-data - :osapuoli-specific-data - (type-specific-data/find-administrative-court-id-from-osapuoli-specific-data (:id osapuoli)))) - generated-pdf))) + tiedoksi roolit)] + (pdf/generate-pdf->bytes {:template (:content template) + :data template-data}))) (defn remove-osapuolet-with-no-document "If toimenpidetype of the toimenpide is such that the document might not be created for some, From a61f01addf24576ca20fe37501a172f1d42fcb77 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Thu, 9 Nov 2023 15:09:52 +0200 Subject: [PATCH 06/18] =?UTF-8?q?AE-1977:=20Add=20docstrings=20to=20functi?= =?UTF-8?q?ons=20for=20storing=20and=20retrieving=20k=C3=A4yt=C3=B6nvalvon?= =?UTF-8?q?ta=20toimenpide=20documents?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solita/etp/service/valvonta_kaytto/store.clj | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj index e3b6e0169..3ff30da8c 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj @@ -3,22 +3,25 @@ [solita.etp.service.valvonta-kaytto.osapuoli :as osapuoli] [clojure.java.io :as io])) -(def file-key-prefix "valvonta/kaytto") +(def document-file-key-prefix "valvonta/kaytto") (defn- file-path [file-key-prefix valvonta-id toimenpide-id osapuoli] (cond (osapuoli/henkilo? osapuoli) (str file-key-prefix "/" valvonta-id "/" toimenpide-id "/henkilo/" (:id osapuoli)) (osapuoli/yritys? osapuoli) (str file-key-prefix "/" valvonta-id "/" toimenpide-id "/yritys/" (:id osapuoli)))) -(defn store-document [aws-s3-client valvonta-id toimenpide-id osapuoli document] +(defn store-document + "Store the main document of the käytönvalvonta toimenpide to the object storage" + [aws-s3-client valvonta-id toimenpide-id osapuoli document] (file-service/upsert-file-from-bytes aws-s3-client - (file-path file-key-prefix valvonta-id toimenpide-id osapuoli) + (file-path document-file-key-prefix valvonta-id toimenpide-id osapuoli) document)) -(defn find-document [aws-s3-client valvonta-id toimenpide-id osapuoli] - (file-service/find-file aws-s3-client (file-path file-key-prefix valvonta-id toimenpide-id osapuoli))) +(defn find-document + "Retrieve the main document of the käytönvalvonta toimenpide from the object storage" + [aws-s3-client valvonta-id toimenpide-id osapuoli] + (file-service/find-file aws-s3-client (file-path document-file-key-prefix valvonta-id toimenpide-id osapuoli))) (defn info-letter [] (-> "pdf/Saate_rakennuksen_omistaja_su_ru.pdf" io/resource io/input-stream)) - From 665c216ebfe1bf770f09d750589968abba4742c0 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Thu, 9 Nov 2023 15:25:17 +0200 Subject: [PATCH 07/18] AE-1977: Fix lint issues in file storage service --- etp-backend/src/main/clj/solita/etp/service/file.clj | 7 ++++--- .../src/test/clj/solita/etp/service/file_test.clj | 10 ++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/service/file.clj b/etp-backend/src/main/clj/solita/etp/service/file.clj index 816f0870c..1e2f33a66 100644 --- a/etp-backend/src/main/clj/solita/etp/service/file.clj +++ b/etp-backend/src/main/clj/solita/etp/service/file.clj @@ -1,9 +1,10 @@ (ns solita.etp.service.file (:require [clojure.java.io :as io] [solita.common.aws :as aws]) - (:import (java.io FileInputStream))) + (:import (clojure.lang ExceptionInfo) + (java.io File FileInputStream))) -(defn file->byte-array [file] +(defn file->byte-array [^File file] (-> file FileInputStream. .readAllBytes)) (defn upsert-file-from-bytes [aws-s3-client key bytes] @@ -23,7 +24,7 @@ (try (aws/get-object-head aws-s3-client key) true - (catch clojure.lang.ExceptionInfo e + (catch ExceptionInfo e (let [{:keys [type]} (ex-data e)] (if (= type :resource-not-found) false diff --git a/etp-backend/src/test/clj/solita/etp/service/file_test.clj b/etp-backend/src/test/clj/solita/etp/service/file_test.clj index 2326f5e86..b89f6887e 100644 --- a/etp-backend/src/test/clj/solita/etp/service/file_test.clj +++ b/etp-backend/src/test/clj/solita/etp/service/file_test.clj @@ -2,7 +2,9 @@ (:require [clojure.java.io :as io] [clojure.test :as t] [solita.etp.test-system :as ts] - [solita.etp.service.file :as service])) + [solita.etp.service.file :as service]) + (:import (clojure.lang ExceptionInfo) + (java.io InputStream))) (t/use-fixtures :each ts/fixture) @@ -36,10 +38,10 @@ (-> file-info-3 :path io/input-stream)) (doseq [file-info [file-info-1 file-info-2 file-info-3] :let [content (service/find-file ts/*aws-s3-client* (:id file-info))]] - (t/is (true? (instance? java.io.InputStream content))) + (t/is (true? (instance? InputStream content))) (t/is (= (into [] (:bytes file-info)) (into [] (.readAllBytes content))))) - (t/is (thrown-with-msg? clojure.lang.ExceptionInfo + (t/is (thrown-with-msg? ExceptionInfo #"The specified key does not exist." (service/find-file ts/*aws-s3-client* "nonexisting")))) @@ -52,6 +54,6 @@ id (-> file-info-2 :path io/input-stream)) (let [content (service/find-file ts/*aws-s3-client* id)] - (t/is (true? (instance? java.io.InputStream content))) + (t/is (true? (instance? InputStream content))) (t/is (= (into [] (:bytes file-info-2)) (into [] (.readAllBytes content))))))) From 4f556beae64c2a1777dc50af8a975f59f9f67a84 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Thu, 9 Nov 2023 16:37:35 +0200 Subject: [PATCH 08/18] =?UTF-8?q?AE-1977:=20Save=20hallinto-oikeus=20attac?= =?UTF-8?q?hment=20to=20object=20storage=20for=20osapuoli=20when=20creatin?= =?UTF-8?q?g=20k=C3=A4skyp=C3=A4=C3=A4t=C3=B6s=20/=20varsinainen=20p=C3=A4?= =?UTF-8?q?=C3=A4t=C3=B6s=20toimenpide?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clj/solita/etp/service/valvonta_kaytto/asha.clj | 12 ++++++++++++ .../clj/solita/etp/service/valvonta_kaytto/store.clj | 9 +++++++++ .../kaskypaatos_varsinainen_paatos_test.clj | 11 ++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj index 2717c5902..edfe52e97 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj @@ -251,6 +251,14 @@ (filter #(contains? osapuolet-with-document (:id %)) osapuolet)) osapuolet)) +(defn store-hallinto-oikeus-attachment! [db aws-s3-client valvonta-id toimenpide osapuoli] + (let [hallinto-oikeus-id (-> toimenpide + :type-specific-data + :osapuoli-specific-data + (type-specific-data/find-administrative-court-id-from-osapuoli-specific-data (:id osapuoli))) + attachment (hao-attachment/attachment-for-hallinto-oikeus-id db hallinto-oikeus-id)] + (store/store-hallinto-oikeus-attachment aws-s3-client valvonta-id (:id toimenpide) osapuoli attachment))) + (defn log-toimenpide! [db aws-s3-client whoami valvonta toimenpide osapuolet ilmoituspaikat roolit] (let [request-id (request-id (:id valvonta) (:id toimenpide)) sender-id (:email whoami) @@ -264,6 +272,10 @@ (let [document (generate-pdf-document db whoami valvonta toimenpide ilmoituspaikat osapuoli osapuolet roolit)] (store/store-document aws-s3-client (:id valvonta) (:id toimenpide) osapuoli document) + + (when (toimenpide/kaskypaatos-varsinainen-paatos? toimenpide) + (store-hallinto-oikeus-attachment! db aws-s3-client (:id valvonta) toimenpide osapuoli)) + document)))))] (asha/log-toimenpide! sender-id diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj index 3ff30da8c..c2b7293da 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj @@ -4,6 +4,7 @@ [clojure.java.io :as io])) (def document-file-key-prefix "valvonta/kaytto") +(def hallinto-oikeus-attachment-file-key-prefix "valvonta/kaytto/hallinto-oikeus-attachment") (defn- file-path [file-key-prefix valvonta-id toimenpide-id osapuoli] (cond @@ -25,3 +26,11 @@ (defn info-letter [] (-> "pdf/Saate_rakennuksen_omistaja_su_ru.pdf" io/resource io/input-stream)) + +(defn ^:dynamic store-hallinto-oikeus-attachment + "Store the hallinto-oikeus attachment of the käytönvalvonta toimenpide to the object storage" + [aws-s3-client valvonta-id toimenpide-id osapuoli document] + (file-service/upsert-file-from-bytes + aws-s3-client + (file-path hallinto-oikeus-attachment-file-key-prefix valvonta-id toimenpide-id osapuoli) + document)) \ No newline at end of file diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj index 49b77f4be..15e398bfb 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj @@ -9,6 +9,7 @@ [solita.etp.schema.valvonta-kaytto :as valvonta-schema] [solita.etp.service.pdf :as pdf] [solita.etp.service.valvonta-kaytto :as valvonta-service] + [solita.etp.service.valvonta-kaytto.store :as file-store] [solita.etp.test-data.generators :as generators] [solita.etp.test-data.kayttaja :as test-kayttajat] [solita.etp.test-system :as ts]) @@ -16,6 +17,8 @@ (t/use-fixtures :each ts/fixture) +(def original-store-hallinto-oikeus-attachment file-store/store-hallinto-oikeus-attachment) + (t/deftest kaskypaatos-varsinainen-paatos-test ;; Add the main user for the following tests (test-kayttajat/insert-virtu-paakayttaja! @@ -39,6 +42,7 @@ (.atStartOfDay (ZoneId/systemDefault)) .toInstant) html->pdf-called? (atom false) + store-hallinto-oikeus-attachment-called? (atom false) ;; Add osapuoli to the valvonta osapuoli-id (valvonta-service/add-henkilo! ts/*db* @@ -85,7 +89,11 @@ time/timezone) #'pdf/html->pdf (partial html->pdf-with-assertion "documents/kaskypaatos-varsinainen-paatos-yksityishenkilo.html" - html->pdf-called?)} + html->pdf-called?) + #'file-store/store-hallinto-oikeus-attachment + (fn [aws-s3-client valvonta-id toimenpide-id osapuoli document] + (reset! store-hallinto-oikeus-attachment-called? true) + (original-store-hallinto-oikeus-attachment aws-s3-client valvonta-id toimenpide-id osapuoli document))} (let [new-toimenpide {:type-id 8 :deadline-date (str (LocalDate/of 2023 10 4)) :template-id 6 @@ -107,6 +115,7 @@ (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/json")))] (t/is (true? @html->pdf-called?)) + (t/is (true? @store-hallinto-oikeus-attachment-called?)) (t/is (= (:status response) 201)))) (t/testing "Created document can be downloaded through the api" From cb1cc68187300a39b350552bc973167de95f5571 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Fri, 10 Nov 2023 09:15:32 +0200 Subject: [PATCH 09/18] AE-1977: Fetch attachment from blob storage when calling hallinto-oikeus.pdf attachment route for henkilo --- .../etp/api/valvonta_kaytto_toimenpiteet.clj | 39 ++++++++++--------- .../solita/etp/service/valvonta_kaytto.clj | 3 ++ .../etp/service/valvonta_kaytto/store.clj | 7 +++- .../kaskypaatos_varsinainen_paatos_test.clj | 2 +- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj b/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj index a8cf8120d..62a157ff4 100644 --- a/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj +++ b/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj @@ -16,13 +16,13 @@ {:get {:summary "Hae käytönvalvonnan toimenpiteet." :parameters {:path {:id common-schema/Key}} :responses {200 {:body [kaytto-schema/Toimenpide]}} - :access rooli-service/paakayttaja? + :access rooli-service/paakayttaja? :handler (fn [{{{:keys [id]} :path} :parameters :keys [db]}] (api-response/get-response (valvonta-service/find-toimenpiteet db id) (api-response/msg-404 "kaytonvalvonta" id)))} :post {:summary "Lisää käytönvalvonnan toimenpide." - :access rooli-service/paakayttaja? + :access rooli-service/paakayttaja? :parameters {:path {:id common-schema/Key} :body kaytto-schema/ToimenpideAdd} :responses {201 {:body common-schema/Id} @@ -31,7 +31,7 @@ :parameters :keys [db aws-s3-client whoami uri]}] (api-response/with-exceptions #(api-response/created uri - (valvonta-service/add-toimenpide! db aws-s3-client whoami id body)) + (valvonta-service/add-toimenpide! db aws-s3-client whoami id body)) [{:constraint :toimenpide-vk-valvonta-id-fkey :response 404}]))}}] ["/henkilot/:henkilo-id/preview" @@ -69,19 +69,19 @@ ["/:toimenpide-id" ["" {:conflicting true - :put {:summary "Muuta toimenpiteen tietoja." - :access rooli-service/paakayttaja? - :parameters {:path {:id common-schema/Key - :toimenpide-id common-schema/Key} - :body kaytto-schema/ToimenpideUpdate} - :responses {200 {:body nil} - 404 {:body schema/Str}} - :handler (fn [{{{:keys [id toimenpide-id]} :path :keys [body]} - :parameters :keys [db]}] - (api-response/ok|not-found - (valvonta-service/update-toimenpide! - db toimenpide-id body) - (toimenpide-404-msg id toimenpide-id)))}}] + :put {:summary "Muuta toimenpiteen tietoja." + :access rooli-service/paakayttaja? + :parameters {:path {:id common-schema/Key + :toimenpide-id common-schema/Key} + :body kaytto-schema/ToimenpideUpdate} + :responses {200 {:body nil} + 404 {:body schema/Str}} + :handler (fn [{{{:keys [id toimenpide-id]} :path :keys [body]} + :parameters :keys [db]}] + (api-response/ok|not-found + (valvonta-service/update-toimenpide! + db toimenpide-id body) + (toimenpide-404-msg id toimenpide-id)))}}] ["/henkilot" ["/:henkilo-id" ["/document/:filename" @@ -109,9 +109,12 @@ :access rooli-service/paakayttaja? :responses {200 {:body nil} 404 {:body schema/Str}} - :handler (fn [{{{:keys [id toimenpide-id henkilo-id filename]} :path} + :handler (fn [{{{:keys [id toimenpide-id henkilo-id]} :path} :parameters :keys [db aws-s3-client]}] - {:status 200})}}]]]] + (api-response/pdf-response + (valvonta-service/find-henkilo-hallinto-oikeus-attachment db aws-s3-client id toimenpide-id henkilo-id) + "hallinto-oikeus.pdf" + (api-response/msg-404 "henkilo" id toimenpide-id henkilo-id)))}}]]]] ["/yritykset" ["/:yritys-id" ;; TODO: Hallinto-oikeus-liitteen hakeminen yritysosapuolelle diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto.clj index 4201f2f0e..1a630a779 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto.clj @@ -342,6 +342,9 @@ (defn find-toimenpide-yritys-document [db aws-s3-client valvonta-id toimenpide-id yritys-id] (store/find-document aws-s3-client valvonta-id toimenpide-id (find-yritys db yritys-id))) +(defn find-henkilo-hallinto-oikeus-attachment [db aws-s3-client valvonta-id toimenpide-id henkilo-id] + (store/find-hallinto-oikeus-attachment aws-s3-client valvonta-id toimenpide-id (find-henkilo db henkilo-id))) + (defn find-notes [db id] (valvonta-kaytto-db/select-valvonta-notes db {:valvonta-id id})) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj index c2b7293da..764bebe82 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj @@ -33,4 +33,9 @@ (file-service/upsert-file-from-bytes aws-s3-client (file-path hallinto-oikeus-attachment-file-key-prefix valvonta-id toimenpide-id osapuoli) - document)) \ No newline at end of file + document)) + +(defn find-hallinto-oikeus-attachment + "Retrieve the hallinto-oikeus attachment of the käytönvalvonta toimenpide from the object storage" + [aws-s3-client valvonta-id toimenpide-id osapuoli] + (file-service/find-file aws-s3-client (file-path hallinto-oikeus-attachment-file-key-prefix valvonta-id toimenpide-id osapuoli))) diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj index 15e398bfb..ab3e77b87 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj @@ -129,7 +129,7 @@ (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/attachment/hallinto-oikeus.pdf" valvonta-id 4 osapuoli-id)) (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/pdf")))] - #_(t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) + (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) (t/is (= (:status response) 200)))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully for yritys and document is generated with correct information" From 91a3c78ff5f04adf9f7968642ccb1ae7c32744be Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Fri, 10 Nov 2023 10:07:03 +0200 Subject: [PATCH 10/18] AE-1977: Fetch attachment from blob storage when calling hallinto-oikeus.pdf attachment route for yritys --- .../etp/api/valvonta_kaytto_toimenpiteet.clj | 18 ++++++++++++++++-- .../clj/solita/etp/service/valvonta_kaytto.clj | 3 +++ .../kaskypaatos_varsinainen_paatos_test.clj | 7 ++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj b/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj index 62a157ff4..34475a74c 100644 --- a/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj +++ b/etp-backend/src/main/clj/solita/etp/api/valvonta_kaytto_toimenpiteet.clj @@ -117,7 +117,6 @@ (api-response/msg-404 "henkilo" id toimenpide-id henkilo-id)))}}]]]] ["/yritykset" ["/:yritys-id" - ;; TODO: Hallinto-oikeus-liitteen hakeminen yritysosapuolelle ["/document/:filename" {:get {:summary "Yritys-osapuolen toimenpiteen esikatselu tai lataus" :parameters {:path {:id common-schema/Key @@ -133,4 +132,19 @@ (valvonta-service/find-toimenpide-yritys-document db aws-s3-client id toimenpide-id yritys-id) filename - (api-response/msg-404 "yritys " id toimenpide-id yritys-id)))}}]]]]]) + (api-response/msg-404 "yritys " id toimenpide-id yritys-id)))}}] + ["/attachment" + ["/hallinto-oikeus.pdf" + {:get {:summary "Yritys-osapuolen toimenpiteeseen liittyvän hallinto-oikeus-liitteen lataus" + :parameters {:path {:id common-schema/Key + :toimenpide-id common-schema/Key + :yritys-id common-schema/Key}} + :access rooli-service/paakayttaja? + :responses {200 {:body nil} + 404 {:body schema/Str}} + :handler (fn [{{{:keys [id toimenpide-id yritys-id]} :path} + :parameters :keys [db aws-s3-client]}] + (api-response/pdf-response + (valvonta-service/find-yritys-hallinto-oikeus-attachment db aws-s3-client id toimenpide-id yritys-id) + "hallinto-oikeus.pdf" + (api-response/msg-404 "yritys " id toimenpide-id yritys-id)))}}]]]]]]) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto.clj index 1a630a779..1a030919a 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto.clj @@ -345,6 +345,9 @@ (defn find-henkilo-hallinto-oikeus-attachment [db aws-s3-client valvonta-id toimenpide-id henkilo-id] (store/find-hallinto-oikeus-attachment aws-s3-client valvonta-id toimenpide-id (find-henkilo db henkilo-id))) +(defn find-yritys-hallinto-oikeus-attachment [db aws-s3-client valvonta-id toimenpide-id yritys-id] + (store/find-hallinto-oikeus-attachment aws-s3-client valvonta-id toimenpide-id (find-yritys db yritys-id))) + (defn find-notes [db id] (valvonta-kaytto-db/select-valvonta-notes db {:valvonta-id id})) diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj index ab3e77b87..cb95f25c7 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj @@ -267,7 +267,12 @@ (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) (t/is (= (:status response) 200)))) - (t/testing "hallinto-oikeus-liite can be downloaded through the api"))))) + (t/testing "hallinto-oikeus-liite can be downloaded through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/yritykset/%s/attachment/hallinto-oikeus.pdf" valvonta-id 8 osapuoli-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/pdf")))] + (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) + (t/is (= (:status response) 200)))))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully when there are multiple osapuolis but one lives abroad and will not receive the document because of being outside court jurisdiction" ;; Add the valvonta and previous toimenpides From 343716b958d9203aaca83b4b0f63af0354b3d148 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Fri, 10 Nov 2023 10:21:32 +0200 Subject: [PATCH 11/18] AE-1977: Test that the returned hao attachment is correct one --- .../kaskypaatos_varsinainen_paatos_test.clj | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj index cb95f25c7..d18183e76 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj @@ -1,5 +1,6 @@ (ns solita.etp.valvonta-kaytto.kaskypaatos-varsinainen-paatos-test (:require + [clojure.java.io :as io] [clojure.java.jdbc :as jdbc] [clojure.test :as t] [jsonista.core :as j] @@ -130,7 +131,11 @@ (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/pdf")))] (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) - (t/is (= (:status response) 200)))))) + (t/is (= (:status response) 200)) + + (t/testing "hallinto-oikeus-liite is the correct one" + (t/is (= (slurp (io/input-stream (io/resource "pdf/hallinto-oikeudet/Valitusosoitus_30_pv_HAMEENLINNAN_HAO.pdf"))) + (slurp (:body response))))))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully for yritys and document is generated with correct information" ;; Add the valvonta and previous toimenpides @@ -272,7 +277,11 @@ (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/pdf")))] (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) - (t/is (= (:status response) 200)))))))) + (t/is (= (:status response) 200)) + + (t/testing "hallinto-oikeus-liite is the correct one" + (t/is (= (slurp (io/input-stream (io/resource "pdf/hallinto-oikeudet/Valitusosoitus_30_pv_ITA-SUOMEN_HAO.pdf"))) + (slurp (:body response))))))))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully when there are multiple osapuolis but one lives abroad and will not receive the document because of being outside court jurisdiction" ;; Add the valvonta and previous toimenpides From eced37be6ebb9bf91e357bb6cca8610411754138 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Fri, 10 Nov 2023 10:23:32 +0200 Subject: [PATCH 12/18] AE-1977: Test for yritysosapuoli that attachment store fn is called --- .../kaskypaatos_varsinainen_paatos_test.clj | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj index d18183e76..f3b156194 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj @@ -153,6 +153,7 @@ (.atStartOfDay (ZoneId/systemDefault)) .toInstant) html->pdf-called? (atom false) + store-hallinto-oikeus-attachment-called? (atom false) ;; Add osapuoli to the valvonta osapuoli-id (valvonta-service/add-yritys! ts/*db* @@ -197,7 +198,11 @@ time/timezone) #'pdf/html->pdf (partial html->pdf-with-assertion "documents/kaskypaatos-varsinainen-paatos-yritys.html" - html->pdf-called?)} + html->pdf-called?) + #'file-store/store-hallinto-oikeus-attachment + (fn [aws-s3-client valvonta-id toimenpide-id osapuoli document] + (reset! store-hallinto-oikeus-attachment-called? true) + (original-store-hallinto-oikeus-attachment aws-s3-client valvonta-id toimenpide-id osapuoli document))} (let [new-toimenpide {:type-id 8 :deadline-date (str (LocalDate/of 2023 10 4)) :template-id 6 @@ -215,6 +220,7 @@ (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/json")))] (t/is (true? @html->pdf-called?)) + (t/is (true? @store-hallinto-oikeus-attachment-called?)) (t/is (= (:status response) 201)) (t/testing "Toimenpide is returned through the api" From 0df24bee8941a6a9ed78a03bde9693b678154231 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Fri, 10 Nov 2023 10:49:29 +0200 Subject: [PATCH 13/18] =?UTF-8?q?AE-1977:=20Add=20authentication=20tests?= =?UTF-8?q?=20for=20fetching=20k=C3=A4yt=C3=B6nvalvonta=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kaskypaatos_varsinainen_paatos_test.clj | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj index f3b156194..24f3762cf 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj @@ -126,6 +126,12 @@ (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) (t/is (= (:status response) 200)))) + (t/testing "Created document is not available without authentication" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/document/kaskypaatos.pdf" valvonta-id 4 osapuoli-id)) + (mock/header "Accept" "application/pdf")))] + (t/is (= (:status response) 403)) + (t/is (= (:body response) "Forbidden")))) + (t/testing "hallinto-oikeus-liite can be downloaded through the api" (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/attachment/hallinto-oikeus.pdf" valvonta-id 4 osapuoli-id)) (test-kayttajat/with-virtu-user) @@ -135,7 +141,13 @@ (t/testing "hallinto-oikeus-liite is the correct one" (t/is (= (slurp (io/input-stream (io/resource "pdf/hallinto-oikeudet/Valitusosoitus_30_pv_HAMEENLINNAN_HAO.pdf"))) - (slurp (:body response))))))))) + (slurp (:body response))))))) + + (t/testing "hallinto-oikeus-liite is not available without authentication" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/attachment/hallinto-oikeus.pdf" valvonta-id 4 osapuoli-id)) + (mock/header "Accept" "application/pdf")))] + (t/is (= (:status response) 403)) + (t/is (= (:body response) "Forbidden")))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully for yritys and document is generated with correct information" ;; Add the valvonta and previous toimenpides @@ -278,6 +290,12 @@ (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) (t/is (= (:status response) 200)))) + (t/testing "Created document is not available without authentication" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/yritykset/%s/document/kaskypaatos.pdf" valvonta-id 8 osapuoli-id)) + (mock/header "Accept" "application/pdf")))] + (t/is (= (:status response) 403)) + (t/is (= (:body response) "Forbidden")))) + (t/testing "hallinto-oikeus-liite can be downloaded through the api" (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/yritykset/%s/attachment/hallinto-oikeus.pdf" valvonta-id 8 osapuoli-id)) (test-kayttajat/with-virtu-user) @@ -287,7 +305,13 @@ (t/testing "hallinto-oikeus-liite is the correct one" (t/is (= (slurp (io/input-stream (io/resource "pdf/hallinto-oikeudet/Valitusosoitus_30_pv_ITA-SUOMEN_HAO.pdf"))) - (slurp (:body response))))))))))) + (slurp (:body response))))))) + + (t/testing "hallinto-oikeus-liite is not available without authentication" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/yritykset/%s/attachment/hallinto-oikeus.pdf" valvonta-id 8 osapuoli-id)) + (mock/header "Accept" "application/pdf")))] + (t/is (= (:status response) 403)) + (t/is (= (:body response) "Forbidden")))))))) (t/testing "Käskypäätös / varsinainen päätös toimenpide is created successfully when there are multiple osapuolis but one lives abroad and will not receive the document because of being outside court jurisdiction" ;; Add the valvonta and previous toimenpides From 4547089beb78abab6ca1eab701d6de8261fe77d2 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Mon, 13 Nov 2023 10:13:31 +0200 Subject: [PATCH 14/18] AE-1977: Remove add-hallinto-oikeus-attachment as unused --- .../main/clj/solita/etp/service/valvonta_kaytto/asha.clj | 6 ------ 1 file changed, 6 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj index edfe52e97..eee8fdac3 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj @@ -214,12 +214,6 @@ (:ilmoitustunnus valvonta)]) :attach {:contact (map osapuoli->contact osapuolet)}})) -(defn add-hallinto-oikeus-attachment - "Adds hallinto-oikeus specific attachment to the end of the given pdf" - [db pdf hallinto-oikeus-id] - (pdf/merge-pdf [(io/input-stream pdf) - (hao-attachment/attachment-for-hallinto-oikeus-id db hallinto-oikeus-id)])) - (defn generate-pdf-document [db whoami valvonta toimenpide ilmoituspaikat osapuoli osapuolet roolit] (let [template-id (:template-id toimenpide) From 934dac2c13526d9ce4524f48b1a792b637e9254b Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Mon, 13 Nov 2023 10:21:28 +0200 Subject: [PATCH 15/18] AE-1977: Make attachment-for-hallinto-oikeus-id to return the file as a byte-array --- .../valvonta_kaytto/hallinto_oikeus_attachment.clj | 5 ++++- .../hallinto_oikeus_attachment_test.clj | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 etp-backend/src/test/clj/solita/etp/service/valvonta_kaytto/hallinto_oikeus_attachment_test.clj diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/hallinto_oikeus_attachment.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/hallinto_oikeus_attachment.clj index 4c2d320fc..8c9102b4a 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/hallinto_oikeus_attachment.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/hallinto_oikeus_attachment.clj @@ -11,5 +11,8 @@ (hallinto-oikeus-db/find-attachment-name-by-hallinto-oikeus-id db) first :attachment-name)] - (io/input-stream (io/resource (str attachment-directory-path attachment-name))) + (-> (str attachment-directory-path attachment-name) + io/resource + io/input-stream + .readAllBytes) (throw (Exception. (str "Attachment not found for hallinto-oikeus-id: " hallinto-oikeus-id))))) diff --git a/etp-backend/src/test/clj/solita/etp/service/valvonta_kaytto/hallinto_oikeus_attachment_test.clj b/etp-backend/src/test/clj/solita/etp/service/valvonta_kaytto/hallinto_oikeus_attachment_test.clj new file mode 100644 index 000000000..2e927b086 --- /dev/null +++ b/etp-backend/src/test/clj/solita/etp/service/valvonta_kaytto/hallinto_oikeus_attachment_test.clj @@ -0,0 +1,12 @@ +(ns solita.etp.service.valvonta-kaytto.hallinto-oikeus-attachment-test + (:require [clojure.test :as t]) + (:require [solita.etp.service.valvonta-kaytto.hallinto-oikeus-attachment :refer [attachment-for-hallinto-oikeus-id]] + [solita.etp.test-system :as ts])) + +(t/use-fixtures :each ts/fixture) + +(t/deftest attachment-for-hallinto-oikeus-id-test + (t/testing "Unknown hallinto-oikeus-id results in exception" + (t/is (thrown-with-msg? Exception + #"Attachment not found for hallinto-oikeus-id: 666" + (attachment-for-hallinto-oikeus-id ts/*db* 666))))) From 8fa2280500f77917efc6823902a07b7dd0cc90e7 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Mon, 13 Nov 2023 12:55:11 +0200 Subject: [PATCH 16/18] AE-1977: Add attachments to asha in log-toimenpide! MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hallinto-oikeus attachments are sent to asha when creating käskypäätös / varsinainen päätös toimenpide - Refactor log-toimenpide! to multiarity function from variadic --- .../src/main/clj/solita/etp/service/asha.clj | 107 +++++++++++------- .../etp/service/valvonta_kaytto/asha.clj | 21 +++- .../test/clj/solita/etp/service/asha_test.clj | 51 ++++++--- 3 files changed, 120 insertions(+), 59 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/service/asha.clj b/etp-backend/src/main/clj/solita/etp/service/asha.clj index 852314088..0eaede0b8 100644 --- a/etp-backend/src/main/clj/solita/etp/service/asha.clj +++ b/etp-backend/src/main/clj/solita/etp/service/asha.clj @@ -9,6 +9,7 @@ [solita.etp.config :as config] [clojure.string :as str]) (:import (java.nio.charset StandardCharsets) + (java.time Instant) (java.util Base64))) (def toplevel-processing-actions @@ -218,48 +219,68 @@ (fn [name-identity] (reduce toplevel-processing-action-max (cons name-identity (keys states)))))) -(defn log-toimenpide! [sender-id request-id case-number processing-action & [documents]] - (let [processing-action-states (resolve-case-processing-action-state sender-id - request-id - case-number) - require-vireillepano (= {"Vireillepano" "NEW"} processing-action-states) - processing-action (-> processing-action - ;; Possibly redirect the processing action to Vireillepano - (with-vireillepano require-vireillepano) - ;; Prevent going backwards in the process - (with-latest-processing-action processing-action-states))] - (move-processing-action! - sender-id - request-id - case-number - processing-action-states - (-> processing-action :identity :processing-action :name-identity)) - (take-processing-action! - sender-id - request-id - case-number - (-> processing-action :identity :processing-action :name-identity)) - - (execute-operation! {:request-id request-id - :sender-id sender-id - :identity (:identity processing-action) - :processing-action (:processing-action processing-action)}) - - (doseq [document documents] - (add-documents-to-processing-action! - sender-id - request-id - case-number - (-> processing-action :processing-action :name) - [{:content (bytes->base64 document) - :type (-> processing-action :document :type) - :name (-> processing-action :document :filename)}])) - (take-processing-action! sender-id request-id case-number (-> processing-action :processing-action :name)) - (mark-processing-action-as-ready! - sender-id - request-id - case-number - (-> processing-action :processing-action :name)))) +(defn log-toimenpide! + ([sender-id request-id case-number processing-action] + (log-toimenpide! sender-id request-id case-number processing-action [] [])) + ([sender-id request-id case-number processing-action documents] + (log-toimenpide! sender-id request-id case-number processing-action documents [])) + ([sender-id request-id case-number processing-action documents attachments] + (let [processing-action-states (resolve-case-processing-action-state sender-id + request-id + case-number) + require-vireillepano (= {"Vireillepano" "NEW"} processing-action-states) + processing-action (-> processing-action + ;; Possibly redirect the processing action to Vireillepano + (with-vireillepano require-vireillepano) + ;; Prevent going backwards in the process + (with-latest-processing-action processing-action-states))] + (move-processing-action! + sender-id + request-id + case-number + processing-action-states + (-> processing-action :identity :processing-action :name-identity)) + (take-processing-action! + sender-id + request-id + case-number + (-> processing-action :identity :processing-action :name-identity)) + + (execute-operation! {:request-id request-id + :sender-id sender-id + :identity (:identity processing-action) + :processing-action (:processing-action processing-action)}) + + (doseq [document documents] + (add-documents-to-processing-action! + sender-id + request-id + case-number + (-> processing-action :processing-action :name) + [{:content (bytes->base64 document) + :type (-> processing-action :document :type) + :name (-> processing-action :document :filename)}])) + + (doseq [attachment attachments] + (when (nil? (-> processing-action :attachment)) + (throw (Exception. + (format "Received attachment for processing action %s but it has no attachments defined" + (-> processing-action :processing-action :name))))) + (add-documents-to-processing-action! + sender-id + request-id + case-number + (-> processing-action :processing-action :name) + [{:content (bytes->base64 attachment) + :type (-> processing-action :attachment :type) + :name (-> processing-action :attachment :filename)}])) + + (take-processing-action! sender-id request-id case-number (-> processing-action :processing-action :name)) + (mark-processing-action-as-ready! + sender-id + request-id + case-number + (-> processing-action :processing-action :name))))) (defn close-case! [sender-id request-id case-number description] (let [latest-prosessing-action (resolve-latest-case-processing-action-state sender-id request-id case-number)] @@ -271,7 +292,7 @@ {:identity {:case {:number case-number} :processing-action {:name-identity latest-prosessing-action}} :processing-action {:name "Asian sulkeminen" - :reception-date (java.time.Instant/now) + :reception-date (Instant/now) :description description}})) (proceed-operation! sender-id request-id case-number latest-prosessing-action "Sulje asia"))) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj index eee8fdac3..8703fbd02 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj @@ -37,6 +37,12 @@ :filename "haastemies-tiedoksianto.pdf"}}] (get documents type-key))) +(defn toimenpide-type->attachment [type-id] + (let [type-key (toimenpide/type-key type-id) + attachments {:decision-order-actual-decision {:type "Kirje" + :filename "hallinto-oikeus.pdf"}}] + (get attachments type-key))) + (defn find-kaytto-valvonta-documents [db valvonta-id] (->> (valvonta-kaytto-db/select-valvonta-documents db {:valvonta-id valvonta-id}) (map (fn [toimenpide] @@ -134,6 +140,7 @@ :decision-order-actual-decision {:identity {:case {:number (:diaarinumero toimenpide)} :processing-action {:name-identity "Päätöksenteko"}} :document (toimenpide-type->document (:type-id toimenpide)) + :attachment (toimenpide-type->attachment (:type-id toimenpide)) :processing-action {:name "Käskypäätös" :reception-date (Instant/now) :contacting-direction "SENT" @@ -251,7 +258,8 @@ :osapuoli-specific-data (type-specific-data/find-administrative-court-id-from-osapuoli-specific-data (:id osapuoli))) attachment (hao-attachment/attachment-for-hallinto-oikeus-id db hallinto-oikeus-id)] - (store/store-hallinto-oikeus-attachment aws-s3-client valvonta-id (:id toimenpide) osapuoli attachment))) + (store/store-hallinto-oikeus-attachment aws-s3-client valvonta-id (:id toimenpide) osapuoli attachment) + attachment)) (defn log-toimenpide! [db aws-s3-client whoami valvonta toimenpide osapuolet ilmoituspaikat roolit] (let [request-id (request-id (:id valvonta) (:id toimenpide)) @@ -270,13 +278,20 @@ (when (toimenpide/kaskypaatos-varsinainen-paatos? toimenpide) (store-hallinto-oikeus-attachment! db aws-s3-client (:id valvonta) toimenpide osapuoli)) - document)))))] + document))))) + attachments (when (toimenpide/kaskypaatos-varsinainen-paatos? toimenpide) + (->> osapuolet + (filter osapuoli/omistaja?) + (remove-osapuolet-with-no-document toimenpide) + (mapv (fn [osapuoli] + (store-hallinto-oikeus-attachment! db aws-s3-client (:id valvonta) toimenpide osapuoli)))))] (asha/log-toimenpide! sender-id request-id case-number processing-action - documents))) + documents + attachments))) (defn close-case! [whoami valvonta-id toimenpide] (asha/close-case! diff --git a/etp-backend/src/test/clj/solita/etp/service/asha_test.clj b/etp-backend/src/test/clj/solita/etp/service/asha_test.clj index f5eb48372..59b965087 100644 --- a/etp-backend/src/test/clj/solita/etp/service/asha_test.clj +++ b/etp-backend/src/test/clj/solita/etp/service/asha_test.clj @@ -3,6 +3,7 @@ [clojure.string :as str] [clojure.test :as t] [solita.etp.service.asha :as asha-service] + [solita.etp.service.valvonta-kaytto.hallinto-oikeus-attachment :as hao] [solita.etp.test-system :as ts] [clostache.parser :refer [render-resource]]) (:import (java.nio.charset StandardCharsets) @@ -207,10 +208,10 @@ :request-received take-processing-action-called} (render-resource "asha/logtoimenpide/create-processing-action-operation-template.xml" - (merge render-context {:processing-action used-processing-action - :processing-action-operation-name processing-action-operation-name - :description description - :reception-date now})) + (merge render-context {:processing-action used-processing-action + :processing-action-operation-name processing-action-operation-name + :description description + :reception-date now})) {:response-status 200 :request-received create-processing-action-operation} @@ -232,7 +233,31 @@ (t/is (= 1 @take-processing-action-called)) (t/is (= 1 @create-processing-action-operation)) (t/is (= 1 @take-processing-action-for-operation)) - (t/is (= 1 @mark-processing-action-operation-ready))))) + (t/is (= 1 @mark-processing-action-operation-ready)))) + + (t/testing "Exception is thrown when log-toimenpide is called with attachments but the toimenpidetype doesn't have attachments defined" + (let [request-id "request-id" + case-number 100 + sender-id "solita" + original-processing-action "Käsittely" + processing-action-operation-name "Kehotus" + description "Kuvaus" + now (Instant/now)] + (t/is (thrown-with-msg? + Exception + #"Received attachment for processing action Kehotus but it has no attachments defined" + (asha-service/log-toimenpide! sender-id + request-id + case-number + {:identity {:case {:number case-number} + :processing-action {:name-identity original-processing-action}} + :processing-action {:name processing-action-operation-name + :reception-date now + :description description}} + ;; Using hallinto-oikeus attachment as a document and an attachment + ;; here to just have some file + [(hao/attachment-for-hallinto-oikeus-id ts/*db* 3)] + (hao/attachment-for-hallinto-oikeus-id ts/*db* 4))))))) (t/deftest move-processing-action-test (binding [asha-service/post! (handle-requests {})] ;; There should be no requests - fail all @@ -254,10 +279,10 @@ [asha-service/post! (handle-requests {(render-resource "asha/moveaction/move-template.xml" {:sender-id sender-id - :request-id request-id - :case-number case-number - :processing-action "Vireillepano" - :proceed-decision "Siirry käsittelyyn"}) + :request-id request-id + :case-number case-number + :processing-action "Vireillepano" + :proceed-decision "Siirry käsittelyyn"}) {:response-body "Irrelevant" :response-status 200 :request-received move-called}})] @@ -266,10 +291,10 @@ (t/testing "Move from Päätöksenteko to Käsittely" (let [move-called (atom 0)] (binding [asha-service/post! (handle-requests {(render-resource "asha/moveaction/move-template.xml" {:sender-id sender-id - :request-id request-id - :case-number case-number - :processing-action "Käsittely" - :proceed-decision "Siirry päätöksentekoon"}) + :request-id request-id + :case-number case-number + :processing-action "Käsittely" + :proceed-decision "Siirry päätöksentekoon"}) {:response-body "Irrelevant" :response-status 200 :request-received move-called}})] From 8f1556eaccc29a6cc49365de845e84a668d96374 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Thu, 16 Nov 2023 15:27:36 +0200 Subject: [PATCH 17/18] AE-1977: add ! to store-document and store-hallinto-oikeus-attachment function names --- .../main/clj/solita/etp/service/valvonta_kaytto/asha.clj | 4 ++-- .../main/clj/solita/etp/service/valvonta_kaytto/store.clj | 4 ++-- .../valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj index 8703fbd02..984849ec4 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj @@ -258,7 +258,7 @@ :osapuoli-specific-data (type-specific-data/find-administrative-court-id-from-osapuoli-specific-data (:id osapuoli))) attachment (hao-attachment/attachment-for-hallinto-oikeus-id db hallinto-oikeus-id)] - (store/store-hallinto-oikeus-attachment aws-s3-client valvonta-id (:id toimenpide) osapuoli attachment) + (store/store-hallinto-oikeus-attachment! aws-s3-client valvonta-id (:id toimenpide) osapuoli attachment) attachment)) (defn log-toimenpide! [db aws-s3-client whoami valvonta toimenpide osapuolet ilmoituspaikat roolit] @@ -273,7 +273,7 @@ (map (fn [osapuoli] (let [document (generate-pdf-document db whoami valvonta toimenpide ilmoituspaikat osapuoli osapuolet roolit)] - (store/store-document aws-s3-client (:id valvonta) (:id toimenpide) osapuoli document) + (store/store-document! aws-s3-client (:id valvonta) (:id toimenpide) osapuoli document) (when (toimenpide/kaskypaatos-varsinainen-paatos? toimenpide) (store-hallinto-oikeus-attachment! db aws-s3-client (:id valvonta) toimenpide osapuoli)) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj index 764bebe82..52d724c68 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/store.clj @@ -11,7 +11,7 @@ (osapuoli/henkilo? osapuoli) (str file-key-prefix "/" valvonta-id "/" toimenpide-id "/henkilo/" (:id osapuoli)) (osapuoli/yritys? osapuoli) (str file-key-prefix "/" valvonta-id "/" toimenpide-id "/yritys/" (:id osapuoli)))) -(defn store-document +(defn store-document! "Store the main document of the käytönvalvonta toimenpide to the object storage" [aws-s3-client valvonta-id toimenpide-id osapuoli document] (file-service/upsert-file-from-bytes @@ -27,7 +27,7 @@ (defn info-letter [] (-> "pdf/Saate_rakennuksen_omistaja_su_ru.pdf" io/resource io/input-stream)) -(defn ^:dynamic store-hallinto-oikeus-attachment +(defn ^:dynamic store-hallinto-oikeus-attachment! "Store the hallinto-oikeus attachment of the käytönvalvonta toimenpide to the object storage" [aws-s3-client valvonta-id toimenpide-id osapuoli document] (file-service/upsert-file-from-bytes diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj index 24f3762cf..9601c162a 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kaskypaatos_varsinainen_paatos_test.clj @@ -18,7 +18,7 @@ (t/use-fixtures :each ts/fixture) -(def original-store-hallinto-oikeus-attachment file-store/store-hallinto-oikeus-attachment) +(def original-store-hallinto-oikeus-attachment file-store/store-hallinto-oikeus-attachment!) (t/deftest kaskypaatos-varsinainen-paatos-test ;; Add the main user for the following tests @@ -91,7 +91,7 @@ #'pdf/html->pdf (partial html->pdf-with-assertion "documents/kaskypaatos-varsinainen-paatos-yksityishenkilo.html" html->pdf-called?) - #'file-store/store-hallinto-oikeus-attachment + #'file-store/store-hallinto-oikeus-attachment! (fn [aws-s3-client valvonta-id toimenpide-id osapuoli document] (reset! store-hallinto-oikeus-attachment-called? true) (original-store-hallinto-oikeus-attachment aws-s3-client valvonta-id toimenpide-id osapuoli document))} @@ -211,7 +211,7 @@ #'pdf/html->pdf (partial html->pdf-with-assertion "documents/kaskypaatos-varsinainen-paatos-yritys.html" html->pdf-called?) - #'file-store/store-hallinto-oikeus-attachment + #'file-store/store-hallinto-oikeus-attachment! (fn [aws-s3-client valvonta-id toimenpide-id osapuoli document] (reset! store-hallinto-oikeus-attachment-called? true) (original-store-hallinto-oikeus-attachment aws-s3-client valvonta-id toimenpide-id osapuoli document))} From d01336e295a55dfc0ffe6916f97577daffca83c0 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Fri, 17 Nov 2023 08:51:05 +0200 Subject: [PATCH 18/18] =?UTF-8?q?AE-1977:=20Add=20hallinto-oikeusliite=20t?= =?UTF-8?q?o=20sakkop=C3=A4=C3=A4t=C3=B6s=20/=20varsinainen=20p=C3=A4?= =?UTF-8?q?=C3=A4t=C3=B6s=20toimenpidetype?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../etp/service/valvonta_kaytto/asha.clj | 13 ++++---- .../service/valvonta_kaytto/toimenpide.clj | 4 +++ .../sakkopaatos_varsinainen_paatos_test.clj | 32 +++++++++++++++++-- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj index 984849ec4..3d3af31b0 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/asha.clj @@ -39,8 +39,10 @@ (defn toimenpide-type->attachment [type-id] (let [type-key (toimenpide/type-key type-id) - attachments {:decision-order-actual-decision {:type "Kirje" - :filename "hallinto-oikeus.pdf"}}] + attachments {:decision-order-actual-decision {:type "Kirje" + :filename "hallinto-oikeus.pdf"} + :penalty-decision-actual-decision {:type "Kirje" + :filename "hallinto-oikeus.pdf"}}] (get attachments type-key))) (defn find-kaytto-valvonta-documents [db valvonta-id] @@ -176,6 +178,7 @@ :penalty-decision-actual-decision {:identity {:case {:number (:diaarinumero toimenpide)} :processing-action {:name-identity "Päätöksenteko"}} :document (toimenpide-type->document (:type-id toimenpide)) + :attachment (toimenpide-type->attachment (:type-id toimenpide)) :processing-action {:name "Sakkopäätös" :reception-date (Instant/now) :contacting-direction "SENT" @@ -274,12 +277,8 @@ (let [document (generate-pdf-document db whoami valvonta toimenpide ilmoituspaikat osapuoli osapuolet roolit)] (store/store-document! aws-s3-client (:id valvonta) (:id toimenpide) osapuoli document) - - (when (toimenpide/kaskypaatos-varsinainen-paatos? toimenpide) - (store-hallinto-oikeus-attachment! db aws-s3-client (:id valvonta) toimenpide osapuoli)) - document))))) - attachments (when (toimenpide/kaskypaatos-varsinainen-paatos? toimenpide) + attachments (when (toimenpide/has-hallinto-oikeus-liite? toimenpide) (->> osapuolet (filter osapuoli/omistaja?) (remove-osapuolet-with-no-document toimenpide) diff --git a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/toimenpide.clj b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/toimenpide.clj index c854ebe06..8ceb6b04b 100644 --- a/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/toimenpide.clj +++ b/etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto/toimenpide.clj @@ -73,6 +73,10 @@ :penalty-decision-notice-bailiff :penalty-decision-waiting-for-deadline})) +(def has-hallinto-oikeus-liite? + (partial some-type? #{:decision-order-actual-decision + :penalty-decision-actual-decision})) + (def asha-toimenpide? (partial some-type? #{:rfi-request :rfi-order diff --git a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/sakkopaatos_varsinainen_paatos_test.clj b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/sakkopaatos_varsinainen_paatos_test.clj index 05cd205a6..0dc339683 100644 --- a/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/sakkopaatos_varsinainen_paatos_test.clj +++ b/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/sakkopaatos_varsinainen_paatos_test.clj @@ -1,5 +1,6 @@ (ns solita.etp.valvonta-kaytto.sakkopaatos-varsinainen-paatos-test (:require + [clojure.java.io :as io] [clojure.java.jdbc :as jdbc] [clojure.test :as t] [jsonista.core :as j] @@ -8,12 +9,15 @@ [solita.etp.document-assertion :refer [html->pdf-with-assertion]] [solita.etp.service.pdf :as pdf] [solita.etp.service.valvonta-kaytto :as valvonta-service] + [solita.etp.service.valvonta-kaytto.store :as file-store] [solita.etp.test-data.kayttaja :as test-kayttajat] [solita.etp.test-system :as ts]) (:import (java.time Clock LocalDate ZoneId))) (t/use-fixtures :each ts/fixture) +(def original-store-hallinto-oikeus-attachment file-store/store-hallinto-oikeus-attachment!) + (t/deftest sakkopaatos-varsinainen-paatos-test ;; Add the main user for the following tests (test-kayttajat/insert-virtu-paakayttaja! @@ -43,6 +47,7 @@ (.atStartOfDay (ZoneId/systemDefault)) .toInstant) html->pdf-called? (atom false) + store-hallinto-oikeus-attachment-called? (atom false) ;; Add osapuoli to the valvonta osapuoli-id (valvonta-service/add-henkilo! ts/*db* @@ -123,7 +128,11 @@ time/timezone) #'pdf/html->pdf (partial html->pdf-with-assertion "documents/sakkopaatos-varsinainen-paatos-yksityishenkilo.html" - html->pdf-called?)} + html->pdf-called?) + #'file-store/store-hallinto-oikeus-attachment! + (fn [aws-s3-client valvonta-id toimenpide-id osapuoli document] + (reset! store-hallinto-oikeus-attachment-called? true) + (original-store-hallinto-oikeus-attachment aws-s3-client valvonta-id toimenpide-id osapuoli document))} (let [new-toimenpide {:type-id 15 :deadline-date (str (LocalDate/of 2023 12 10)) :template-id 9 @@ -145,6 +154,7 @@ (test-kayttajat/with-virtu-user) (mock/header "Accept" "application/json")))] (t/is (true? @html->pdf-called?)) + (t/is (true? @store-hallinto-oikeus-attachment-called?)) (t/is (= (:status response) 201)) (t/testing "Toimenpide is returned through the api" @@ -199,7 +209,25 @@ :answer-commentary-fi "En tiennyt, että todistus tarvitaan :("}] :department-head-title-sv "Apulaisjohtaja på svenska" :fine 8572} - :template-id 9})))))))) + :template-id 9})))) + + (t/testing "Created document can be downloaded through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/document/kaskypaatos.pdf" valvonta-id 6 osapuoli-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/pdf")))] + (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) + (t/is (= (:status response) 200)))) + + (t/testing "hallinto-oikeus-liite can be downloaded through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/attachment/hallinto-oikeus.pdf" valvonta-id 6 osapuoli-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/pdf")))] + (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) + (t/is (= (:status response) 200)) + + (t/testing "hallinto-oikeus-liite is the correct one" + (t/is (= (slurp (io/input-stream (io/resource "pdf/hallinto-oikeudet/Valitusosoitus_30_pv_POHJOIS-SUOMEN_HAO.pdf"))) + (slurp (:body response))))))))))) (t/testing "Sakkopäätös / varsinainen päätös toimenpide is created successfully for yritys and document is generated with correct information" ;; Add the valvonta and previous toimenpides