fix: update map.modified_at when saving a datalayer (#2423)

fix #2421
This commit is contained in:
Yohan Boniface 2025-01-10 15:51:39 +01:00 committed by GitHub
commit 7072b5434a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 17 additions and 1 deletions

View file

@ -1,4 +1,3 @@
import tempfile
from pathlib import Path from pathlib import Path
import pytest import pytest

View file

@ -1,6 +1,8 @@
import json import json
from copy import deepcopy from copy import deepcopy
from datetime import datetime, timedelta
from pathlib import Path from pathlib import Path
from unittest import mock
from uuid import uuid4 from uuid import uuid4
import pytest import pytest
@ -621,3 +623,17 @@ def test_optimistic_merge_conflicting_change_raises(
modified_datalayer = DataLayer.objects.get(pk=datalayer.pk) modified_datalayer = DataLayer.objects.get(pk=datalayer.pk)
merged_features = json.load(modified_datalayer.geojson)["features"] merged_features = json.load(modified_datalayer.geojson)["features"]
assert merged_features == client1_data["features"] assert merged_features == client1_data["features"]
def test_saving_datalayer_should_change_map_last_modified(
client, datalayer, map, post_data
):
with mock.patch("django.utils.timezone.now") as mocked:
mocked.return_value = datetime.utcnow() - timedelta(days=8)
map.save() # Change last_modified to past
old_modified_at = map.modified_at.date()
url = reverse("datalayer_update", args=(map.pk, datalayer.pk))
client.login(username=map.owner.username, password="123123")
response = client.post(url, post_data, follow=True)
assert response.status_code == 200
assert Map.objects.get(pk=map.pk).modified_at.date() != old_modified_at

View file

@ -1293,6 +1293,7 @@ class DataLayerUpdate(FormLessEditMixin, UpdateView):
def form_valid(self, form): def form_valid(self, form):
self.object = form.save() self.object = form.save()
self.object.map.save(update_fields=["modified_at"])
data = {**self.object.metadata(self.request)} data = {**self.object.metadata(self.request)}
if self.request.session.get("needs_reload"): if self.request.session.get("needs_reload"):
data["geojson"] = json.loads(self.object.geojson.read().decode()) data["geojson"] = json.loads(self.object.geojson.read().decode())