Merge pull request #1613 from umap-project/fix-star-control

fix: star control was using old post method
This commit is contained in:
Yohan Boniface 2024-02-16 14:46:33 +01:00 committed by GitHub
commit 8eb2a518f1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 39 additions and 13 deletions

View file

@ -401,7 +401,7 @@ U.Map = L.Map.extend({
this._controls.search = new U.SearchControl() this._controls.search = new U.SearchControl()
this._controls.embed = new L.Control.Embed(this, this.options.embedOptions) this._controls.embed = new L.Control.Embed(this, this.options.embedOptions)
this._controls.tilelayersChooser = new U.TileLayerChooser(this) this._controls.tilelayersChooser = new U.TileLayerChooser(this)
this._controls.star = new U.StarControl(this) if (this.options.user) this._controls.star = new U.StarControl(this)
this._controls.editinosm = new L.Control.EditInOSM({ this._controls.editinosm = new L.Control.EditInOSM({
position: 'topleft', position: 'topleft',
widgetOptions: { widgetOptions: {
@ -468,6 +468,7 @@ U.Map = L.Map.extend({
status = this.options[`${name}Control`] status = this.options[`${name}Control`]
if (status === false) continue if (status === false) continue
control = this._controls[name] control = this._controls[name]
if (!control) continue
control.addTo(this) control.addTo(this)
if (status === undefined || status === null) if (status === undefined || status === null)
L.DomUtil.addClass(control._container, 'display-on-more') L.DomUtil.addClass(control._container, 'display-on-more')
@ -1142,24 +1143,22 @@ U.Map = L.Map.extend({
}) })
}, },
star: function () { star: async function () {
if (!this.options.umap_id) if (!this.options.umap_id)
return this.ui.alert({ return this.ui.alert({
content: L._('Please save the map first'), content: L._('Please save the map first'),
level: 'error', level: 'error',
}) })
const url = this.urls.get('map_star', { map_id: this.options.umap_id }) const url = this.urls.get('map_star', { map_id: this.options.umap_id })
this.post(url, { const [data, response, error] = await this.server.post(url)
context: this, if (!error) {
callback: function (data) { this.options.starred = data.starred
this.options.starred = data.starred let msg = data.starred
let msg = data.starred ? L._('Map has been starred')
? L._('Map has been starred') : L._('Map has been unstarred')
: L._('Map has been unstarred') this.ui.alert({ content: msg, level: 'info' })
this.ui.alert({ content: msg, level: 'info' }) this.renderControls()
this.renderControls() }
},
})
}, },
geometry: function () { geometry: function () {

View file

@ -0,0 +1,27 @@
import re
import pytest
from playwright.sync_api import expect
from umap.models import Star
pytestmark = pytest.mark.django_db
def test_star_control_is_visible_if_logged_in(map, live_server, page, login, user):
login(user)
assert not Star.objects.count()
page.goto(f"{live_server.url}{map.get_absolute_url()}")
page.get_by_title("More controls").click()
control = page.locator(".leaflet-control-star")
expect(control).to_be_visible()
with page.expect_response(re.compile(".*/star/")):
control.click()
assert Star.objects.count() == 1
def test_no_star_control_if_not_logged_in(map, live_server, page):
page.goto(f"{live_server.url}{map.get_absolute_url()}")
page.get_by_title("More controls").click()
control = page.locator(".leaflet-control-star")
expect(control).to_be_hidden()