def test_index_deletions(self): old_entity = self.get_new_entity_proto(*self.BASIC_ENTITY) # No deletions should occur when the entity doesn't change. db_batch = flexmock() db_batch.should_receive('valid_data_version').and_return(True) dd = DatastoreDistributed(db_batch, None) self.assertListEqual([], dd.index_deletions(old_entity, old_entity)) # When a property changes, the previous index entries should be deleted. new_entity = entity_pb.EntityProto() new_entity.MergeFrom(old_entity) new_entity.property_list()[0].value().set_stringvalue('updated content') deletions = dd.index_deletions(old_entity, new_entity) self.assertEqual(len(deletions), 2) self.assertEqual(deletions[0]['table'], dbconstants.ASC_PROPERTY_TABLE) self.assertEqual(deletions[1]['table'], dbconstants.DSC_PROPERTY_TABLE) prop = old_entity.add_property() prop.set_name('author') value = prop.mutable_value() value.set_stringvalue('author1') prop = new_entity.add_property() prop.set_name('author') value = prop.mutable_value() value.set_stringvalue('author1') # When given an index, an entry should be removed from the composite table. composite_index = entity_pb.CompositeIndex() composite_index.set_id(123) composite_index.set_app_id('guestbook') definition = composite_index.mutable_definition() definition.set_entity_type('Greeting') prop1 = definition.add_property() prop1.set_name('content') prop1.set_direction(datastore_pb.Query_Order.ASCENDING) prop2 = definition.add_property() prop2.set_name('author') prop1.set_direction(datastore_pb.Query_Order.ASCENDING) deletions = dd.index_deletions(old_entity, new_entity, (composite_index,)) self.assertEqual(len(deletions), 3) self.assertEqual(deletions[0]['table'], dbconstants.ASC_PROPERTY_TABLE) self.assertEqual(deletions[1]['table'], dbconstants.DSC_PROPERTY_TABLE) self.assertEqual(deletions[2]['table'], dbconstants.COMPOSITE_TABLE) # No composite deletions should occur when the entity type differs. definition.set_entity_type('TestEntity') deletions = dd.index_deletions(old_entity, new_entity, (composite_index,)) self.assertEqual(len(deletions), 2)