package com.beijunyi.parallelgit.utils;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import com.beijunyi.parallelgit.AbstractParallelGitTest;
import org.eclipse.jgit.revwalk.RevCommit;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class CommitUtilsGetFileRevisionsTest extends AbstractParallelGitTest {
@Before
public void setUp() throws IOException {
initRepository();
}
@Test
public void getFileRevisions_shouldReturnTheCommitsWhereTheSpecifiedFileIsChanged() throws IOException {
writeSomethingToCache();
commitToBranch("test_branch");
writeToCache("/test_file.txt");
RevCommit commit2 = commitToBranch("test_branch");
updateFile("/test_file.txt", "some new text data");
RevCommit commit3 = commitToBranch("test_branch");
writeSomethingToCache();
commitToBranch("test_branch");
List<RevCommit> expected = Arrays.asList(commit3, commit2);
List<RevCommit> actual = CommitUtils.getFileRevisions("/test_file.txt", "test_branch", repo);
assertEquals(expected, actual);
}
@Test
public void getFileRevisionsWhenFileIsNeverChanged_shouldReturnTheCommitWhereTheSpecifiedFileIsCreated() throws IOException {
writeSomethingToCache();
commitToBranch("test_branch");
writeToCache("/test_file.txt");
RevCommit commit = commitToBranch("test_branch");
writeSomethingToCache();
commitToBranch("test_branch");
List<RevCommit> revisions = CommitUtils.getFileRevisions("/test_file.txt", "test_branch", repo);
assertEquals(1, revisions.size());
assertEquals(commit, revisions.get(0));
}
@Test
public void getFileRevisionsWhenFileNeverExisted_shouldReturnEmptyList() throws IOException {
writeSomethingToCache();
commitToBranch("test_branch");
List<RevCommit> revisions = CommitUtils.getFileRevisions("/non_existent_file.txt", "test_branch", repo);
assertTrue(revisions.isEmpty());
}
@Test
public void getFileRevisionsWhenBranchDoesNotExist_shouldReturnEmptyList() throws IOException {
List<RevCommit> revisions = CommitUtils.getFileRevisions("/non_existent_file.txt", "non_existent_branch", repo);
assertTrue(revisions.isEmpty());
}
@Test
public void getLatestFileRevision_shouldReturnTheLatestCommitThatChangedTheSpecificFile() throws IOException {
writeSomethingToCache();
commitToBranch("test_branch");
writeToCache("/test_file.txt");
commitToBranch("test_branch");
updateFile("/test_file.txt", "some new text data");
RevCommit expected = commitToBranch("test_branch");
writeSomethingToCache();
commitToBranch("test_branch");
RevCommit actual = CommitUtils.getLatestFileRevision("/test_file.txt", "test_branch", repo);
assertEquals(expected, actual);
}
@Test
public void getLatestFileRevisionWhenFileNeverExisted_shouldReturnNull() throws IOException {
writeSomethingToCache();
commitToBranch("test_branch");
assertNull(CommitUtils.getLatestFileRevision("/non_existent_file.txt", "test_branch", repo));
}
@Test
public void getLatestFileRevisionWhenBranchDoesNotExist_shouldReturnNull() throws IOException {
assertNull(CommitUtils.getLatestFileRevision("/non_existent_file.txt", "non_existent_branch", repo));
}
}