Skip to content

Commit

Permalink
Merge pull request #3848 from finnishtransportagency/HARJA-1344
Browse files Browse the repository at this point in the history
HARJA-1344 Lisää testi virheelliseen multilinestring yhdistämiseen
  • Loading branch information
solita-staskila authored Feb 25, 2025
2 parents c051230 + 443a4e3 commit 4017170
Show file tree
Hide file tree
Showing 2 changed files with 145 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand Down
89 changes: 89 additions & 0 deletions test/resurssit/api/reittitoteuma_epaonnistuva.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
{
"otsikko": {
"lahettaja": {
"jarjestelma": "Tietomekka Oy",
"organisaatio": {
"ytunnus": "__YTUNNUS__",
"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": "__YTUNNUS__",
"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"
}
}
}
]
}

0 comments on commit 4017170

Please sign in to comment.