mirror of
https://github.com/umap-project/umap.git
synced 2025-04-28 11:32:38 +02:00
217 lines
8.2 KiB
Python
217 lines
8.2 KiB
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
from django.core.files.base import ContentFile
|
|
from playwright.sync_api import expect
|
|
|
|
from umap.models import Map, Pictogram
|
|
|
|
from ..base import DataLayerFactory
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
|
|
DATALAYER_DATA = {
|
|
"type": "FeatureCollection",
|
|
"features": [
|
|
{
|
|
"type": "Feature",
|
|
"geometry": {
|
|
"type": "Point",
|
|
"coordinates": [13.68896484375, 48.55297816440071],
|
|
},
|
|
"properties": {"_umap_options": {"color": "DarkCyan"}, "name": "Here"},
|
|
}
|
|
],
|
|
"_umap_options": {"displayOnLoad": True, "name": "FooBarFoo"},
|
|
}
|
|
FIXTURES = Path(__file__).parent.parent / "fixtures"
|
|
|
|
|
|
@pytest.fixture
|
|
def pictos():
|
|
path = FIXTURES / "star.svg"
|
|
Pictogram(name="star", pictogram=ContentFile(path.read_text(), path.name)).save()
|
|
path = FIXTURES / "circle.svg"
|
|
Pictogram(name="circle", pictogram=ContentFile(path.read_text(), path.name)).save()
|
|
|
|
|
|
def test_can_change_picto_at_map_level(map, live_server, page, pictos):
|
|
# Faster than doing a login
|
|
map.edit_status = Map.ANONYMOUS
|
|
map.save()
|
|
DataLayerFactory(map=map, data=DATALAYER_DATA)
|
|
page.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
|
|
marker = page.locator(".umap-div-icon img")
|
|
expect(marker).to_have_count(1)
|
|
# Should have default img
|
|
expect(marker).to_have_attribute("src", "/static/umap/img/marker.png")
|
|
edit_settings = page.get_by_title("Edit map settings")
|
|
expect(edit_settings).to_be_visible()
|
|
edit_settings.click()
|
|
shape_settings = page.get_by_text("Default shape properties")
|
|
expect(shape_settings).to_be_visible()
|
|
shape_settings.click()
|
|
define = page.locator(".umap-field-iconUrl .define")
|
|
undefine = page.locator(".umap-field-iconUrl .undefine")
|
|
expect(define).to_be_visible()
|
|
expect(undefine).to_be_hidden()
|
|
define.click()
|
|
symbols = page.locator(".umap-pictogram-choice")
|
|
expect(symbols).to_have_count(2)
|
|
search = page.locator(".umap-pictogram-body input")
|
|
search.type("star")
|
|
expect(symbols).to_have_count(1)
|
|
symbols.click()
|
|
expect(marker).to_have_attribute("src", "/uploads/pictogram/star.svg")
|
|
undefine.click()
|
|
expect(marker).to_have_attribute("src", "/static/umap/img/marker.png")
|
|
|
|
|
|
def test_can_change_picto_at_datalayer_level(map, live_server, page, pictos):
|
|
# Faster than doing a login
|
|
map.edit_status = Map.ANONYMOUS
|
|
map.settings["properties"]["iconUrl"] = "/uploads/pictogram/star.svg"
|
|
map.save()
|
|
DataLayerFactory(map=map, data=DATALAYER_DATA)
|
|
page.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
|
|
marker = page.locator(".umap-div-icon img")
|
|
expect(marker).to_have_count(1)
|
|
# Should have default img
|
|
expect(marker).to_have_attribute("src", "/uploads/pictogram/star.svg")
|
|
# Edit datalayer
|
|
marker.click(modifiers=["Control", "Shift"])
|
|
settings = page.get_by_text("Layer properties")
|
|
expect(settings).to_be_visible()
|
|
shape_settings = page.get_by_text("Shape properties")
|
|
expect(shape_settings).to_be_visible()
|
|
shape_settings.click()
|
|
define = page.locator(".umap-field-iconUrl .define")
|
|
undefine = page.locator(".umap-field-iconUrl .undefine")
|
|
expect(define).to_be_visible()
|
|
expect(undefine).to_be_hidden()
|
|
define.click()
|
|
symbols = page.locator(".umap-pictogram-choice")
|
|
expect(symbols).to_have_count(2)
|
|
search = page.locator(".umap-pictogram-body input")
|
|
search.type("circle")
|
|
expect(symbols).to_have_count(1)
|
|
symbols.click()
|
|
expect(marker).to_have_attribute("src", "/uploads/pictogram/circle.svg")
|
|
undefine.click()
|
|
expect(marker).to_have_attribute("src", "/uploads/pictogram/star.svg")
|
|
|
|
|
|
def test_can_change_picto_at_marker_level(map, live_server, page, pictos):
|
|
# Faster than doing a login
|
|
map.edit_status = Map.ANONYMOUS
|
|
map.settings["properties"]["iconUrl"] = "/uploads/pictogram/star.svg"
|
|
map.save()
|
|
DataLayerFactory(map=map, data=DATALAYER_DATA)
|
|
page.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
|
|
marker = page.locator(".umap-div-icon img")
|
|
expect(marker).to_have_count(1)
|
|
# Should have default img
|
|
expect(marker).to_have_attribute("src", "/uploads/pictogram/star.svg")
|
|
# Edit marker
|
|
marker.click(modifiers=["Shift"])
|
|
settings = page.get_by_text("Feature properties")
|
|
expect(settings).to_be_visible()
|
|
shape_settings = page.get_by_text("Shape properties")
|
|
expect(shape_settings).to_be_visible()
|
|
shape_settings.click()
|
|
define = page.locator(".umap-field-iconUrl .define")
|
|
undefine = page.locator(".umap-field-iconUrl .undefine")
|
|
expect(define).to_be_visible()
|
|
expect(undefine).to_be_hidden()
|
|
define.click()
|
|
symbols = page.locator(".umap-pictogram-choice")
|
|
expect(symbols).to_have_count(2)
|
|
search = page.locator(".umap-pictogram-body input")
|
|
search.type("circle")
|
|
expect(symbols).to_have_count(1)
|
|
symbols.click()
|
|
expect(marker).to_have_attribute("src", "/uploads/pictogram/circle.svg")
|
|
undefine.click()
|
|
expect(marker).to_have_attribute("src", "/uploads/pictogram/star.svg")
|
|
|
|
|
|
def test_can_use_remote_url_as_picto(map, live_server, page, pictos):
|
|
# Faster than doing a login
|
|
map.edit_status = Map.ANONYMOUS
|
|
map.save()
|
|
DataLayerFactory(map=map, data=DATALAYER_DATA)
|
|
page.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
|
|
marker = page.locator(".umap-div-icon img")
|
|
expect(marker).to_have_count(1)
|
|
# Should have default img
|
|
expect(marker).to_have_attribute("src", "/static/umap/img/marker.png")
|
|
edit_settings = page.get_by_title("Edit map settings")
|
|
expect(edit_settings).to_be_visible()
|
|
edit_settings.click()
|
|
shape_settings = page.get_by_text("Default shape properties")
|
|
expect(shape_settings).to_be_visible()
|
|
shape_settings.click()
|
|
define = page.locator(".umap-field-iconUrl .define")
|
|
expect(define).to_be_visible()
|
|
define.click()
|
|
url_tab = page.get_by_role("button", name="URL")
|
|
input_el = page.get_by_placeholder("Add image URL")
|
|
expect(input_el).to_be_hidden()
|
|
expect(url_tab).to_be_visible()
|
|
url_tab.click()
|
|
expect(input_el).to_be_visible()
|
|
input_el.fill("https://foo.bar/img.jpg")
|
|
input_el.blur()
|
|
expect(marker).to_have_attribute("src", "https://foo.bar/img.jpg")
|
|
# Now close and reopen the form, it should still be the URL tab
|
|
close = page.locator("#umap-ui-container").get_by_title("Close")
|
|
expect(close).to_be_visible()
|
|
close.click()
|
|
edit_settings.click()
|
|
shape_settings.click()
|
|
modify = page.locator(".umap-field-iconUrl").get_by_text("Change")
|
|
expect(modify).to_be_visible()
|
|
modify.click()
|
|
# Should be on URL tab
|
|
expect(input_el).to_be_visible()
|
|
|
|
|
|
def test_can_use_char_as_picto(map, live_server, page, pictos):
|
|
# Faster than doing a login
|
|
map.edit_status = Map.ANONYMOUS
|
|
map.save()
|
|
DataLayerFactory(map=map, data=DATALAYER_DATA)
|
|
page.goto(f"{live_server.url}{map.get_absolute_url()}?edit")
|
|
marker = page.locator(".umap-div-icon span")
|
|
# Should have default img, so not a span
|
|
expect(marker).to_have_count(0)
|
|
edit_settings = page.get_by_title("Edit map settings")
|
|
expect(edit_settings).to_be_visible()
|
|
edit_settings.click()
|
|
shape_settings = page.get_by_text("Default shape properties")
|
|
expect(shape_settings).to_be_visible()
|
|
shape_settings.click()
|
|
define = page.locator(".umap-field-iconUrl .define")
|
|
define.click()
|
|
url_tab = page.get_by_role("button", name="Emoji & Character")
|
|
input_el = page.get_by_placeholder("Type char or paste emoji")
|
|
expect(input_el).to_be_hidden()
|
|
expect(url_tab).to_be_visible()
|
|
url_tab.click()
|
|
expect(input_el).to_be_visible()
|
|
input_el.fill("♩")
|
|
input_el.blur()
|
|
expect(marker).to_have_count(1)
|
|
expect(marker).to_have_text("♩")
|
|
# Now close and reopen the form, it should still be the URL tab
|
|
close = page.locator("#umap-ui-container").get_by_title("Close")
|
|
expect(close).to_be_visible()
|
|
close.click()
|
|
edit_settings.click()
|
|
shape_settings.click()
|
|
preview = page.locator(".umap-pictogram-choice")
|
|
expect(preview).to_be_visible()
|
|
preview.click()
|
|
# Should be on URL tab
|
|
expect(input_el).to_be_visible()
|