diff --git a/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kehotus_test.clj b/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kehotus_test.clj new file mode 100644 index 000000000..a98cdc878 --- /dev/null +++ b/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kehotus_test.clj @@ -0,0 +1,126 @@ +(ns solita.etp.valvonta-kaytto.kehotus-test + (:require + [clojure.test :as t] + [jsonista.core :as j] + [ring.mock.request :as mock] + [solita.common.time :as time] + [solita.etp.document-assertion :as doc] + [solita.etp.service.pdf :as pdf] + [solita.etp.service.valvonta-kaytto :as valvonta-service] + [solita.etp.test-data.kayttaja :as test-kayttajat] + [solita.etp.test-system :as ts]) + (:import (java.time Clock LocalDate))) + +(t/use-fixtures :each ts/fixture) + +(t/deftest kehotus-test + ;; Add the main user for the following tests + (test-kayttajat/insert-virtu-paakayttaja! + {:etunimi "Asian" + :sukunimi "Tuntija" + :email "testi@ara.fi" + :puhelin "0504363675457" + :titteli-fi "energia-asiantuntija" + :titteli-sv "energiexpert"}) + (t/testing "Kehotus toimenpide is created successfully for yksityishenkilö and document is generated with correct information" + ;; Add the valvonta and previous toimenpides + ;; so that käskypäätös / kuulemiskirje toimenpide can be created + (let [valvonta-id (valvonta-service/add-valvonta! ts/*db* {:katuosoite "Testitie 5" + :postinumero "90100" + :havaintopaiva (LocalDate/of 2023 7 22) + :ilmoituspaikka-id 0 + :ilmoitustunnus "ASF5"}) + html->pdf-called? (atom false) + ;; Add osapuoli to the valvonta + osapuoli-id (valvonta-service/add-henkilo! ts/*db* + valvonta-id + {:toimitustapa-description nil + :toimitustapa-id 2 + :email nil + :rooli-id 0 + :jakeluosoite "Testikatu 12" + :postitoimipaikka "Helsinki" + :puhelin nil + :sukunimi "Talonomistaja" + :postinumero "00100" + :henkilotunnus "000000-0000" + :rooli-description "Omistaja" + :etunimi "Testi" + :vastaanottajan-tarkenne nil + :maa "FI"})] + + ;; Mock the current time to ensure that the document has a fixed date + (with-bindings {#'time/clock (Clock/fixed (-> (LocalDate/of 2023 6 26) + (.atStartOfDay time/timezone) + .toInstant) + time/timezone) + #'pdf/html->pdf (partial doc/html->pdf-with-assertion + "documents/kehotus.html" + html->pdf-called?) + } + (let [new-toimenpide {:type-id 2 + :deadline-date (str (LocalDate/of 2023 7 22)) + :template-id 3 + :description "Lähetetään kehotus"} + response (ts/handler (-> (mock/request :post (format "/api/private/valvonta/kaytto/%s/toimenpiteet" valvonta-id)) + (mock/json-body new-toimenpide) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/json")))] + (t/is (true? @html->pdf-called?)) + (t/is (= (:status response) 201)) + + (t/testing "Toimenpide is returned through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet" valvonta-id)) + (test-kayttajat/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) 1)) + (t/is (= (-> response-body + last + (dissoc :publish-time :create-time)) + {:author {:etunimi "Asian" + :id 1 + :rooli-id 2 + :sukunimi "Tuntija"} + :deadline-date "2023-07-22" + :description "Lähetetään kehotus" + :diaarinumero nil + :filename "kehotus.pdf" + :henkilot [{:email nil + :etunimi "Testi" + :henkilotunnus "000000-0000" + :id 1 + :jakeluosoite "Testikatu 12" + :maa "FI" + :postinumero "00100" + :postitoimipaikka "Helsinki" + :puhelin nil + :rooli-description "Omistaja" + :rooli-id 0 + :sukunimi "Talonomistaja" + :toimitustapa-description nil + :toimitustapa-id 2 + :valvonta-id 1 + :vastaanottajan-tarkenne nil}] + :id 1 + :template-id 3 + :type-id 2 + :type-specific-data nil + :valvonta-id 1 + :yritykset []})))) + + (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/kehotus.pdf" valvonta-id 1 osapuoli-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/pdf"))) + pdf-document (doc/read-pdf (:body response))] + (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) + (t/is (= (:status response) 200)) + + (t/testing "and document has two pages" + (t/is (= (.getNumberOfPages pdf-document) + 2))) + + (t/testing "and document looks as it should" + (doc/assert-pdf-matches-visually pdf-document "documents/kehotus.pdf"))))))))) \ No newline at end of file diff --git a/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/varoitus_test.clj b/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/varoitus_test.clj new file mode 100644 index 000000000..d508f1f14 --- /dev/null +++ b/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/varoitus_test.clj @@ -0,0 +1,137 @@ +(ns solita.etp.valvonta-kaytto.varoitus-test + (:require + [clojure.java.jdbc :as jdbc] + [clojure.test :as t] + [jsonista.core :as j] + [ring.mock.request :as mock] + [solita.common.time :as time] + [solita.etp.document-assertion :as doc] + [solita.etp.service.pdf :as pdf] + [solita.etp.service.valvonta-kaytto :as valvonta-service] + [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) + +(t/deftest varoitus-test + ;; Add the main user for the following tests + (test-kayttajat/insert-virtu-paakayttaja! + {:etunimi "Asian" + :sukunimi "Tuntija" + :email "testi@ara.fi" + :puhelin "0504363675457" + :titteli-fi "energia-asiantuntija" + :titteli-sv "energiexpert"}) + (t/testing "Kehotus toimenpide is created successfully for yksityishenkilö and document is generated with correct information" + ;; Add the valvonta and previous toimenpides + ;; so that käskypäätös / kuulemiskirje toimenpide can be created + (let [valvonta-id (valvonta-service/add-valvonta! ts/*db* {:katuosoite "Testitie 5" + :postinumero "90100" + :havaintopaiva (LocalDate/of 2023 7 22) + :ilmoituspaikka-id 0 + :ilmoitustunnus "ASF5"}) + kehotus-timestamp (-> (LocalDate/of 2023 6 12) + (.atStartOfDay (ZoneId/systemDefault)) + .toInstant) + html->pdf-called? (atom false) + ;; Add osapuoli to the valvonta + osapuoli-id (valvonta-service/add-henkilo! ts/*db* + valvonta-id + {:toimitustapa-description nil + :toimitustapa-id 2 + :email nil + :rooli-id 0 + :jakeluosoite "Testikatu 12" + :postitoimipaikka "Helsinki" + :puhelin nil + :sukunimi "Talonomistaja" + :postinumero "00100" + :henkilotunnus "000000-0000" + :rooli-description "Omistaja" + :etunimi "Testi" + :vastaanottajan-tarkenne nil + :maa "FI"})] + + ;; Add kehotus-toimenpide to the valvonta + (jdbc/insert! ts/*db* :vk_toimenpide {:valvonta_id valvonta-id + :type_id 2 + :create_time kehotus-timestamp + :publish_time kehotus-timestamp + :deadline_date (LocalDate/of 2023 7 12)}) + + ;; Mock the current time to ensure that the document has a fixed date + (with-bindings {#'time/clock (Clock/fixed (-> (LocalDate/of 2023 6 26) + (.atStartOfDay time/timezone) + .toInstant) + time/timezone) + #'pdf/html->pdf (partial doc/html->pdf-with-assertion + "documents/varoitus.html" + html->pdf-called?) + } + (let [new-toimenpide {:type-id 3 + :deadline-date (str (LocalDate/of 2023 7 22)) + :template-id 4 + :description "Lähetetään varoitus"} + response (ts/handler (-> (mock/request :post (format "/api/private/valvonta/kaytto/%s/toimenpiteet" valvonta-id)) + (mock/json-body new-toimenpide) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/json")))] + (t/is (true? @html->pdf-called?)) + (t/is (= (:status response) 201)) + + (t/testing "Toimenpide is returned through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet" valvonta-id)) + (test-kayttajat/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) 2)) + (t/is (= (-> response-body + last + (dissoc :publish-time :create-time)) + {:author {:etunimi "Asian" + :id 1 + :rooli-id 2 + :sukunimi "Tuntija"} + :deadline-date "2023-07-22" + :description "Lähetetään varoitus" + :diaarinumero nil + :filename "varoitus.pdf" + :henkilot [{:email nil + :etunimi "Testi" + :henkilotunnus "000000-0000" + :id 1 + :jakeluosoite "Testikatu 12" + :maa "FI" + :postinumero "00100" + :postitoimipaikka "Helsinki" + :puhelin nil + :rooli-description "Omistaja" + :rooli-id 0 + :sukunimi "Talonomistaja" + :toimitustapa-description nil + :toimitustapa-id 2 + :valvonta-id 1 + :vastaanottajan-tarkenne nil}] + :id 2 + :template-id 4 + :type-id 3 + :type-specific-data nil + :valvonta-id 1 + :yritykset []})))) + + (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/varoitus.pdf" valvonta-id 2 osapuoli-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/pdf"))) + pdf-document (doc/read-pdf (:body response))] + (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) + (t/is (= (:status response) 200)) + + (t/testing "and document has two pages" + (t/is (= (.getNumberOfPages pdf-document) + 2))) + + (t/testing "and document looks as it should" + (doc/assert-pdf-matches-visually pdf-document "documents/varoitus.pdf"))))))))) \ No newline at end of file diff --git a/etp-core/etp-backend/src/test/resources/documents/kehotus.html b/etp-core/etp-backend/src/test/resources/documents/kehotus.html new file mode 100644 index 000000000..2faa67d5b --- /dev/null +++ b/etp-core/etp-backend/src/test/resources/documents/kehotus.html @@ -0,0 +1,105 @@ +
Kohde/Objekt: | +
+ Testitie 5
+ 90100 OULU
+ |
+
+ Valvontamme perusteella myynnissä tai vuokrattavana olevaa rakennustanne/asuntoanne markkinoidaan julkisesti + ilman energiatodistusta. Mikäli kohteen julkista markkinointia jatketaan tai se myydään, ARA kehottaa + esittämään energiatodistuksen 22.07.2023 mennessä sähköpostitse energiatodistus@ara.fi tai postitse. +
+ ++ Energiatodistus on hankittava ennen kuin kohdetta aletaan markkinoida julkisesti, sillä myynti- tai + vuokrausilmoituksessa on mainittava kohteen energiatehokkuusluokka. Rakennusta, huoneistoa tai niiden + hallintaoikeutta myytäessä tai vuokrattaessa täytyy olla energiatodistus. Energiatodistus on annettava joko + alkuperäisenä tai jäljennöksenä ostajalle tai vuokralaiselle. Rakennuksen omistaja tai haltija vastaa siitä, + että rakennuksen energiatodistus hankitaan ja sitä käytetään laissa säädetyissä tilanteissa. +
+ ++ Asumisen rahoitus- ja kehittämiskeskuksen (ARA) tehtävänä on valvoa energiatodistusten käyttämistä myynti- + ja vuokraustilanteissa. Jos rakennuksen omistaja ei täytä laissa säädettyjä velvollisuuksiaan, ARA kehottaa + korjaamaan asian ja antaa määräajan korjaukselle. Jos asiaa ei korjata määräajassa, ARA antaa rakennuksen + omistajalle varoituksen ja uuden määräajan. Jos asiaa ei edelleenkään korjata, ARA antaa omistajaa + velvoittavan käskypäätöksen, jota voidaan tehostaa uhkasakolla. +
+ + + ++ På basis av vår tillsyn marknadsförs den byggnad/bostad som ni ska sälja eller hyra ut offentligt utan + energicertifikat. Om den offentliga marknadsföringen av objektet fortsätter eller om det säljs uppmanar + ARA er att skicka in ett energicertifikat senast den 22.07.2023 per e-post till energiatodistus@ara.fi + eller per post. +
+ ++ Ett energicertifikat ska skaffas innan objektet börjar marknadsföras offentligt, eftersom objektets + energieffektivitetsklass ska nämnas i försäljnings- eller hyresannonsen. Vid försäljning eller uthyrning av + en byggnad eller lägenhet eller besittningsrätten till dem måste det finnas ett + energicertifikat. Energicertifikatet ska överlämnas till köparen eller hyrestagaren antingen i original + eller som kopia. Byggnadens ägare eller innehavare ansvarar för att byggnadens energicertifikat skaffas och + används i de situationer som regleras i lagen. +
+ ++ Finansierings- och utvecklingscentralen för boendet (ARA) har till uppgift att övervaka användningen av + energicertifikat vid försäljning och uthyrning. Om byggnadens ägare inte uppfyller sin lagstadgade + skyldigheter uppmanar ARA ägaren att korrigera saken och ställer upp en tidsfrist för korrigeringen. Om + saken inte korrigeras inom tidsfristen ger ARA byggnadens ägare en varning och en ny tidsfrist. Om saken + alltjämt inte korrigeras ger ARA ägaren ett förpliktande beslut om order, som kan förenas med ett vite. +
+ +
+ Asian Tuntija
+
+ energia-asiantuntija/energiexpert, ARA
+
Sovelletut säännökset: | +Laki rakennuksen energiatodistuksesta (50/2013) | +
Tillämpade förordningar: | +Lagen om energicertifikat för byggnader (50/2013) | +
Tiedoksi/För kännedom: | +|
+
|
+