1818from ....tests .utils import TestAdminMixin
1919from ...tests .utils import TestGeoMixin
2020from ..handlers import register_estimated_location_notification_types
21+ from ..tasks import manage_estimated_locations
2122from .utils import TestEstimatedLocationMixin
2223
2324Device = load_model ("config" , "Device" )
@@ -282,9 +283,20 @@ def test_estimated_location_task_called(
282283 mocked_estimated_location_task .reset_mock ()
283284
284285 @mock .patch .object (config_app_settings , "WHOIS_CONFIGURED" , True )
286+ @mock .patch (
287+ "openwisp_controller.config.whois.service.send_whois_task_notification" # noqa
288+ )
289+ @mock .patch (
290+ "openwisp_controller.geo.estimated_location.tasks.send_whois_task_notification" # noqa
291+ )
292+ @mock .patch (
293+ "openwisp_controller.geo.estimated_location.tasks.manage_estimated_locations.delay" # noqa
294+ )
285295 @mock .patch (_ESTIMATED_LOCATION_INFO_LOGGER )
286296 @mock .patch (_WHOIS_GEOIP_CLIENT )
287- def test_estimated_location_creation_and_update (self , mock_client , mock_info ):
297+ def test_estimated_location_creation_and_update (
298+ self , mock_client , mock_info , _mocked_task , _mocked_notify , _mocked_notify2
299+ ):
288300 connect_whois_handlers ()
289301
290302 def _verify_location_details (device , mocked_response ):
@@ -318,6 +330,8 @@ def _verify_location_details(device, mocked_response):
318330
319331 with self .subTest ("Test Estimated location created when device is created" ):
320332 device = self ._create_device (last_ip = "172.217.22.14" )
333+ with self .assertNumQueries (14 ):
334+ manage_estimated_locations (device .pk , device .last_ip )
321335
322336 location = device .devicelocation .location
323337 mocked_response .ip_address = device .last_ip
@@ -338,6 +352,8 @@ def _verify_location_details(device, mocked_response):
338352 mocked_response .city .name = "New City"
339353 mock_client .return_value .city .return_value = mocked_response
340354 device .save ()
355+ with self .assertNumQueries (8 ):
356+ manage_estimated_locations (device .pk , device .last_ip )
341357 device .refresh_from_db ()
342358
343359 location = device .devicelocation .location
@@ -361,6 +377,8 @@ def _verify_location_details(device, mocked_response):
361377 mock_client .return_value .city .return_value = self ._mocked_client_response ()
362378 device .devicelocation .location .save (_set_estimated = True )
363379 device .save ()
380+ with self .assertNumQueries (2 ):
381+ manage_estimated_locations (device .pk , device .last_ip )
364382 device .refresh_from_db ()
365383
366384 location = device .devicelocation .location
@@ -379,12 +397,15 @@ def _verify_location_details(device, mocked_response):
379397 ):
380398 Device .objects .all ().delete ()
381399 device1 = self ._create_device (last_ip = "172.217.22.10" )
400+ manage_estimated_locations (device1 .pk , device1 .last_ip )
382401 mock_info .reset_mock ()
383402 device2 = self ._create_device (
384403 name = "11:22:33:44:55:66" ,
385404 mac_address = "11:22:33:44:55:66" ,
386405 last_ip = "172.217.22.10" ,
387406 )
407+ with self .assertNumQueries (8 ):
408+ manage_estimated_locations (device2 .pk , device2 .last_ip )
388409
389410 self .assertEqual (
390411 device1 .devicelocation .location .pk , device2 .devicelocation .location .pk
@@ -400,15 +421,20 @@ def _verify_location_details(device, mocked_response):
400421 ):
401422 Device .objects .all ().delete ()
402423 device1 = self ._create_device (last_ip = "172.217.22.10" )
424+ manage_estimated_locations (device1 .pk , device1 .last_ip )
403425 device2 = self ._create_device (
404426 name = "11:22:33:44:55:66" ,
405427 mac_address = "11:22:33:44:55:66" ,
406428 last_ip = "172.217.22.11" ,
407429 )
430+ manage_estimated_locations (device2 .pk , device2 .last_ip )
408431 mock_info .reset_mock ()
409432 old_location = device2 .devicelocation .location
410433 device2 .last_ip = "172.217.22.10"
411434 device2 .save ()
435+ # 3 queries related to notifications cleanup
436+ with self .assertNumQueries (16 ):
437+ manage_estimated_locations (device2 .pk , device2 .last_ip )
412438 mock_info .assert_called_once_with (
413439 f"Estimated location saved successfully for { device2 .pk } "
414440 f" for IP: { device2 .last_ip } "
@@ -427,17 +453,21 @@ def _verify_location_details(device, mocked_response):
427453 ):
428454 Device .objects .all ().delete ()
429455 device1 = self ._create_device (last_ip = "172.217.22.10" )
456+ manage_estimated_locations (device1 .pk , device1 .last_ip )
430457 device2 = self ._create_device (
431458 name = "11:22:33:44:55:66" ,
432459 mac_address = "11:22:33:44:55:66" ,
433460 last_ip = "172.217.22.11" ,
434461 )
462+ manage_estimated_locations (device2 .pk , device2 .last_ip )
435463 mock_info .reset_mock ()
436464 old_location = device2 .devicelocation .location
437465 old_location .is_estimated = False
438466 old_location .save ()
439467 device2 .last_ip = "172.217.22.10"
440468 device2 .save ()
469+ with self .assertNumQueries (2 ):
470+ manage_estimated_locations (device2 .pk , device2 .last_ip )
441471 mock_info .assert_called_once_with (
442472 f"Non Estimated location already set for { device2 .pk } . Update"
443473 f" location manually as per IP: { device2 .last_ip } "
@@ -456,17 +486,21 @@ def _verify_location_details(device, mocked_response):
456486 ):
457487 Device .objects .all ().delete ()
458488 device1 = self ._create_device (last_ip = "172.217.22.10" )
489+ manage_estimated_locations (device1 .pk , device1 .last_ip )
459490 device2 = self ._create_device (
460491 name = "11:22:33:44:55:66" ,
461492 mac_address = "11:22:33:44:55:66" ,
462493 last_ip = "172.217.22.10" ,
463494 )
495+ manage_estimated_locations (device2 .pk , device2 .last_ip )
464496 mock_info .reset_mock ()
465497 self .assertEqual (
466498 device1 .devicelocation .location .pk , device2 .devicelocation .location .pk
467499 )
468500 device2 .last_ip = "172.217.22.11"
469501 device2 .save ()
502+ with self .assertNumQueries (14 ):
503+ manage_estimated_locations (device2 .pk , device2 .last_ip )
470504 mock_info .assert_called_once_with (
471505 f"Estimated location saved successfully for { device2 .pk } "
472506 f" for IP: { device2 .last_ip } "
0 commit comments