package com.beijunyi.parallelgit.filesystem.commands;
import java.io.IOException;
import com.beijunyi.parallelgit.AbstractParallelGitTest;
import com.beijunyi.parallelgit.filesystem.GitFileSystem;
import com.beijunyi.parallelgit.filesystem.ParallelGitMergeTest;
import com.beijunyi.parallelgit.filesystem.commands.GfsMerge.Result;
import com.beijunyi.parallelgit.filesystem.merge.MergeNote;
import org.eclipse.jgit.lib.ObjectId;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static com.beijunyi.parallelgit.filesystem.Gfs.*;
import static java.nio.file.Files.exists;
import static org.junit.Assert.*;
public class GfsMergeSquashTest extends AbstractParallelGitTest implements ParallelGitMergeTest {
private GitFileSystem gfs;
@Before
public void setUp() throws IOException {
initRepository();
ObjectId base = commit();
clearCache();
writeToCache("/test_file.txt", "OUR VERSION");
commitToBranch(OURS, base);
clearCache();
writeToCache("/their_file1.txt");
commitToBranch(THEIRS, base);
writeToCache("/their_file2.txt");
commitToBranch(THEIRS);
gfs = newFileSystem(OURS, repo);
}
@After
public void tearDown() throws IOException {
if(gfs != null) {
gfs.close();
gfs = null;
}
}
@Test
public void mergeWithSquashOption_getCommitShouldReturnNull() throws IOException {
Result result = merge(gfs).source(THEIRS).squash(true).execute();
assertTrue(result.isSuccessful());
assertNull(result.getCommit());
}
@Test
public void mergeWithSquashOption_headCommitShouldRemainTheSame() throws IOException {
ObjectId head = gfs.getStatusProvider().commit();
Result result = merge(gfs).source(THEIRS).squash(true).execute();
assertTrue(result.isSuccessful());
assertEquals(head, gfs.getStatusProvider().commit());
}
@Test
public void mergeWithSquashOption_filesFromTheSquashedCommitsShouldExistInTheFileSystem() throws IOException {
Result result = merge(gfs).source(THEIRS).squash(true).execute();
assertTrue(result.isSuccessful());
assertTrue(exists(gfs.getPath("/their_file1.txt")));
assertTrue(exists(gfs.getPath("/their_file2.txt")));
}
@Test
public void mergeWithSquashOption_fileSystemShouldHaveMergeNoteWithMessageAndNoSourceCommit() throws IOException {
Result result = merge(gfs).source(THEIRS).squash(true).execute();
MergeNote note = gfs.getStatusProvider().mergeNote();
assertTrue(result.isSuccessful());
assertNotNull(note);
assertNull(note.getSource());
assertNotNull(note.getMessage());
}
@Test
public void mergeConflictingBranchWithSquashOption_fileSystemShouldHaveMergeNoteWithMessageAndNoSourceCommit() throws IOException {
writeToCache("/test_file.txt", "THEIR VERSION");
commitToBranch(THEIRS);
Result result = merge(gfs).source(THEIRS).squash(true).execute();
MergeNote note = gfs.getStatusProvider().mergeNote();
assertFalse(result.isSuccessful());
assertNotNull(note);
assertNull(note.getSource());
assertNotNull(note.getMessage());
}
}