fix: import GPX desc as description

This commit is contained in:
Yohan Boniface 2024-08-14 10:31:52 +02:00
parent 5a33709cc9
commit 0847dc1ba6
5 changed files with 64 additions and 26 deletions

View file

@ -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) {

View file

@ -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())

View file

@ -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/")

View file

@ -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/")

View file

@ -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):