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.utils.BranchUtils; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.revwalk.RevCommit; import org.junit.Test; import static org.junit.Assert.*; public class GfsResetTest extends PreSetupGitFileSystemTest { @Test public void resetWhenThereIsNoLocalChange_operationShouldBeSuccessful() throws IOException { GfsReset.Result result = Gfs.reset(gfs).execute(); assertTrue(result.isSuccessful()); } @Test public void resetWhenThereAreLocalChanges_changesShouldBeUndone() throws IOException { writeToGfs("/test_file.txt"); GfsReset.Result result = Gfs.reset(gfs).execute(); assertTrue(result.isSuccessful()); assertFalse(Files.exists(gfs.getPath("/test_file.txt"))); } @Test public void resetWhenThereAreLocalChanges_fileSystemShouldBecomeClean() throws IOException { writeSomethingToGfs(); GfsReset.Result result = Gfs.reset(gfs).execute(); assertTrue(result.isSuccessful()); assertFalse(status.isDirty()); } @Test public void resetToRevisionWhenThereIsNoLocalChange_branchHeadShouldBecomeTheSpecifiedRevision() throws IOException { writeSomethingToCache(); ObjectId expected = commit(); GfsReset.Result result = Gfs.reset(gfs).revision(expected.getName()).execute(); assertTrue(result.isSuccessful()); assertFalse(status.isDirty()); assertEquals(expected, status.commit()); assertEquals(expected, BranchUtils.getHeadCommit(status.branch(), repo)); } @Test public void resetToRevision_fileSystemRootTreeShouldBecomeTheSameAsRevisionRootTree() throws IOException { writeSomethingToCache(); RevCommit revision = commit(); writeSomethingToGfs(); GfsReset.Result result = Gfs.reset(gfs).revision(revision.getName()).execute(); assertTrue(result.isSuccessful()); assertEquals(revision.getTree(), gfs.getFileStore().getRoot().getObjectId(false)); } @Test public void resetWithSoftOption_fileSystemRootTreeShouldNotBeChanged() throws IOException { writeSomethingToCache(); RevCommit revision = commit(); writeSomethingToGfs(); ObjectId before = gfs.getFileStore().getRoot().getObjectId(false); GfsReset.Result result = Gfs.reset(gfs).revision(revision.getName()).soft(true).execute(); ObjectId after = gfs.getFileStore().getRoot().getObjectId(false); assertTrue(result.isSuccessful()); assertEquals(before, after); } @Test public void resetToRevisionWhenThereAreLocalChanges_branchHeadShouldBecomeTheSpecifiedRevision() throws IOException { writeSomethingToCache(); ObjectId expected = commit(); writeSomethingToGfs(); GfsReset.Result result = Gfs.reset(gfs).revision(expected.getName()).execute(); assertTrue(result.isSuccessful()); assertFalse(status.isDirty()); assertEquals(expected, status.commit()); assertEquals(expected, BranchUtils.getHeadCommit(status.branch(), repo)); } @Test public void resetWithSoftOptionWhenThereAreLocalChanges_branchHeadShouldBecomeTheSpecifiedRevision() throws IOException { writeSomethingToCache(); ObjectId expected = commit(); writeSomethingToGfs(); GfsReset.Result result = Gfs.reset(gfs).revision(expected.getName()).soft(true).execute(); assertTrue(result.isSuccessful()); assertEquals(expected, status.commit()); assertEquals(expected, BranchUtils.getHeadCommit(status.branch(), repo)); } @Test public void resetWithSoftOptionWhenThereAreLocalChanges_localChangeShouldBeKept() throws IOException { writeSomethingToCache(); ObjectId expected = commit(); writeToGfs("/test_file.txt"); GfsReset.Result result = Gfs.reset(gfs).revision(expected.getName()).soft(true).execute(); assertTrue(result.isSuccessful()); assertTrue(Files.exists(gfs.getPath("/test_file.txt"))); assertTrue(status.isDirty()); } @Test public void resetWithHardOptionWhenThereIsMerge_mergeNoteShouldBeCleared() throws IOException { writeSomethingToCache(); commitToBranch("some_branch"); Gfs.merge(gfs).source("some_branch").commit(false).execute(); GfsReset.Result result = Gfs.reset(gfs).hard(true).execute(); assertTrue(result.isSuccessful()); assertNull(status.mergeNote()); } }