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 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
|
||||
@@ -74,4 +84,30 @@ public final class HgTestUtil
|
||||
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
|
||||
public void initHgHandler() throws IOException
|
||||
{
|
||||
File folder = 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);
|
||||
this.handler = HgTestUtil.createHandler(tempFolder.newFolder());
|
||||
|
||||
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