code: package com.beijunyi.parallelgit.utils;
  
  import java.io.IOException;
  import java.util.List;
  
  import com.beijunyi.parallelgit.AbstractParallelGitTest;
  import com.beijunyi.parallelgit.utils.exceptions.NoSuchBranchException;
  import org.eclipse.jgit.lib.AnyObjectId;
  import org.eclipse.jgit.revwalk.RevCommit;
  import org.junit.Before;
  import org.junit.Test;
  
  import static org.junit.Assert.assertArrayEquals;
  
  public class BranchUtilsGetBranchHistoryTest extends AbstractParallelGitTest {
  
    @Before
    public void setupRepository() throws IOException {
      initRepository();
    }
  
    @Test
    public void getBranchHistory_shouldReturnAllCommitsStartedFromTheHeadCommit() throws IOException {
      String branch = "test_branch";
      AnyObjectId[] expected = new AnyObjectId[3];
      writeSomethingToCache();
      expected[2] = commitToBranch(branch);
      writeSomethingToCache();
      expected[1] = commitToBranch(branch, expected[2]);
      writeSomethingToCache();
      expected[0] = commitToBranch(branch, expected[1]);
      List<RevCommit> history = BranchUtils.getHistory(branch, repo);
      AnyObjectId[] actual = new AnyObjectId[3];
      history.toArray(actual);
      assertArrayEquals(expected, actual);
    }
  
    @Test(expected = NoSuchBranchException.class)
    public void getHistoryOfNonExistentBranch_shouldThrowNoSuchBranchException() throws IOException {
      String branch = "non_existent_branch";
      BranchUtils.getHistory(branch, repo);
    }
  
  }
  