org.sventon.service.javahl.JavaHLRepositoryServiceTest.java Source code

Java tutorial

Introduction

Here is the source code for org.sventon.service.javahl.JavaHLRepositoryServiceTest.java

Source

/*
 * ====================================================================
 * Copyright (c) 2005-2012 sventon project. All rights reserved.
 *
 * This software is licensed as described in the file LICENSE, which
 * you should have received as part of this distribution. The terms
 * are also available at http://www.sventon.org.
 * If newer versions of this license are posted there, you may use a
 * newer version instead, at your option.
 * ====================================================================
 */
package org.sventon.service.javahl;

import org.apache.commons.collections.MapUtils;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.sventon.SVNConnection;
import org.sventon.model.*;
import org.tigris.subversion.javahl.*;
import org.tigris.subversion.javahl.Revision;

import java.util.*;

import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;

public class JavaHLRepositoryServiceTest {
    private JavaHLRepositoryService service;

    @Mock
    private SVNConnection connection;
    @Mock
    private SVNClientInterface client;

    @Test
    public void testGetLogEntries() throws Exception {
        final Map<String, String> propMap = new HashMap<String, String>();
        final ChangePath cp1 = mock(ChangePath.class);
        final ChangePath cp2 = mock(ChangePath.class);
        final ChangePath[] changePaths = { cp1, cp2 };
        final int rev = 4711;
        final Date date = new Date();
        final String dateString = DateUtil.formatISO8601(date);

        MapUtils.putAll(propMap, new String[][] { { "svn:author", "daAuthor" }, { "svn:date", dateString },
                { "svn:log", "Added new text in my finest file" } });

        when(cp1.getPath()).thenReturn("/trunk/src/main/da/path/myfile.txt");
        when(cp1.getAction()).thenReturn('M');
        when(cp1.getCopySrcPath()).thenReturn(null);
        when(cp1.getCopySrcRevision()).thenReturn(-1L);

        when(cp2.getPath()).thenReturn("/branches/lemontree/src/main/da/path/myfile.txt");
        when(cp2.getAction()).thenReturn('A');
        when(cp2.getCopySrcPath()).thenReturn(null);
        when(cp2.getCopySrcRevision()).thenReturn(-1L);

        when(connection.getRepositoryRootUrl()).thenReturn(new SVNURL("svn://myhost/repro"));

        // Yiks! We probably need to refactor this later...
        // Matching for SVNClient.logMessages() is also a little bit too loose.
        doAnswer(new Answer() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                Object[] args = invocation.getArguments();
                final LogMessageCallback cb = (LogMessageCallback) args[8];
                cb.singleMessage(changePaths, rev, propMap, false);

                return null;
            }
        }).when(client).logMessages(eq("svn://myhost/repro/da/path"), (Revision) any(), (RevisionRange[]) any(),
                eq(false), eq(false), eq(false), (String[]) any(), anyInt(), (LogMessageCallback) any());

        final List<LogEntry> logEntries = service.getLogEntries(connection, null, 1, 100, "da/path", 100, false,
                false);

        // Verify number of LogEntries
        assertEquals(1, logEntries.size());

        // Verify ChangePath
        final LogEntry logEntry = logEntries.get(0);
        final SortedSet<ChangedPath> changedPaths = logEntry.getChangedPaths();
        assertEquals(2, changedPaths.size());

        ChangedPath[] paths = new ChangedPath[2];
        changedPaths.toArray(paths);

        assertEquals("/branches/lemontree/src/main/da/path/myfile.txt", paths[0].getPath());
        assertEquals(ChangeType.ADDED, paths[0].getType());
        assertEquals("/trunk/src/main/da/path/myfile.txt", paths[1].getPath());
        assertEquals(ChangeType.MODIFIED, paths[1].getType());

        //Verify Properties
        assertEquals("daAuthor", logEntry.getAuthor());
        // TODO: check this! We fail because we're GMT+1&DLS and date is in UTC...
        //assertEquals(date, logEntry.getDate());
        assertEquals("Added new text in my finest file", logEntry.getMessage());
        assertEquals(4711, logEntry.getRevision());
    }

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);

        service = new JavaHLRepositoryService();

        when(connection.getDelegate()).thenReturn(client);
    }

}