import uuid from django.contrib.auth.models import User from arches.app.models.resource import Resource from arches.app.models.tile import Tile from arches.app.etl_modules.bulk_data_deletion import BulkDataDeletion from tests.base_test import ArchesTestCase # these tests can be run from the command line via # python manage.py test tests.bulkdata.bulk_data_delete_tests --settings="tests.test_settings" class BulkDataDeletionTests(ArchesTestCase): graph_fixtures = ["Search Test Model"] @classmethod def setUpTestData(cls): super().setUpTestData() cls.search_model_graphid = "d291a445-fa5f-11e6-afa8-14109fd34195" cls.search_model_name_nodeid = "2fe14de3-fa61-11e6-897b-14109fd34195" cls.user = User.objects.create(username="testuser", password="securepassword") cls.bulk_deleter = BulkDataDeletion() def test_get_number_of_deletions_with_no_resourceids(self): loadid = uuid.uuid4() resourceids, tile_ct = 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.assertEqual(number_of_resource, len(resourceids)) def test_delete_resources(self): loadid = uuid.uuid4() resourceids, tile_ct = 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, graphid=self.search_model_graphid, resourceids=resourceids, ) self.assertTrue(result["success"]) self.assertEqual(result["deleted_count"], len(resourceids)) def test_delete_tiles(self): loadid = uuid.uuid4() resourceids, tile_ct = 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"]) # TODO: the test below needs result to include deleted_count, which it currently does not because of #10858 # self.assertEqual(result['deleted_count'], tile_ct) # self.bulk_deleter.index_resource_deletion(loadid, resourceids) def create_test_resources_and_tiles(graphid, nodeid, transaction_id): count = 10 test_resourceids = [uuid.uuid4() for x in range(count)] for x in range(count): r = Resource(graph_id=graphid, resourceinstanceid=test_resourceids[x]) 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, count