package de.unioninvestment.eai.portal.portlet.crud.domain.visitor;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import de.unioninvestment.eai.portal.portlet.crud.domain.model.*;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import static java.util.Arrays.asList;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.when;
/**
* Created by cmj on 01.08.14.
*/
public class ModelProcessorTest {
@Mock
private Portlet portletMock;
@Mock
private ModelVisitor visitorMock;
@Mock
private ModelProcessor processor;
@Mock
private Page pageMock;
@Mock
private Tabs tabsMock;
@Mock
private Tab tabMock;
@Mock
private Panel panelMock;
@Mock
private Component componentMock;
@Mock
private Role role1Mock, role2Mock;
@Mock
private Dialog dialog1Mock;
private InOrder inOrder;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
processor = new ModelProcessor(visitorMock);
inOrder = inOrder(visitorMock);
}
@Test
public void shouldVisitAPortlet() {
processor.traverse(portletMock);
inOrder.verify(visitorMock).visit(portletMock);
inOrder.verify(visitorMock).visitAfter(portletMock);
}
@Test
public void shouldVisitAPortletWithRoles() {
when(portletMock.getRoles()).thenReturn(Sets.<Role>newLinkedHashSet(asList(role1Mock, role2Mock)));
processor.traverse(portletMock);
inOrder.verify(visitorMock).visit(portletMock);
inOrder.verify(visitorMock).visit(role1Mock);
inOrder.verify(visitorMock).visitAfter(role1Mock);
inOrder.verify(visitorMock).visit(role2Mock);
inOrder.verify(visitorMock).visitAfter(role2Mock);
inOrder.verify(visitorMock).visitAfter(portletMock);
}
@Test
public void shouldVisitAPortletPage() {
when(portletMock.getPage()).thenReturn(pageMock);
processor.traverse(portletMock);
inOrder.verify(visitorMock).visit(portletMock);
inOrder.verify(visitorMock).visit(pageMock);
inOrder.verify(visitorMock).visitAfter(pageMock);
inOrder.verify(visitorMock).visitAfter(portletMock);
}
@Test
public void shouldVisitDialogsBeforePageOrTabs() {
when(portletMock.getDialogsById()).thenReturn(ImmutableMap.of("1", dialog1Mock));
when(portletMock.getPage()).thenReturn(pageMock);
processor.traverse(portletMock);
inOrder.verify(visitorMock).visit(portletMock);
inOrder.verify(visitorMock).visit(dialog1Mock);
inOrder.verify(visitorMock).visitAfter(dialog1Mock);
inOrder.verify(visitorMock).visit(pageMock);
inOrder.verify(visitorMock).visitAfter(pageMock);
inOrder.verify(visitorMock).visitAfter(portletMock);
}
@Test
public void shouldVisitAPortletPageWithComponents() {
when(portletMock.getPage()).thenReturn(pageMock);
when(pageMock.getElements()).thenReturn(asList(panelMock, componentMock));
processor.traverse(portletMock);
inOrder.verify(visitorMock).visit(portletMock);
inOrder.verify(visitorMock).visit(pageMock);
inOrder.verify(visitorMock).visit(panelMock);
inOrder.verify(visitorMock).visitAfter(panelMock);
inOrder.verify(visitorMock).visit(componentMock);
inOrder.verify(visitorMock).visitAfter(componentMock);
inOrder.verify(visitorMock).visitAfter(pageMock);
inOrder.verify(visitorMock).visitAfter(portletMock);
}
@Test
public void shouldVisitPortletTabs() {
when(portletMock.getTabs()).thenReturn(tabsMock);
when(tabsMock.getElements()).thenReturn(asList(tabMock));
when(tabMock.getElements()).thenReturn(asList(componentMock));
processor.traverse(portletMock);
inOrder.verify(visitorMock).visit(portletMock);
inOrder.verify(visitorMock).visit(tabsMock);
inOrder.verify(visitorMock).visit(tabMock);
inOrder.verify(visitorMock).visit(componentMock);
inOrder.verify(visitorMock).visitAfter(componentMock);
inOrder.verify(visitorMock).visitAfter(tabMock);
inOrder.verify(visitorMock).visitAfter(tabsMock);
inOrder.verify(visitorMock).visitAfter(portletMock);
}
}