package com.beijunyi.parallelgit.filesystem.commands; import java.io.IOException; import java.nio.file.Files; import com.beijunyi.parallelgit.filesystem.Gfs; import com.beijunyi.parallelgit.filesystem.PreSetupGitFileSystemTest; import com.beijunyi.parallelgit.filesystem.commands.GfsCheckout.Result; import com.beijunyi.parallelgit.filesystem.exceptions.NoBranchException; import com.beijunyi.parallelgit.utils.BranchUtils; import com.beijunyi.parallelgit.utils.exceptions.NoSuchBranchException; import org.eclipse.jgit.lib.ObjectId; import org.junit.Test; import static org.junit.Assert.*; public class GfsCheckoutWithNoConflictTest extends PreSetupGitFileSystemTest { @Test public void checkoutWhenThereIsNoLocalChanges_fileSystemShouldRemainClean() throws IOException { writeSomethingToCache(); commitToBranch("test_branch"); Result result = Gfs.checkout(gfs).target("test_branch").execute(); assertFalse(result.hasConflicts()); assertTrue(result.isSuccessful()); assertFalse(status.isDirty()); } @Test public void checkoutWhenLocalChangesDoNotCauseConflict_localChangesShouldBeKept() throws IOException { writeSomethingToCache(); commitToBranch("test_branch"); writeToGfs("non_conflicting_file.txt"); Result result = Gfs.checkout(gfs).target("test_branch").execute(); assertFalse(result.hasConflicts()); assertTrue(result.isSuccessful()); assertTrue(Files.exists(gfs.getPath("non_conflicting_file.txt"))); } @Test public void checkoutBranchWhenThereIsNoConflict_fileSystemShouldAttachToTargetBranch() throws IOException { writeSomethingToCache(); commitToBranch("test_branch"); Result result = Gfs.checkout(gfs).target("test_branch").execute(); assertFalse(result.hasConflicts()); assertTrue(result.isSuccessful()); assertTrue(status.isAttached()); assertEquals("test_branch", status.branch()); } @Test public void checkoutBranchWithDetachOption_fileSystemShouldBecomeDetached() throws IOException { writeSomethingToCache(); commitToBranch("test_branch"); Result result = Gfs.checkout(gfs).target("test_branch").detach(true).execute(); assertFalse(result.hasConflicts()); assertTrue(result.isSuccessful()); assertFalse(status.isAttached()); } @Test public void checkoutBranchWithDetachOption_fileSystemHeadShouldBecomeTheTargetBranchHeadCommit() throws IOException { writeSomethingToCache(); commitToBranch("test_branch"); Result result = Gfs.checkout(gfs).target("test_branch").detach(true).execute(); assertFalse(result.hasConflicts()); assertTrue(result.isSuccessful()); assertEquals(BranchUtils.getHeadCommit("test_branch", repo), status.commit()); } @Test public void checkoutCommitWhenThereIsNoConflict_fileSystemShouldBecomeDetached() throws IOException { writeSomethingToCache(); ObjectId commitId = commit(); Result result = Gfs.checkout(gfs).target(commitId.name()).execute(); assertFalse(result.hasConflicts()); assertTrue(result.isSuccessful()); assertFalse(status.isAttached()); } @Test public void checkoutCommitWhenThereIsNoConflict_fileSystemHeadShouldBecomeTheTargetCommit() throws IOException { writeSomethingToCache(); ObjectId commitId = commit(); Result result = Gfs.checkout(gfs).target(commitId.name()).execute(); assertFalse(result.hasConflicts()); assertTrue(result.isSuccessful()); assertEquals(commitId, status.commit()); } @Test(expected = NoBranchException.class) public void checkoutWithNoTargetSpecified_shouldThrowNoBranchException() throws IOException { Gfs.checkout(gfs).execute(); } @Test(expected = NoSuchBranchException.class) public void checkoutNonExistentBranch_shouldThrowNoSuchBranchException() throws IOException { Gfs.checkout(gfs).target("non_existent_branch").execute(); } }