diff --git a/.circleci/config.yml b/.circleci/config.yml index b148687940..34524f3c4b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -127,7 +127,6 @@ jobs: - <<: *image_python - <<: *image_postgres - <<: *image_elasticsearch - - <<: *image_redis working_directory: ~/lite-api environment: <<: *common_env_vars @@ -234,7 +233,6 @@ jobs: - <<: *image_python - <<: *image_postgres - <<: *image_elasticsearch - - <<: *image_redis working_directory: ~/lite-api environment: <<: *common_env_vars @@ -253,7 +251,6 @@ jobs: - <<: *image_python - <<: *image_postgres - <<: *image_elasticsearch - - <<: *image_redis working_directory: ~/lite-api environment: <<: *common_env_vars diff --git a/Pipfile b/Pipfile index 2979c97bd4..46462176c6 100644 --- a/Pipfile +++ b/Pipfile @@ -29,7 +29,7 @@ faker = "~=23.2.1" boto3 = "~=1.26.17" django-activity-stream = "~=0.10.0" django-allow-cidr = "~=0.5.0" -django-elasticsearch-dsl = "~=7.4" +django-elasticsearch-dsl = "~=7.2.2" django-elasticsearch-dsl-drf = "~=0.22.5" django-environ = "~=0.9.0" django-health-check = "~=3.18.1" diff --git a/Pipfile.lock b/Pipfile.lock index c5a64ab31b..4e4d771b48 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "e09b637b8322ae89f8ea17f50fc29d78af26f24f6060289c9362411007a3b575" + "sha256": "88af2a9ada474205b1f2a0850c36fb5e29751000c8bf39b676efb99a017302c8" }, "pipfile-spec": 6, "requires": { @@ -440,11 +440,11 @@ }, "django-elasticsearch-dsl": { "hashes": [ - "sha256:5296f1c69bc86846fc7962d2997fb90a59480dc90766ab6db4da583bd0d62e19", - "sha256:81c5cd72dcc7424ff4e372db56672863c70c5373624cd6ec2a4e40c83265c6d6" + "sha256:3c58a254a6318b169eb904d41d802924b99ea8e53ddc2c596ebba90506cf47fa", + "sha256:811d3909b3387fd55c19d9bbcf0e9a9b234f085df3f8422d59e7519a5f733e0e" ], "index": "pypi", - "version": "==7.4" + "version": "==7.2.2" }, "django-elasticsearch-dsl-drf": { "hashes": [ @@ -854,11 +854,11 @@ }, "kombu": { "hashes": [ - "sha256:011c4cd9a355c14a1de8d35d257314a1d2456d52b7140388561acac3cf1a97bf", - "sha256:5634c511926309c7f9789f1433e9ed402616b56836ef9878f01bd59267b4c7a9" + "sha256:49f1e62b12369045de2662f62cc584e7df83481a513db83b01f87b5b9785e378", + "sha256:f3da5b570a147a5da8280180aa80b03807283d63ea5081fcdb510d18242431d9" ], "markers": "python_version >= '3.8'", - "version": "==5.3.7" + "version": "==5.3.6" }, "kubi-ecs-logger": { "hashes": [ @@ -887,11 +887,11 @@ }, "matplotlib-inline": { "hashes": [ - "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", - "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca" + "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", + "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" ], - "markers": "python_version >= '3.8'", - "version": "==0.1.7" + "markers": "python_version >= '3.5'", + "version": "==0.1.6" }, "mohawk": { "hashes": [ @@ -1243,11 +1243,11 @@ }, "setuptools": { "hashes": [ - "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987", - "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32" + "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e", + "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c" ], "markers": "python_version >= '3.8'", - "version": "==69.5.1" + "version": "==69.2.0" }, "six": { "hashes": [ @@ -1304,7 +1304,7 @@ "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0", "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a" ], - "markers": "python_version < '3.9'", + "markers": "python_version >= '3.8'", "version": "==4.11.0" }, "tzdata": { @@ -1328,7 +1328,7 @@ "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07", "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0" ], - "markers": "python_version >= '3.6'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==1.26.18" }, "vine": { @@ -1406,45 +1406,45 @@ }, "zope.interface": { "hashes": [ - "sha256:014bb94fe6bf1786da1aa044eadf65bc6437bcb81c451592987e5be91e70a91e", - "sha256:01a0b3dd012f584afcf03ed814bce0fc40ed10e47396578621509ac031be98bf", - "sha256:10cde8dc6b2fd6a1d0b5ca4be820063e46ddba417ab82bcf55afe2227337b130", - "sha256:187f7900b63845dcdef1be320a523dbbdba94d89cae570edc2781eb55f8c2f86", - "sha256:1b0c4c90e5eefca2c3e045d9f9ed9f1e2cdbe70eb906bff6b247e17119ad89a1", - "sha256:22e8a218e8e2d87d4d9342aa973b7915297a08efbebea5b25900c73e78ed468e", - "sha256:26c9a37fb395a703e39b11b00b9e921c48f82b6e32cc5851ad5d0618cd8876b5", - "sha256:2bb78c12c1ad3a20c0d981a043d133299117b6854f2e14893b156979ed4e1d2c", - "sha256:2c3cfb272bcb83650e6695d49ae0d14dd06dc694789a3d929f23758557a23d92", - "sha256:2f32010ffb87759c6a3ad1c65ed4d2e38e51f6b430a1ca11cee901ec2b42e021", - "sha256:3c8731596198198746f7ce2a4487a0edcbc9ea5e5918f0ab23c4859bce56055c", - "sha256:40aa8c8e964d47d713b226c5baf5f13cdf3a3169c7a2653163b17ff2e2334d10", - "sha256:4137025731e824eee8d263b20682b28a0bdc0508de9c11d6c6be54163e5b7c83", - "sha256:46034be614d1f75f06e7dcfefba21d609b16b38c21fc912b01a99cb29e58febb", - "sha256:483e118b1e075f1819b3c6ace082b9d7d3a6a5eb14b2b375f1b80a0868117920", - "sha256:4d6b229f5e1a6375f206455cc0a63a8e502ed190fe7eb15e94a312dc69d40299", - "sha256:567d54c06306f9c5b6826190628d66753b9f2b0422f4c02d7c6d2b97ebf0a24e", - "sha256:5683aa8f2639016fd2b421df44301f10820e28a9b96382a6e438e5c6427253af", - "sha256:600101f43a7582d5b9504a7c629a1185a849ce65e60fca0f6968dfc4b76b6d39", - "sha256:62e32f02b3f26204d9c02c3539c802afc3eefb19d601a0987836ed126efb1f21", - "sha256:69dedb790530c7ca5345899a1b4cb837cc53ba669051ea51e8c18f82f9389061", - "sha256:72d5efecad16c619a97744a4f0b67ce1bcc88115aa82fcf1dc5be9bb403bcc0b", - "sha256:8d407e0fd8015f6d5dfad481309638e1968d70e6644e0753f229154667dd6cd5", - "sha256:a058e6cf8d68a5a19cb5449f42a404f0d6c2778b897e6ce8fadda9cea308b1b0", - "sha256:a1adc14a2a9d5e95f76df625a9b39f4709267a483962a572e3f3001ef90ea6e6", - "sha256:a56fe1261230093bfeedc1c1a6cd6f3ec568f9b07f031c9a09f46b201f793a85", - "sha256:ad4524289d8dbd6fb5aa17aedb18f5643e7d48358f42c007a5ee51a2afc2a7c5", - "sha256:afa0491a9f154cf8519a02026dc85a416192f4cb1efbbf32db4a173ba28b289a", - "sha256:bf34840e102d1d0b2d39b1465918d90b312b1119552cebb61a242c42079817b9", - "sha256:c40df4aea777be321b7e68facb901bc67317e94b65d9ab20fb96e0eb3c0b60a1", - "sha256:d0e7321557c702bd92dac3c66a2f22b963155fdb4600133b6b29597f62b71b12", - "sha256:d165d7774d558ea971cb867739fb334faf68fc4756a784e689e11efa3becd59e", - "sha256:e78a183a3c2f555c2ad6aaa1ab572d1c435ba42f1dc3a7e8c82982306a19b785", - "sha256:e8fa0fb05083a1a4216b4b881fdefa71c5d9a106e9b094cd4399af6b52873e91", - "sha256:f83d6b4b22262d9a826c3bd4b2fbfafe1d0000f085ef8e44cd1328eea274ae6a", - "sha256:f95bebd0afe86b2adc074df29edb6848fc4d474ff24075e2c263d698774e108d" + "sha256:02adbab560683c4eca3789cc0ac487dcc5f5a81cc48695ec247f00803cafe2fe", + "sha256:14e02a6fc1772b458ebb6be1c276528b362041217b9ca37e52ecea2cbdce9fac", + "sha256:25e0af9663eeac6b61b231b43c52293c2cb7f0c232d914bdcbfd3e3bd5c182ad", + "sha256:2606955a06c6852a6cff4abeca38346ed01e83f11e960caa9a821b3626a4467b", + "sha256:396f5c94654301819a7f3a702c5830f0ea7468d7b154d124ceac823e2419d000", + "sha256:3b240883fb43160574f8f738e6d09ddbdbf8fa3e8cea051603d9edfd947d9328", + "sha256:3b6c62813c63c543a06394a636978b22dffa8c5410affc9331ce6cdb5bfa8565", + "sha256:4ae9793f114cee5c464cc0b821ae4d36e1eba961542c6086f391a61aee167b6f", + "sha256:4bce517b85f5debe07b186fc7102b332676760f2e0c92b7185dd49c138734b70", + "sha256:4d45d2ba8195850e3e829f1f0016066a122bfa362cc9dc212527fc3d51369037", + "sha256:4dd374927c00764fcd6fe1046bea243ebdf403fba97a937493ae4be2c8912c2b", + "sha256:506f5410b36e5ba494136d9fa04c548eaf1a0d9c442b0b0e7a0944db7620e0ab", + "sha256:59f7374769b326a217d0b2366f1c176a45a4ff21e8f7cebb3b4a3537077eff85", + "sha256:5ee9789a20b0081dc469f65ff6c5007e67a940d5541419ca03ef20c6213dd099", + "sha256:6fc711acc4a1c702ca931fdbf7bf7c86f2a27d564c85c4964772dadf0e3c52f5", + "sha256:75d2ec3d9b401df759b87bc9e19d1b24db73083147089b43ae748aefa63067ef", + "sha256:76e0531d86523be7a46e15d379b0e975a9db84316617c0efe4af8338dc45b80c", + "sha256:8af82afc5998e1f307d5e72712526dba07403c73a9e287d906a8aa2b1f2e33dd", + "sha256:8f5d2c39f3283e461de3655e03faf10e4742bb87387113f787a7724f32db1e48", + "sha256:97785604824981ec8c81850dd25c8071d5ce04717a34296eeac771231fbdd5cd", + "sha256:a3046e8ab29b590d723821d0785598e0b2e32b636a0272a38409be43e3ae0550", + "sha256:abb0b3f2cb606981c7432f690db23506b1db5899620ad274e29dbbbdd740e797", + "sha256:ac7c2046d907e3b4e2605a130d162b1b783c170292a11216479bb1deb7cadebe", + "sha256:af27b3fe5b6bf9cd01b8e1c5ddea0a0d0a1b8c37dc1c7452f1e90bf817539c6d", + "sha256:b386b8b9d2b6a5e1e4eadd4e62335571244cb9193b7328c2b6e38b64cfda4f0e", + "sha256:b66335bbdbb4c004c25ae01cc4a54fd199afbc1fd164233813c6d3c2293bb7e1", + "sha256:d54f66c511ea01b9ef1d1a57420a93fbb9d48a08ec239f7d9c581092033156d0", + "sha256:de125151a53ecdb39df3cb3deb9951ed834dd6a110a9e795d985b10bb6db4532", + "sha256:de7916380abaef4bb4891740879b1afcba2045aee51799dfd6d6ca9bdc71f35f", + "sha256:e2fefad268ff5c5b314794e27e359e48aeb9c8bb2cbb5748a071757a56f6bb8f", + "sha256:e7b2bed4eea047a949296e618552d3fed00632dc1b795ee430289bdd0e3717f3", + "sha256:e87698e2fea5ca2f0a99dff0a64ce8110ea857b640de536c76d92aaa2a91ff3a", + "sha256:ede888382882f07b9e4cd942255921ffd9f2901684198b88e247c7eabd27a000", + "sha256:f444de0565db46d26c9fa931ca14f497900a295bd5eba480fc3fad25af8c763e", + "sha256:fa994e8937e8ccc7e87395b7b35092818905cf27c651e3ff3e7f29729f5ce3ce", + "sha256:febceb04ee7dd2aef08c2ff3d6f8a07de3052fc90137c507b0ede3ea80c21440" ], "markers": "python_version >= '3.7'", - "version": "==6.3" + "version": "==6.2" } }, "develop": { @@ -2018,11 +2018,11 @@ }, "matplotlib-inline": { "hashes": [ - "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", - "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca" + "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", + "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" ], - "markers": "python_version >= '3.8'", - "version": "==0.1.7" + "markers": "python_version >= '3.5'", + "version": "==0.1.6" }, "mccabe": { "hashes": [ @@ -2416,11 +2416,11 @@ }, "setuptools": { "hashes": [ - "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987", - "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32" + "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e", + "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c" ], "markers": "python_version >= '3.8'", - "version": "==69.5.1" + "version": "==69.2.0" }, "six": { "hashes": [ @@ -2482,7 +2482,7 @@ "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0", "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a" ], - "markers": "python_version < '3.9'", + "markers": "python_version >= '3.8'", "version": "==4.11.0" }, "urllib3": { @@ -2490,7 +2490,7 @@ "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07", "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0" ], - "markers": "python_version >= '3.6'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==1.26.18" }, "watchdog": { diff --git a/api/conf/settings.py b/api/conf/settings.py index 7ce968b60d..45988f0227 100644 --- a/api/conf/settings.py +++ b/api/conf/settings.py @@ -340,7 +340,6 @@ def _build_redis_url(base_url, db_number, **query_args): ELASTICSEARCH_DSL = { "default": {"hosts": env.str("ELASTICSEARCH_HOST")}, } - ELASTICSEARCH_DSL_SIGNAL_PROCESSOR = "api.search.signals.ElasticsearchDSLSignalProcessor" ENABLE_SPIRE_SEARCH = env.bool("ENABLE_SPIRE_SEARCH", False) diff --git a/conftest.py b/api/conftest.py similarity index 100% rename from conftest.py rename to api/conftest.py diff --git a/api/search/application/documents.py b/api/search/application/documents.py index ab558612cd..d6f832c17d 100644 --- a/api/search/application/documents.py +++ b/api/search/application/documents.py @@ -7,7 +7,6 @@ from django.db.models import Prefetch from api.applications import models -from api.cases.models import CaseAssignment address_analyzer = analysis.analyzer( @@ -258,11 +257,6 @@ class Meta: class Django: model = models.BaseApplication - related_models = [CaseAssignment] - - def get_instances_from_related(self, related_instance): - if isinstance(related_instance, CaseAssignment): - return related_instance.case.baseapplication def get_queryset(self): return super().get_queryset().exclude(status__status="draft") diff --git a/api/search/signals.py b/api/search/signals.py index db76860121..39c2a51bd4 100644 --- a/api/search/signals.py +++ b/api/search/signals.py @@ -3,10 +3,7 @@ from django.db.models.signals import post_save from django.dispatch import receiver -from django_elasticsearch_dsl.signals import CelerySignalProcessor -from django_elasticsearch_dsl.registries import registry - -from api.applications.models import GoodOnApplication +from api.applications.models import BaseApplication, GoodOnApplication from api.goods.models import Good from api.search.celery_tasks import update_search_index @@ -32,6 +29,9 @@ def update_search_documents(sender, **kwargs): """ to_update = [] + if issubclass(sender, BaseApplication): + to_update.append((application_document_model, instance.baseapplication.pk)) + if issubclass(sender, GoodOnApplication): to_update.append((product_document_model, instance.pk)) @@ -40,7 +40,9 @@ def update_search_documents(sender, **kwargs): to_update.append((product_document_model, good_on_application.pk)) try: - if app_label == "cases" and model_name == "case": + if app_label == "cases" and model_name == "caseassignment": + to_update.append((application_document_model, instance.case.baseapplication.pk)) + elif app_label == "cases" and model_name == "case": to_update.append((application_document_model, instance.baseapplication.pk)) elif app_label == "goods" and model_name == "good": for good in instance.goods_on_application.all(): @@ -57,18 +59,3 @@ def update_search_documents(sender, **kwargs): if to_update: to_update = [(model_name, str(pk)) for model_name, pk in to_update] update_search_index.delay(to_update) - - -class ElasticsearchDSLSignalProcessor(CelerySignalProcessor): - - def handle_save(self, sender, instance, **kwargs): - """ - Custom save handler which firstly checks with the registry whether the - current model is recorded in elasticsearch. This avoids queueing unnecessary - celery tasks. - """ - model_registered = instance.__class__ in registry._models - model_related_to_registered = len(list(registry._get_related_doc(instance))) > 0 - if not (model_registered or model_related_to_registered): - return - super().handle_save(sender, instance, **kwargs) diff --git a/api/search/tests/test_signals.py b/api/search/tests/test_signals.py index e82d602db9..c7c350ee29 100644 --- a/api/search/tests/test_signals.py +++ b/api/search/tests/test_signals.py @@ -3,91 +3,71 @@ from unittest.mock import patch from django.test import override_settings -from django_elasticsearch_dsl.signals import CelerySignalProcessor -from api.audit_trail.tests.factories import AuditFactory from api.goods.tests.factories import GoodFactory -from api.search.application.documents import ApplicationDocumentType from api.parties.models import PartyType from test_helpers.clients import DataTestClient class UpdateApplicationDocumentTest(DataTestClient): @override_settings(LITE_API_ENABLE_ES=True) - @patch("django_elasticsearch_dsl.registries.registry.update") - def test_standard_application(self, mock_registry_update): + @patch("api.search.celery_tasks.registry") + def test_standard_application(self, mock_registry): application = self.create_standard_application_case(self.organisation) - mock_registry_update.assert_any_call(application.baseapplication) + mock_registry.update.assert_any_call(application.baseapplication) @override_settings(LITE_API_ENABLE_ES=True) - @patch.object(ApplicationDocumentType, "update") - def test_case_assignment(self, mock_document_update): - application = self.create_standard_application_case(self.organisation) - mock_document_update.reset_mock() - assignment = self.create_case_assignment(self.queue, application, self.gov_user) - mock_document_update.assert_any_call(assignment.case.baseapplication) + @patch("api.search.celery_tasks.registry") + def test_case_assignment(self, mock_registry): + assignment = self.create_case_assignment( + self.queue, self.create_standard_application_case(self.organisation), self.gov_user + ) + mock_registry.update.assert_any_call(assignment.case.baseapplication) @override_settings(LITE_API_ENABLE_ES=True) - @patch("django_elasticsearch_dsl.registries.registry.update") - def test_case(self, mock_registry_update): + @patch("api.search.celery_tasks.registry") + def test_case(self, mock_registry): case = self.create_standard_application_case(self.organisation).get_case() - mock_registry_update.assert_any_call(case.baseapplication) + mock_registry.update.assert_any_call(case.baseapplication) @override_settings(LITE_API_ENABLE_ES=True) - @patch("django_elasticsearch_dsl.registries.registry.update") - def test_good(self, mock_registry_update): + @patch("api.search.celery_tasks.registry") + def test_good(self, mock_registry): application = self.create_standard_application_case(self.organisation) good = GoodFactory(organisation=self.organisation) good_on_app = self.create_good_on_application(application, good) application.goods.add(good_on_app) application.save() - mock_registry_update.assert_any_call(good_on_app) + mock_registry.update.assert_any_call(good_on_app) @override_settings(LITE_API_ENABLE_ES=True) - @patch("django_elasticsearch_dsl.registries.registry.update") - def test_party(self, mock_registry_update): + @patch("api.search.celery_tasks.registry") + def test_party(self, mock_registry): application = self.create_standard_application_case(self.organisation) party = self.create_party("test party", self.organisation, PartyType.END_USER, application=application) party.save() - mock_registry_update.assert_any_call(application.baseapplication) + mock_registry.update.assert_any_call(application.baseapplication) @override_settings(LITE_API_ENABLE_ES=True) - @patch("django_elasticsearch_dsl.registries.registry.update") - def test_organisation(self, mock_registry_update): + @patch("api.search.celery_tasks.registry") + def test_organisation(self, mock_registry): application_organisation = self.create_standard_application_case(self.organisation) - mock_registry_update.assert_any_call(application_organisation.baseapplication) + mock_registry.update.assert_any_call(application_organisation.baseapplication) @override_settings(LITE_API_ENABLE_ES=True) - @patch("django_elasticsearch_dsl.registries.registry.update") - def test_good_on_application_update_in_index(self, mock_registry_update): + @patch("api.search.celery_tasks.registry") + def test_good_on_application_update_in_index(self, mock_registry): application = self.create_standard_application_case(self.organisation) for good_on_application in application.goods.all(): - mock_registry_update.assert_any_call(good_on_application) - - -class ESDSLSignalProcessorTest(DataTestClient): - - @override_settings(LITE_API_ENABLE_ES=True) - @patch.object(CelerySignalProcessor, "handle_save") - def test_handle_save_registered_model(self, mock_handle_save): - application = self.create_standard_application_case(self.organisation) - assert mock_handle_save.called == True - - @override_settings(LITE_API_ENABLE_ES=True) - @patch.object(CelerySignalProcessor, "handle_save") - def test_handle_save_non_registered_model(self, mock_handle_save): - audit = AuditFactory() - assert mock_handle_save.called == False + mock_registry.update.assert_any_call(good_on_application) - @override_settings(LITE_API_ENABLE_ES=True) - @patch.object(CelerySignalProcessor, "handle_save") - def test_handle_save_related_registered_model(self, mock_handle_save): - application = self.create_standard_application_case(self.organisation) - mock_handle_save.reset_mock() - assignment = self.create_case_assignment(self.queue, application, self.gov_user) - assert mock_handle_save.called == True + @override_settings(LITE_API_ENABLE_ES=False) + @patch("api.search.celery_tasks.registry") + def test_standard_application_with_elasticsearch_disabled(self, mock_registry): + self.create_standard_application_case(self.organisation) + mock_registry.update.assert_not_called()