#include "clar_libgit2.h"
#include "repository.h"
#include "repo_helpers.h"
#include "posix.h"

static git_repository *repo;
static git_tree *tree;

void test_repo_headtree__initialize(void)
{
	repo = cl_git_sandbox_init("testrepo.git");
	tree = NULL;
}

void test_repo_headtree__cleanup(void)
{
	git_tree_free(tree);
	cl_git_sandbox_cleanup();
}

void test_repo_headtree__can_retrieve_the_root_tree_from_a_detached_head(void)
{
	cl_git_pass(git_repository_detach_head(repo));

	cl_git_pass(git_repository_head_tree(&tree, repo));

	cl_assert(git_oid_streq(git_tree_id(tree), "az"));
}

void test_repo_headtree__can_retrieve_the_root_tree_from_a_non_detached_head(void)
{
	cl_assert_equal_i(false, git_repository_head_detached(repo));

	cl_git_pass(git_repository_head_tree(&tree, repo));

	cl_assert(git_oid_streq(git_tree_id(tree), "az"));
}

void test_repo_headtree__when_head_is_unborn_returns_EUNBORNBRANCH(void)
{
	make_head_unborn(repo, NON_EXISTING_HEAD);

	cl_assert_equal_i(true, git_repository_head_unborn(repo));

	cl_assert_equal_i(GIT_EUNBORNBRANCH, git_repository_head_tree(&tree, repo));
}

void test_repo_headtree__when_head_is_missing_returns_ENOTFOUND(void)
{
	delete_head(repo);

	cl_assert_equal_i(GIT_ENOTFOUND, git_repository_head_tree(&tree, repo));
}
