package com.beijunyi.parallelgit.utils;

import java.io.IOException;

import com.beijunyi.parallelgit.AbstractParallelGitTest;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.revwalk.RevTree;
import org.eclipse.jgit.treewalk.TreeWalk;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

public class TreeUtilsTest extends AbstractParallelGitTest {

  @Before
  public void setUp() throws Exception {
    initRepository();
  }

  @Test
  public void existsTest() throws IOException {
    writeToCache("a/b.txt");
    RevTree tree = commitToMaster().getTree();
    assertTrue(TreeUtils.exists("a", tree, repo));
    assertTrue(TreeUtils.exists("a/b.txt", tree, repo));
    assertFalse(TreeUtils.exists("a/b", tree, repo));
  }

  @Test
  public void getObjectIdTest() throws IOException {
    AnyObjectId objectId = writeToCache("a/b.txt");
    RevTree tree = commitToMaster().getTree();
    assertEquals(objectId, TreeUtils.getObjectId("a/b.txt", tree, repo));
  }

  @Test
  public void isDirectoryTest() throws IOException {
    writeToCache("a/b.txt");
    RevTree tree = commitToMaster().getTree();
    assertTrue(TreeUtils.isDirectory("a", tree, repo));
    assertFalse(TreeUtils.isDirectory("a/b.txt", tree, repo));
    assertFalse(TreeUtils.isDirectory("a/b", tree, repo));
  }

  private static void assertNextEntry(TreeWalk treeWalk, String path) throws IOException {
    assertTrue(treeWalk.next());
    assertEquals(path, treeWalk.getPathString());
  }

}