package com.btmatthews.leabharlann.service.impl; import com.btmatthews.atlas.jcr.JCRAccessor; import com.btmatthews.atlas.jcr.NodeCallback; import com.btmatthews.atlas.jcr.SessionCallback; import com.btmatthews.leabharlann.domain.Folder; import com.btmatthews.leabharlann.domain.Workspace; import com.btmatthews.leabharlann.service.EncodingDetector; import com.btmatthews.leabharlann.service.LibraryService; import com.btmatthews.leabharlann.service.TypeDetector; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import javax.jcr.Node; import javax.jcr.Session; import java.util.List; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; import static org.mockito.MockitoAnnotations.initMocks; /** * Created with IntelliJ IDEA. * User: bmatthews68 * Date: 14/05/2013 * Time: 23:05 * To change this template use File | Settings | File Templates. */ public class TestLibraryServiceImpl { @Mock private JCRAccessor jcrAccessor; @Mock private Session jcrSession; @Mock private javax.jcr.Workspace jcrWorkspace; @Mock private Node jcrFolderNode; @Mock private Node jcrRootNode; @Mock private EncodingDetector encodingDetector; @Mock private TypeDetector typeDetector; @Mock private Workspace workspace; @Mock private Folder rootFolder; @Mock private Folder folder; private LibraryService libraryService; @Before public void setup() { initMocks(this); when(workspace.getName()).thenReturn("default"); libraryService = new LibraryServiceImpl( jcrAccessor, typeDetector, encodingDetector); } @Test public void verifyGetWorkspaces() throws Exception { when(jcrAccessor.withSession(anyString(), any(SessionCallback.class))).thenAnswer(new Answer() { @Override public Object answer(final InvocationOnMock invocation) throws Throwable { when(jcrSession.getWorkspace()).thenReturn(jcrWorkspace); when(jcrWorkspace.getAccessibleWorkspaceNames()).thenReturn(new String[]{"default", "wip"}); return ((SessionCallback<List<Workspace>>) invocation.getArguments()[1]).doInSession(jcrSession); } }); final List<Workspace> workspaces = libraryService.getWorkspaces(); assertNotNull(workspaces); assertEquals(2, workspaces.size()); assertEquals("default", workspaces.get(0).getName()); assertEquals("wip", workspaces.get(1).getName()); verify(jcrSession).getWorkspace(); verify(jcrWorkspace).getAccessibleWorkspaceNames(); verify(jcrAccessor).withSession(eq("default"), any(SessionCallback.class)); verifyNoMoreInteractions(jcrAccessor, jcrSession, jcrWorkspace); } @Test public void verifyGetWorkspace() { final Workspace workspace = libraryService.getWorkspace("default"); assertNotNull(workspace); assertEquals("default", workspace.getName()); } @Test public void verifyGetRoot() throws Exception { when(jcrAccessor.withRoot(anyString(), any(NodeCallback.class))).thenAnswer(new Answer<Object>() { @Override public Object answer(final InvocationOnMock invocation) throws Throwable { when(jcrRootNode.getIdentifier()).thenReturn("e7a74180-bcef-11e2-9e96-0800200c9a66"); when(jcrRootNode.getName()).thenReturn(""); when(jcrRootNode.getPath()).thenReturn("/"); return ((NodeCallback<Folder>) invocation.getArguments()[1]).doInSessionWithNode(jcrSession, jcrRootNode); } }); final Folder folder = libraryService.getRoot(workspace); assertNotNull(folder); assertEquals("e7a74180-bcef-11e2-9e96-0800200c9a66", folder.getId()); assertEquals("", folder.getName()); assertEquals("/", folder.getPath()); assertNull(folder.getAttributes()); verify(workspace).getName(); verify(jcrRootNode).getIdentifier(); verify(jcrRootNode).getName(); verify(jcrRootNode).getPath(); verify(jcrAccessor).withRoot(eq("default"), any(NodeCallback.class)); verifyNoMoreInteractions(jcrAccessor, jcrSession, jcrRootNode); } @Test public void verifyGetFolder() throws Exception { when(jcrAccessor.withNodeId(anyString(), anyString(), any(NodeCallback.class))).thenAnswer(new Answer() { @Override public Object answer(final InvocationOnMock invocation) throws Throwable { when(jcrFolderNode.getIdentifier()).thenReturn("d1d48070-bcea-11e2-9e96-0800200c9a66"); when(jcrFolderNode.getName()).thenReturn("css"); when(jcrFolderNode.getPath()).thenReturn("/documents"); return ((NodeCallback<Folder>) invocation.getArguments()[2]).doInSessionWithNode(jcrSession, jcrFolderNode); } }); final Folder folder = libraryService.getFolder(workspace, "d1d48070-bcea-11e2-9e96-0800200c9a66"); assertNotNull(folder); assertEquals("d1d48070-bcea-11e2-9e96-0800200c9a66", folder.getId()); assertEquals("css", folder.getName()); assertEquals("/documents", folder.getPath()); assertNull(folder.getAttributes()); verify(workspace).getName(); verify(jcrFolderNode).getIdentifier(); verify(jcrFolderNode).getName(); verify(jcrFolderNode).getPath(); verify(jcrAccessor).withNodeId(eq("default"), eq("d1d48070-bcea-11e2-9e96-0800200c9a66"), any(NodeCallback.class)); verifyNoMoreInteractions(jcrAccessor, jcrSession, jcrFolderNode); } }