fix descendant delete bug, create test