### Question:
DataTypeDestroyHandler extends DataTypeHandler { List<DataType> handleTopLevelDataTypes(final DataType dataType) { final List<DataType> affected = new ArrayList<>(); if (!dataType.isTopLevel()) { return affected; } final List<DataType> dataTypesByType = getSubDataTypesByType(dataType.getName()); for (final DataType dt : dataTypesByType) { final Optional<DataType> dataTypeParent = Optional.ofNullable(parent(dt)); recordEngine.doDestroy(dt); affected.add(dataTypeParent.orElse(dt)); } affected.add(dataType); return affected; } @Inject  DataTypeDestroyHandler(final DataTypeStore dataTypeStore,
                                  final DataTypeManager dataTypeManager); void destroy(final DataType dataType); List<DataType> refreshDependentDataTypes(final DataType dataType);  }### Answer:
@Test public void testHandleTopLevelDataTypesWhenDataTypeIsNotTopLevel() { final DataType dataType = mock(DataType.class); when(dataType.isTopLevel()).thenReturn(false); final List<DataType> expectedDependentDataTypes = emptyList(); final List<DataType> actualDependentDataTypes = handler.handleTopLevelDataTypes(dataType); verify(recordEngine, never()).doDestroy(any()); assertEquals(expectedDependentDataTypes, actualDependentDataTypes); }
@Test public void testHandleTopLevelDataTypesWhenDataTypeIsTopLevel() { final DataType dataType = mock(DataType.class); final DataType dataType0 = mock(DataType.class); final DataType dataType1 = mock(DataType.class); final DataType dataType2 = mock(DataType.class); final DataType dataTypeParent0 = mock(DataType.class); final DataType dataTypeParent1 = mock(DataType.class); final String topLevelName = "name"; when(dataType.isTopLevel()).thenReturn(true); when(dataType.getName()).thenReturn(topLevelName); when(dataType0.getType()).thenReturn(topLevelName); when(dataType1.getType()).thenReturn(topLevelName); when(dataType2.getType()).thenReturn(topLevelName); when(dataTypeStore.getTopLevelDataTypes()).thenReturn(asList(dataType0, dataType1, dataType2)); doReturn(dataTypeParent0).when(handler).parent(dataType0); doReturn(dataTypeParent1).when(handler).parent(dataType1); final List<DataType> expectedDependentDataTypes = asList(dataTypeParent0, dataTypeParent1, dataType2, dataType); final List<DataType> actualDependentDataTypes = handler.handleTopLevelDataTypes(dataType); verify(recordEngine).doDestroy(dataType0); verify(recordEngine).doDestroy(dataType1); verify(recordEngine).doDestroy(dataType2); assertEquals(expectedDependentDataTypes, actualDependentDataTypes); }