### Question:
DataTypeListItem { Command doSaveAndCloseEditMode(final DataType dataType) { return () -> { final String referenceDataTypeHash = dataTypeList.calculateParentHash(dataType); dataTypeList.refreshItemsByUpdatedDataTypes(persist(dataType)); closeEditMode(); final String newDataTypeHash = getNewDataTypeHash(dataType, referenceDataTypeHash); dataTypeList.fireOnDataTypeListItemUpdateCallback(newDataTypeHash); insertNewFieldIfDataTypeIsStructure(newDataTypeHash); fireDataChangedEvent(); }; } @Inject  DataTypeListItem(final View view,
                            final DataTypeSelect dataTypeSelectComponent,
                            final DataTypeConstraint dataTypeConstraintComponent,
                            final SmallSwitchComponent dataTypeListComponent,
                            final DataTypeManager dataTypeManager,
                            final DataTypeConfirmation confirmation,
                            final DataTypeNameFormatValidator nameFormatValidator,
                            final Event<DataTypeEditModeToggleEvent> editModeToggleEvent,
                            final Event<DataTypeChangedEvent> dataTypeChangedEvent); void init(final DataTypeList dataTypeList); DataType getDataType(); boolean isReadOnly(); int getLevel(); boolean isCollapsed(); void expand(); void collapse(); void enableEditMode(); void disableEditMode(); void saveAndCloseEditMode(); void remove(); Command removeItem(); Command destroy(); void destroyWithDependentTypes(); void destroyWithoutDependentTypes(); String getType(); void insertFieldAbove(); String insertFieldAbove(final DataType dataType); void insertFieldBelow(); String insertFieldBelow(final DataType dataType); void insertNestedField(); void insertNestedField(final DataType newDataType); HTMLElement getDragAndDropElement(); void highlightLevel(final DataType dataType);  }### Answer:
@Test public void testDoSaveAndCloseEditMode() { final DataType dataType = spy(makeDataType()); final List<DataType> updatedDataTypes = singletonList(makeDataType()); final String referenceDataTypeHash = "referenceDataTypeHash"; final String newDataTypeHash = "newDataTypeHash"; doReturn(updatedDataTypes).when(listItem).persist(dataType); doReturn(dataType).when(listItem).getDataType(); doReturn(newDataTypeHash).when(listItem).getNewDataTypeHash(dataType, referenceDataTypeHash); doNothing().when(listItem).insertNewFieldIfDataTypeIsStructure(newDataTypeHash); when(dataTypeList.calculateParentHash(dataType)).thenReturn(referenceDataTypeHash); listItem.doSaveAndCloseEditMode(dataType).execute(); verify(dataTypeList).refreshItemsByUpdatedDataTypes(updatedDataTypes); verify(listItem).closeEditMode(); verify(dataTypeList).fireOnDataTypeListItemUpdateCallback(newDataTypeHash); verify(listItem).insertNewFieldIfDataTypeIsStructure(newDataTypeHash); verify(listItem).fireDataChangedEvent(); }