From 4326ac9e0a985fdd7228fed8dccc712af133b457 Mon Sep 17 00:00:00 2001 From: solita-staskila Date: Mon, 24 Feb 2025 16:51:53 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Lis=C3=A4=C3=A4=20ep=C3=A4onnistuva=20paylo?= =?UTF-8?q?ad=20testidataan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/reittitoteuma_epaonnistuva.json | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 test/resurssit/api/reittitoteuma_epaonnistuva.json diff --git a/test/resurssit/api/reittitoteuma_epaonnistuva.json b/test/resurssit/api/reittitoteuma_epaonnistuva.json new file mode 100644 index 0000000000..4d383ef979 --- /dev/null +++ b/test/resurssit/api/reittitoteuma_epaonnistuva.json @@ -0,0 +1,89 @@ +{ + "otsikko": { + "lahettaja": { + "jarjestelma": "Tietomekka Oy", + "organisaatio": { + "ytunnus": "3007636-4", + "nimi": "Terranor Oy" + } + }, + "viestintunniste": { + "id": 62711560 + }, + "lahetysaika": "2025-02-24T08:49:22Z" + }, + "reittitoteumat": [ + { + "reittitoteuma": { + "toteuma": { + "tunniste": { + "id": 86123323 + }, + "alkanut": "2025-02-24T07:03:04Z", + "paattynyt": "2025-02-24T07:03:11Z", + "toteumatyyppi": "kokonaishintainen", + "suorittaja": { + "ytunnus": "3007636-4", + "nimi": "Terranor Oy" + }, + "tehtavat": [ + { + "tehtava": { + "id": 1367, + "maara": { + "yksikko": "jkm", + "maara": 0.042 + } + } + } + ], + "materiaalit": [] + }, + "reitti": [ + { + "reittipiste": { + "aika": "2025-02-24T07:03:04Z", + "koordinaatit": { + "x": 432415.13100000739, + "y": 6896034.008000019 + }, + "tehtavat": [ + { + "tehtava": { + "id": 1367 + } + } + ] + } + }, + { + "reittipiste": { + "aika": "2025-02-24T07:03:11Z", + "koordinaatit": { + "x": 432375.66300000704, + "y": 6896044.0150000174 + }, + "tehtavat": [ + { + "tehtava": { + "id": 1367, + "maara": { + "yksikko": "jkm", + "maara": 0.042 + } + } + } + ], + "materiaalit": [] + } + } + ], + "tyokone": { + "id": "27608", + "tunnus": "Terranor Oy", + "tyokonetyyppi": "Huoltoauto" + } + } + } + ] +} \ No newline at end of file From 30ebdd3df76e529ec9d2c5f289a637d441dce83d Mon Sep 17 00:00:00 2001 From: solita-staskila Date: Mon, 24 Feb 2025 17:41:44 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Lis=C3=A4=C3=A4=20testi=20virheelliseen=20m?= =?UTF-8?q?ultilinestring=20yhdist=C3=A4miseen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/reittitoteuman_kirjaus_test.clj | 56 +++++++++++++++++++ .../api/reittitoteuma_epaonnistuva.json | 6 +- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/test/clj/harja/palvelin/integraatiot/api/reittitoteuman_kirjaus_test.clj b/test/clj/harja/palvelin/integraatiot/api/reittitoteuman_kirjaus_test.clj index aedcc0ca19..18914871a9 100644 --- a/test/clj/harja/palvelin/integraatiot/api/reittitoteuman_kirjaus_test.clj +++ b/test/clj/harja/palvelin/integraatiot/api/reittitoteuman_kirjaus_test.clj @@ -30,6 +30,62 @@ (u (str "DELETE FROM toteuma_tehtava WHERE toteuma = " toteuma-id)) (u (str "DELETE FROM toteuma WHERE ulkoinen_id = " ulkoinen-id))) +(deftest tallenna-epaonnistuva-viivageometria + (let [urakka-id (hae-oulun-maanteiden-hoitourakan-2019-2024-id) + y-tunnus (str (gensym)) + _ (anna-kirjoitusoikeus kayttaja) + + ;; Testataan virheellistä linestring kutsua, kyseinen json palauttaa + ;; MULTILINESTRING((548272.452 7053596.049), ...) jossa on vain 1 piste + kutsu (fn [ytunnus] + (tyokalut/post-kutsu ["/api/urakat/" urakka-id "/toteumat/reitti"] kayttaja portti + (-> "test/resurssit/api/reittitoteuma_epaonnistuva.json" + slurp + (.replace "__YTUNNUS__" ytunnus)))) + + vastaus (kutsu y-tunnus) + ;; Normaalisti kutsun pitäisi onnistua + _ (is (= 200 (:status vastaus))) + toteuma-kannassa (first (q (str "SELECT ulkoinen_id, suorittajan_ytunnus, suorittajan_nimi FROM toteuma WHERE suorittajan_ytunnus = '" y-tunnus "'"))) + _ (is (= toteuma-kannassa [86123323 y-tunnus "Terranor Oy"])) + + ;; Muuta yhdista funktiota, jotta yksipisteinen multilinestring osuu ST_MakeLine, josta tulee SQL virhe + ;; ERROR: geometry requires more points + _ (u "DROP FUNCTION yhdista_multilinestring(GEOMETRY);") + _ (u "CREATE OR REPLACE FUNCTION yhdista_multilinestring(geometriat GEOMETRY) + RETURNS GEOMETRY AS $$ + DECLARE + i INTEGER; + j INTEGER; + viiva GEOMETRY; + tulos GEOMETRY[]; + BEGIN + tulos := ARRAY[]::GEOMETRY[]; + FOR i IN 1..ST_NumGeometries(geometriat) LOOP + viiva := ST_GeometryN(geometriat, i); + CASE + WHEN ST_GeometryType(viiva) = 'ST_MultiLineString' THEN + FOR j IN 1..ST_NumGeometries(viiva) LOOP + tulos := tulos || ST_GeometryN(viiva, j); + END LOOP; + WHEN ST_GeometryType(viiva) = 'ST_Point' THEN + tulos := tulos || ST_MakeLine(viiva); + ELSE + tulos := tulos || viiva; + END CASE; + END LOOP; + RETURN ST_Collect(tulos); + END; + $$ LANGUAGE plpgsql;") + + y-tunnus (str (gensym)) + vastaus (kutsu y-tunnus) + ;; Viallisella pisteyhdistelyllä palautuu sisäinen sql virhe + _ (is (= 500 (:status vastaus))) + _ (is (= + (-> vastaus :body (json/read-json) first) + [:virheet [{:virhe {:koodi "sisainen-kasittelyvirhe", :viesti "Sisäinen käsittelyvirhe"}}]]))])) + (deftest ^:perf yksittainen-kirjaus-ei-kesta-liian-kauan (let [sopimus-id (hae-annetun-urakan-paasopimuksen-id urakka) _ (anna-kirjoitusoikeus kayttaja)] diff --git a/test/resurssit/api/reittitoteuma_epaonnistuva.json b/test/resurssit/api/reittitoteuma_epaonnistuva.json index 4d383ef979..d67cc63349 100644 --- a/test/resurssit/api/reittitoteuma_epaonnistuva.json +++ b/test/resurssit/api/reittitoteuma_epaonnistuva.json @@ -3,7 +3,7 @@ "lahettaja": { "jarjestelma": "Tietomekka Oy", "organisaatio": { - "ytunnus": "3007636-4", + "ytunnus": "__YTUNNUS__", "nimi": "Terranor Oy" } }, @@ -23,7 +23,7 @@ "paattynyt": "2025-02-24T07:03:11Z", "toteumatyyppi": "kokonaishintainen", "suorittaja": { - "ytunnus": "3007636-4", + "ytunnus": "__YTUNNUS__", "nimi": "Terranor Oy" }, "tehtavat": [ @@ -86,4 +86,4 @@ } } ] -} \ No newline at end of file +}