From 0847dc1ba6150005c310486c068e14aee50ac4c3 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Wed, 14 Aug 2024 10:31:52 +0200 Subject: [PATCH] fix: import GPX desc as description --- umap/static/umap/js/modules/formatter.js | 11 +++++- umap/tests/integration/helpers.py | 12 ++++++ umap/tests/integration/test_draw_polygon.py | 13 +------ umap/tests/integration/test_draw_polyline.py | 13 +------ umap/tests/integration/test_import.py | 41 +++++++++++++++++++- 5 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 umap/tests/integration/helpers.py diff --git a/umap/static/umap/js/modules/formatter.js b/umap/static/umap/js/modules/formatter.js index 20a0533c..99677e0f 100644 --- a/umap/static/umap/js/modules/formatter.js +++ b/umap/static/umap/js/modules/formatter.js @@ -38,7 +38,16 @@ export const EXPORT_FORMATS = { export class Formatter { async fromGPX(str) { const togeojson = await import('../../vendors/togeojson/togeojson.es.js') - return togeojson.gpx(this.toDom(str)) + const data = togeojson.gpx(this.toDom(str)) + for (const feature of data.features || []) { + feature.properties.description = feature.properties.desc + for (const key in feature.properties) { + if (key.startsWith('_') || typeof feature.properties[key] === 'object') { + delete feature.properties[key] + } + } + } + return data } async fromKML(str) { diff --git a/umap/tests/integration/helpers.py b/umap/tests/integration/helpers.py new file mode 100644 index 00000000..3ef7d3b8 --- /dev/null +++ b/umap/tests/integration/helpers.py @@ -0,0 +1,12 @@ +import json +import re +from pathlib import Path + +from umap.models import DataLayer + + +def save_and_get_json(page): + with page.expect_response(re.compile(r".*/datalayer/create/.*")): + page.get_by_role("button", name="Save").click() + datalayer = DataLayer.objects.last() + return json.loads(Path(datalayer.geojson.path).read_text()) diff --git a/umap/tests/integration/test_draw_polygon.py b/umap/tests/integration/test_draw_polygon.py index 89a4665b..86406d12 100644 --- a/umap/tests/integration/test_draw_polygon.py +++ b/umap/tests/integration/test_draw_polygon.py @@ -1,22 +1,11 @@ -import json -import re -from pathlib import Path - import pytest from playwright.sync_api import expect -from umap.models import DataLayer +from .helpers import save_and_get_json pytestmark = pytest.mark.django_db -def save_and_get_json(page): - with page.expect_response(re.compile(r".*/datalayer/create/.*")): - page.get_by_role("button", name="Save").click() - datalayer = DataLayer.objects.last() - return json.loads(Path(datalayer.geojson.path).read_text()) - - def test_draw_polygon(page, live_server, tilelayer): page.goto(f"{live_server.url}/en/map/new/") diff --git a/umap/tests/integration/test_draw_polyline.py b/umap/tests/integration/test_draw_polyline.py index 6759cf93..6043fa94 100644 --- a/umap/tests/integration/test_draw_polyline.py +++ b/umap/tests/integration/test_draw_polyline.py @@ -1,22 +1,11 @@ -import json -import re -from pathlib import Path - import pytest from playwright.sync_api import expect -from umap.models import DataLayer +from .helpers import save_and_get_json pytestmark = pytest.mark.django_db -def save_and_get_json(page): - with page.expect_response(re.compile(r".*/datalayer/create/.*")): - page.get_by_role("button", name="Save").click() - datalayer = DataLayer.objects.last() - return json.loads(Path(datalayer.geojson.path).read_text()) - - def test_draw_polyline(page, live_server, tilelayer): page.goto(f"{live_server.url}/en/map/new/") diff --git a/umap/tests/integration/test_import.py b/umap/tests/integration/test_import.py index ce7d8807..2513b45e 100644 --- a/umap/tests/integration/test_import.py +++ b/umap/tests/integration/test_import.py @@ -9,6 +9,8 @@ from playwright.sync_api import expect from umap.models import DataLayer +from .helpers import save_and_get_json + pytestmark = pytest.mark.django_db @@ -142,7 +144,8 @@ def test_import_kml_from_textarea(tilelayer, live_server, page): expect(paths).to_have_count(2) -def test_import_gpx_from_textarea(tilelayer, live_server, page): +def test_import_gpx_from_textarea(tilelayer, live_server, page, settings): + settings.UMAP_ALLOW_ANONYMOUS = True page.goto(f"{live_server.url}/map/new/") page.get_by_title("Open browser").click() layers = page.locator(".umap-browser .datalayer") @@ -163,6 +166,42 @@ def test_import_gpx_from_textarea(tilelayer, live_server, page): expect(layers).to_have_count(1) expect(markers).to_have_count(1) expect(paths).to_have_count(1) + data = save_and_get_json(page) + assert data["features"][0]["geometry"] == { + "coordinates": [ + [ + -121.7295456, + 45.4431641, + ], + [ + -121.72908, + 45.4428615, + ], + [ + -121.7279085, + 45.4425697, + ], + ], + "type": "LineString", + } + assert data["features"][0]["properties"] == { + "description": "Simple description", + "desc": "Simple description", + "name": "Simple path", + } + assert data["features"][1]["geometry"] == { + "coordinates": [ + -121.72904, + 45.44283, + 1374, + ], + "type": "Point", + } + assert data["features"][1]["properties"] == { + "description": "Simple description", + "desc": "Simple description", + "name": "Simple Point", + } def test_import_osm_from_textarea(tilelayer, live_server, page):