#include "clar_libgit2.h"
#include "tag.h"

static git_repository *repo;
static git_tag *tag;
static git_object *target;

void test_object_tag_peel__initialize(void)
{
	cl_fixture_sandbox("testrepo.git");
	cl_git_pass(git_repository_open(&repo, "testrepo.git"));
}

void test_object_tag_peel__cleanup(void)
{
	git_tag_free(tag);
	tag = NULL;

	git_object_free(target);
	target = NULL;

	git_repository_free(repo);
	repo = NULL;

	cl_fixture_cleanup("testrepo.git");
}

static void retrieve_tag_from_oid(git_tag **tag_out, git_repository *repo, const char *sha)
{
	git_oid oid;
	
	cl_git_pass(git_oid_fromstr(&oid, sha));
	cl_git_pass(git_tag_lookup(tag_out, repo, &oid));
}

void test_object_tag_peel__can_peel_to_a_commit(void)
{
	retrieve_tag_from_oid(&tag, repo, "7b4384978d2493e851f9cca7858815fac9b10980");

	cl_git_pass(git_tag_peel(&target, tag));
	cl_assert(git_object_type(target) == GIT_OBJ_COMMIT);
	cl_git_pass(git_oid_streq(git_object_id(target), "e90810b8df3e80c413d903f631643c716887138d"));
}

void test_object_tag_peel__can_peel_several_nested_tags_to_a_commit(void)
{
	retrieve_tag_from_oid(&tag, repo, "b25fa35b38051e4ae45d4222e795f9df2e43f1d1");

	cl_git_pass(git_tag_peel(&target, tag));
	cl_assert(git_object_type(target) == GIT_OBJ_COMMIT);
	cl_git_pass(git_oid_streq(git_object_id(target), "e90810b8df3e80c413d903f631643c716887138d"));
}

void test_object_tag_peel__can_peel_to_a_non_commit(void)
{
	retrieve_tag_from_oid(&tag, repo, "521d87c1ec3aef9824daf6d96cc0ae3710766d91");

	cl_git_pass(git_tag_peel(&target, tag));
	cl_assert(git_object_type(target) == GIT_OBJ_BLOB);
	cl_git_pass(git_oid_streq(git_object_id(target), "1385f264afb75a56a5bec74243be9b367ba4ca08"));	
}
