@Test
public void getItemContainer() {

    elementViewListLocal.clear();
    ITEM_ID_EXPANDABLE_PROPERTIES_MAP_LOCAL.clear();
    LIElement itemContainer = elementPresenter.getItemContainer(TEST_ITEM_ID, TEST_PROPERTIES_MAP, EXPANDABLE_PROPERTIES_VALUES);
    verify(elementView1Mock, times(1 + EXPANDABLE_PROPERTIES_VALUES.size())).init(elementPresenter); // Add invocation inside EXPANDABLE_PROPERTIES_VALUES loop
    verify(elementView1Mock, times(1)).setItemId(TEST_ITEM_ID);
    verify(elementView1Mock, times(1 + EXPANDABLE_PROPERTIES_VALUES.size())).getItemContainer(); // Add invocation inside EXPANDABLE_PROPERTIES_VALUES loop
    verify(elementView1Mock, times(3)).getSaveChange(); // Three times because invoked also inside EXPANDABLE_PROPERTIES_VALUES loop
    TEST_PROPERTIES_MAP.forEach((propertyName, propertyValue) -> {
        verify(propertyPresenterMock, times(1))
                .getPropertyFields(eq(TEST_ITEM_ID), eq(propertyName), eq(propertyValue));
        verify(innerItemContainerMock, times(1)).insertBefore(propertyFieldsMock, saveChangeMock);
        reset(innerItemContainerMock);
    });
    assertTrue(ITEM_ID_EXPANDABLE_PROPERTIES_MAP_LOCAL.containsKey(TEST_ITEM_ID));
    EXPANDABLE_PROPERTIES_VALUES.forEach((nestedPropertyName, nestedPropertiesValues) -> {
        assertTrue(ITEM_ID_EXPANDABLE_PROPERTIES_MAP_LOCAL.get(TEST_ITEM_ID).contains(nestedPropertyName));
        verify((ItemElementPresenter) elementPresenter, times(1)).addExpandableItemElementView(eq(elementView1Mock), eq(nestedPropertiesValues), eq(nestedPropertyName));
    });
    assertNotNull(itemContainer);
    assertTrue(elementViewListLocal.contains(elementView1Mock));
}