mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-11 07:55:47 +01:00
added unit test for incoming hg command
This commit is contained in:
@@ -37,6 +37,16 @@ package sonia.scm.repository;
|
|||||||
|
|
||||||
import org.junit.Assume;
|
import org.junit.Assume;
|
||||||
|
|
||||||
|
import sonia.scm.SCMContext;
|
||||||
|
import sonia.scm.io.FileSystem;
|
||||||
|
import sonia.scm.store.MemoryStoreFactory;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
|
//~--- JDK imports ------------------------------------------------------------
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Sebastian Sdorra
|
* @author Sebastian Sdorra
|
||||||
@@ -74,4 +84,30 @@ public final class HgTestUtil
|
|||||||
Assume.assumeTrue(false);
|
Assume.assumeTrue(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param directory
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static HgRepositoryHandler createHandler(File directory)
|
||||||
|
{
|
||||||
|
TempSCMContextProvider context =
|
||||||
|
(TempSCMContextProvider) SCMContext.getContext();
|
||||||
|
|
||||||
|
context.setBaseDirectory(directory);
|
||||||
|
|
||||||
|
FileSystem fileSystem = mock(FileSystem.class);
|
||||||
|
|
||||||
|
HgRepositoryHandler handler =
|
||||||
|
new HgRepositoryHandler(new MemoryStoreFactory(), fileSystem,
|
||||||
|
new HgContextProvider());
|
||||||
|
|
||||||
|
handler.init(context);
|
||||||
|
|
||||||
|
return handler;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,17 +85,7 @@ public class AbstractHgCommandTestBase extends ZippedRepositoryTestBase
|
|||||||
@Before
|
@Before
|
||||||
public void initHgHandler() throws IOException
|
public void initHgHandler() throws IOException
|
||||||
{
|
{
|
||||||
File folder = tempFolder.newFolder();
|
this.handler = HgTestUtil.createHandler(tempFolder.newFolder());
|
||||||
TempSCMContextProvider context =
|
|
||||||
(TempSCMContextProvider) SCMContext.getContext();
|
|
||||||
|
|
||||||
context.setBaseDirectory(folder);
|
|
||||||
|
|
||||||
FileSystem fileSystem = mock(FileSystem.class);
|
|
||||||
|
|
||||||
this.handler = new HgRepositoryHandler(new MemoryStoreFactory(),
|
|
||||||
fileSystem, new HgContextProvider());
|
|
||||||
this.handler.init(context);
|
|
||||||
|
|
||||||
HgTestUtil.checkForSkip(handler);
|
HgTestUtil.checkForSkip(handler);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,98 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010, Sebastian Sdorra All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer. 2. Redistributions in
|
||||||
|
* binary form must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution. 3. Neither the name of SCM-Manager;
|
||||||
|
* nor the names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* http://bitbucket.org/sdorra/scm-manager
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
package sonia.scm.repository.spi;
|
||||||
|
|
||||||
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
|
|
||||||
|
import com.aragost.javahg.Changeset;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import sonia.scm.repository.ChangesetPagingResult;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
//~--- JDK imports ------------------------------------------------------------
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sebastian Sdorra
|
||||||
|
*/
|
||||||
|
public class HgIncomingCommandTest extends IncomingOutgoingTestBase
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testGetIncomingChangesets() throws IOException
|
||||||
|
{
|
||||||
|
writeNewFile(outgoing, outgoingDirectory, "a.txt", "Content of file a.txt");
|
||||||
|
writeNewFile(outgoing, outgoingDirectory, "b.txt", "Content of file b.txt");
|
||||||
|
|
||||||
|
Changeset c1 = commit(outgoing, "added a and b");
|
||||||
|
|
||||||
|
writeNewFile(outgoing, outgoingDirectory, "c.txt", "Content of file c.txt");
|
||||||
|
writeNewFile(outgoing, outgoingDirectory, "d.txt", "Content of file d.txt");
|
||||||
|
|
||||||
|
Changeset c2 = commit(outgoing, "added c and d");
|
||||||
|
|
||||||
|
HgIncomingCommand cmd = createIncomingCommand();
|
||||||
|
IncomingCommandRequest request = new IncomingCommandRequest();
|
||||||
|
|
||||||
|
request.setRemoteRepository(outgoingRepository);
|
||||||
|
|
||||||
|
ChangesetPagingResult cpr = cmd.getIncomingChangesets(request);
|
||||||
|
|
||||||
|
assertNotNull(cpr);
|
||||||
|
assertEquals(2, cpr.getTotal());
|
||||||
|
assertChangesetsEqual(c1, cpr.getChangesets().get(0));
|
||||||
|
assertChangesetsEqual(c2, cpr.getChangesets().get(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private HgIncomingCommand createIncomingCommand()
|
||||||
|
{
|
||||||
|
return new HgIncomingCommand(new HgCommandContext(handler.getConfig(),
|
||||||
|
incomingRepository, incomingDirectory), incomingRepository, handler);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,210 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2010, Sebastian Sdorra All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer. 2. Redistributions in
|
||||||
|
* binary form must reproduce the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer in the documentation and/or other
|
||||||
|
* materials provided with the distribution. 3. Neither the name of SCM-Manager;
|
||||||
|
* nor the names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* http://bitbucket.org/sdorra/scm-manager
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package sonia.scm.repository.spi;
|
||||||
|
|
||||||
|
import com.aragost.javahg.BaseRepository;
|
||||||
|
import com.aragost.javahg.Changeset;
|
||||||
|
import com.aragost.javahg.Repository;
|
||||||
|
import com.aragost.javahg.RepositoryConfiguration;
|
||||||
|
import com.aragost.javahg.commands.AddCommand;
|
||||||
|
import com.aragost.javahg.commands.CommitCommand;
|
||||||
|
import com.google.common.base.Charsets;
|
||||||
|
import com.google.common.io.Files;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.TemporaryFolder;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
import sonia.scm.repository.ChangesetPagingResult;
|
||||||
|
import sonia.scm.repository.HgConfig;
|
||||||
|
import sonia.scm.repository.HgRepositoryHandler;
|
||||||
|
import sonia.scm.repository.HgTestUtil;
|
||||||
|
import sonia.scm.user.User;
|
||||||
|
import sonia.scm.user.UserTestData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sebastian Sdorra
|
||||||
|
*/
|
||||||
|
public abstract class IncomingOutgoingTestBase
|
||||||
|
{
|
||||||
|
|
||||||
|
/** Field description */
|
||||||
|
@Rule
|
||||||
|
public TemporaryFolder tempFolder = new TemporaryFolder();
|
||||||
|
|
||||||
|
//~--- methods --------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
@Before
|
||||||
|
public void initHgHandler() throws IOException
|
||||||
|
{
|
||||||
|
HgRepositoryHandler temp = HgTestUtil.createHandler(tempFolder.newFolder());
|
||||||
|
|
||||||
|
HgTestUtil.checkForSkip(temp);
|
||||||
|
|
||||||
|
incomingDirectory = tempFolder.newFolder("incoming");
|
||||||
|
outgoingDirectory = tempFolder.newFolder("outgoing");
|
||||||
|
|
||||||
|
incomingRepository = new sonia.scm.repository.Repository("1", "hg",
|
||||||
|
"incoming");
|
||||||
|
outgoingRepository = new sonia.scm.repository.Repository("2", "hg",
|
||||||
|
"outgoing");
|
||||||
|
|
||||||
|
incoming = Repository.create(createConfig(temp), incomingDirectory);
|
||||||
|
outgoing = Repository.create(createConfig(temp), outgoingDirectory);
|
||||||
|
|
||||||
|
handler = mock(HgRepositoryHandler.class);
|
||||||
|
when(handler.getDirectory(incomingRepository)).thenReturn(
|
||||||
|
incomingDirectory);
|
||||||
|
when(handler.getDirectory(outgoingRepository)).thenReturn(
|
||||||
|
outgoingDirectory);
|
||||||
|
when(handler.getConfig()).thenReturn(temp.getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param expected
|
||||||
|
* @param actual
|
||||||
|
*/
|
||||||
|
protected void assertChangesetsEqual(Changeset expected,
|
||||||
|
sonia.scm.repository.Changeset actual)
|
||||||
|
{
|
||||||
|
assertEquals(expected.getNode(), actual.getId());
|
||||||
|
assertEquals(expected.getMessage(), actual.getDescription());
|
||||||
|
assertEquals(expected.getUser(), actual.getAuthor().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param repository
|
||||||
|
* @param message
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected Changeset commit(BaseRepository repository, String message)
|
||||||
|
{
|
||||||
|
CommitCommand c = CommitCommand.on(repository);
|
||||||
|
|
||||||
|
c.user(createUser(UserTestData.createTrillian()));
|
||||||
|
c.message(message);
|
||||||
|
|
||||||
|
return c.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param handler
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private RepositoryConfiguration createConfig(HgRepositoryHandler handler)
|
||||||
|
{
|
||||||
|
HgConfig cfg = handler.getConfig();
|
||||||
|
RepositoryConfiguration configuration = RepositoryConfiguration.DEFAULT;
|
||||||
|
|
||||||
|
configuration.setHgBin(cfg.getHgBinary());
|
||||||
|
|
||||||
|
return configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param user
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected String createUser(User user)
|
||||||
|
{
|
||||||
|
return user.getDisplayName().concat(" <").concat(user.getMail()).concat(
|
||||||
|
">");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param repository
|
||||||
|
* @param parent
|
||||||
|
* @param name
|
||||||
|
* @param content
|
||||||
|
*
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
protected void writeNewFile(BaseRepository repository, File parent,
|
||||||
|
String name, String content)
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
File file = new File(parent, name);
|
||||||
|
|
||||||
|
Files.write(content, file, Charsets.UTF_8);
|
||||||
|
AddCommand.on(repository).execute(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
//~--- fields ---------------------------------------------------------------
|
||||||
|
|
||||||
|
/** Field description */
|
||||||
|
protected HgRepositoryHandler handler;
|
||||||
|
|
||||||
|
/** Field description */
|
||||||
|
protected BaseRepository incoming;
|
||||||
|
|
||||||
|
/** Field description */
|
||||||
|
protected File incomingDirectory;
|
||||||
|
|
||||||
|
/** Field description */
|
||||||
|
protected sonia.scm.repository.Repository incomingRepository;
|
||||||
|
|
||||||
|
/** Field description */
|
||||||
|
protected BaseRepository outgoing;
|
||||||
|
|
||||||
|
/** Field description */
|
||||||
|
protected File outgoingDirectory;
|
||||||
|
|
||||||
|
/** Field description */
|
||||||
|
protected sonia.scm.repository.Repository outgoingRepository;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user