package osutils

import (
	"gotest.tools/assert"
	"strings"
	"testing"
)

func TestFindInPathParents(t *testing.T) {
	start_path := "test_data/a/b/c"
	end_path := "test_data"

	var target_path, res string
	target_path = "hello.txt"

	// FindInPathParents finds test_data/a/b/hello.txt.
	res = FindInPathParents(target_path, start_path, end_path, PathExists)
	assert.Assert(t, strings.HasSuffix(res, "test_data/a/b/hello.txt"))
	// FindInPathParents finds test_data/a/b/hello.txt when given a filepath
	// as a starting path.

	full_path := "test_data/a/b/hello.txt"
	res = FindInPathParents(target_path, full_path, end_path, PathExists)
	assert.Assert(t, strings.HasSuffix(res, "test_data/a/b/hello.txt"))

	// FileInPathParents does not find test_data/a/b/hello.txt when passed
	// DirExists (which checks for directories)
	res = FindInPathParents(target_path, start_path, end_path, DirExists)
	assert.Equal(t, res, "")

	// FileInPathParents finds directory test_data/a/b/my_dir.
	target_path = "my_dir"
	res = FindInPathParents(target_path, start_path, end_path, DirExists)
	assert.Assert(t, strings.HasSuffix(res, "test_data/a/b/my_dir"))

	// FileInPathParents finds file goodbye.txt with path my_dir/goodbye.txt.
	target_path = "my_dir/goodbye.txt"
	res = FindInPathParents(target_path, start_path, end_path, PathExists)
	assert.Assert(t, strings.HasSuffix(res, "test_data/a/b/my_dir/goodbye.txt"))

	// FileInPathParents does not find file goodbye.txt because the path
	// does not exist off of any parent directory of start_path.
	target_path = "goodbye.txt"
	res = FindInPathParents(target_path, start_path, end_path, PathExists)
	assert.Equal(t, res, "")

	// FindInPathParents does not find foo.txt because it stops looking at
	// end_path.
	target_path = "foo.txt"
	res = FindInPathParents(target_path, start_path, end_path, PathExists)
	assert.Assert(t, strings.HasSuffix(res, "test_data/a/foo.txt"))
	res = FindInPathParents(target_path, start_path, "test_data/a/b", PathExists)
	assert.Equal(t, res, "")
}
