From cca046d6ed569d6280d3034e1d5a66e5ca168f9f Mon Sep 17 00:00:00 2001 From: Galen Date: Tue, 30 Apr 2024 09:11:02 +0900 Subject: [PATCH] creates 3 basic tests for bulkdatadeletion, re #10781 --- tests/bulkdata/bulk_data_delete_tests.py | 71 ++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tests/bulkdata/bulk_data_delete_tests.py diff --git a/tests/bulkdata/bulk_data_delete_tests.py b/tests/bulkdata/bulk_data_delete_tests.py new file mode 100644 index 00000000000..f04f1ca7c4a --- /dev/null +++ b/tests/bulkdata/bulk_data_delete_tests.py @@ -0,0 +1,71 @@ +from django.contrib.auth.models import User +from arches.app.models.resource import Resource +from arches.app.models.tile import Tile +from arches.app.models import models +from arches.app.utils.data_management.resource_graphs.importer import import_graph as ResourceGraphImporter +from arches.app.utils.betterJSONSerializer import JSONSerializer, JSONDeserializer +from yourapp.models import BulkDataDeletion # Adjust import as necessary +from tests.arches_test_case import ArchesTestCase +import os +import uuid + +class BulkDataDeletionTests(ArchesTestCase): + def setUpClass(self): + super().setUpClass() + # Setup test data here. You might want to create users, resources, tiles, etc. + self.user = User.objects.create(username='testuser', password='securepassword') + self.bulk_deleter = BulkDataDeletion() + + with open(os.path.join("tests/fixtures/resource_graphs/Search Test Model.json"), "r") as f: + archesfile = JSONDeserializer().deserialize(f) + ResourceGraphImporter(archesfile["graph"]) + self.search_model_graphid = "d291a445-fa5f-11e6-afa8-14109fd34195" + self.search_model_name_nodeid = "2fe14de3-fa61-11e6-897b-14109fd34195" + # Further setup like creating resources and tiles that the test methods will interact with. + + def test_get_number_of_deletions_with_no_resourceids(self): + # Test to ensure deletion count is calculated correctly. + loadid = str(uuid.uuid4()) + resourceids = create_test_resources_and_tiles(self.search_model_graphid, self.search_model_name_nodeid, loadid) + number_of_resource, number_of_tiles = self.bulk_deleter.get_number_of_deletions(self.search_model_graphid, self.search_model_name_nodeid, None) + + self.assertIsInstance(number_of_resource, list) + self.assertEqual(number_of_tiles, len(resourceids)) + + def test_delete_resources(self): + # Test to ensure resources are deleted properly. + loadid = str(uuid.uuid4()) + resourceids = create_test_resources_and_tiles(self.search_model_graphid, self.search_model_name_nodeid, loadid) + result = self.bulk_deleter.delete_resources(self.user.id, loadid, self.search_model_graphid, resourceids, verbose=True) + + self.assertTrue(result['success']) + self.assertEqual(result['deleted_count'], len(resourceids)) + + def test_delete_tiles(self): + # Test to ensure tiles are deleted properly. + loadid = str(uuid.uuid4()) + resourceids = create_test_resources_and_tiles(self.search_model_graphid, self.search_model_name_nodeid, loadid) + result = self.bulk_deleter.delete_tiles(self.user.id, loadid, self.search_model_name_nodeid, resourceids) + + self.assertTrue(result['success']) + + # self.bulk_deleter.index_resource_deletion(loadid, resourceids) + + @classmethod + def tearDownClass(self): + self.user.delete() + Tile.objects.filter(nodegroup_id=self.search_model_name_nodeid).delete() + Resource.objects.filter(graph_id=self.search_model_graphid).delete() + models.GraphModel.objects.filter(pk=self.search_model_graphid).delete() + super().tearDownClass() + + +def create_test_resources_and_tiles(graphid, nodeid, transaction_id): + test_resourceids = [str(uuid.uuid4()) for x in range(10)] + for x in range(10): + r = Resource(graph_id=graphid) + t = Tile.get_blank_tile(nodeid, resourceid=test_resourceids[x]) + t.data[nodeid] = {"en": {"value": f"testing {x}", "direction": "ltr"}} + r.tiles.append(t) + r.save(transaction_id=transaction_id) + return test_resourceids \ No newline at end of file