Skip to content

Commit

Permalink
[Fixes #12255] Harvester is not deleted when its Service is deleted (#…
Browse files Browse the repository at this point in the history
…12258) (#12259)

(cherry picked from commit 33ea4b9)

Co-authored-by: mattiagiupponi <51856725+mattiagiupponi@users.noreply.github.com>
  • Loading branch information
github-actions[bot] and mattiagiupponi authored May 23, 2024
1 parent 004c205 commit 0436765
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
28 changes: 28 additions & 0 deletions geonode/services/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#########################################################################

from unittest.mock import MagicMock
from uuid import uuid4
import mock
import logging

Expand All @@ -38,6 +39,7 @@

from owslib.map.wms111 import ContentMetadata

from geonode.harvesting.models import Harvester
from geonode.layers.models import Dataset
from geonode.tests.base import GeoNodeBaseTestSupport
from geonode.resource.manager import resource_manager
Expand Down Expand Up @@ -774,6 +776,32 @@ def test_local_user_cant_delete_service(self):
response = self.client.post(reverse("remove_service", args=(s.id,)))
self.assertEqual(len(Service.objects.all()), 0)

def test_removing_the_service_delete_also_the_harvester(self):
"""
If the user delete the service, the corrisponding harvester object should be deleted too
"""
owner = get_user_model().objects.get(username="admin")
# creating the service
dummy_service = Service.objects.create(
uuid=str(uuid4()), owner=owner, title="test service removing", is_approved=True
)
# creating the harvester
harvester = Harvester.objects.create(
remote_url="http://fake1.com",
name="harvester1",
default_owner=owner,
harvester_type="geonode.harvesting.harvesters.geonodeharvester.GeonodeUnifiedHarvesterWorker",
)
dummy_service.harvester = harvester
dummy_service.save()

self.client.login(username="admin", password="admin")

response = self.client.post(reverse("remove_service", args=(dummy_service.id,)))
self.assertEqual(302, response.status_code)
self.assertFalse(Service.objects.filter(id=dummy_service.id).exists())
self.assertFalse(Harvester.objects.filter(id=harvester.id).exists())

@flaky(max_runs=3)
def test_add_duplicate_remote_service_url(self):
form_data = {
Expand Down
3 changes: 2 additions & 1 deletion geonode/services/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,7 @@ def remove_service(request, service_id):
return render(request, "services/service_remove.html", {"service": service})
elif request.method == "POST":
service.dataset_set.all().delete()
service.delete()
# by deleting the harvester we delete also the service
service.harvester.delete()
messages.add_message(request, messages.INFO, _(f"Service {service.title} has been deleted"))
return HttpResponseRedirect(reverse("services"))

0 comments on commit 0436765

Please sign in to comment.