package config

import (
	"testing"

	"github.com/go-test/deep"
)

func TestParse(t *testing.T) {
	for _, test := range []struct {
		name string
		data string
		want *configToml
	}{
		{
			name: "normal config",
			data: `
				default_index = ["foo.md", "bar.md"]
				[template.default]
				sources = ["hackdoc/bar.html", "hackdoc/baz.html"]
				[template.foo]
				sources = ["foo/bar.html", "foo/baz.html"]
			`,
			want: &configToml{
				DefaultIndex: []string{"foo.md", "bar.md"},
				Templates: map[string]*configTomlTemplate{
					"default": &configTomlTemplate{
						Sources: []string{"hackdoc/bar.html", "hackdoc/baz.html"},
					},
					"foo": &configTomlTemplate{
						Sources: []string{"foo/bar.html", "foo/baz.html"},
					},
				},
			},
		}, {
			name: "empty config",
			data: "",
			want: &configToml{
				DefaultIndex: nil,
				Templates:    map[string]*configTomlTemplate{},
			},
		},
	} {
		t.Run(test.name, func(t *testing.T) {
			got, err := parseToml([]byte(test.data))
			if err != nil {
				t.Fatalf("could not parse config: %w", err)
			}
			if diff := deep.Equal(test.want, got); diff != nil {
				t.Fatal(diff)
			}
		})
	}
}

func TestLocations(t *testing.T) {
	for _, test := range []struct {
		name string
		path string
		want []string
	}{
		{
			name: "perforce-style path",
			path: "//foo/bar/baz",
			want: []string{"//hackdoc.toml", "//foo/hackdoc.toml", "//foo/bar/hackdoc.toml", "//foo/bar/baz/hackdoc.toml"},
		}, {
			name: "unix-style path",
			path: "/foo/bar/baz",
			want: []string{"/hackdoc.toml", "/foo/hackdoc.toml", "/foo/bar/hackdoc.toml", "/foo/bar/baz/hackdoc.toml"},
		}, {
			name: "relative-style path",
			path: "foo/bar/baz",
			want: []string{"hackdoc.toml", "foo/hackdoc.toml", "foo/bar/hackdoc.toml", "foo/bar/baz/hackdoc.toml"},
		}, {
			name: "root perforce-style path",
			path: "//",
			want: []string{"//hackdoc.toml"},
		}, {
			name: "root unix-style path",
			path: "/",
			want: []string{"/hackdoc.toml"},
		}, {
			name: "empty path",
			path: "",
			want: []string{"hackdoc.toml"},
		}, {
			name: "weird path",
			path: "///what/is///this///",
			want: nil,
		},
	} {
		t.Run(test.name, func(t *testing.T) {
			got := configFileLocations(test.path)
			if diff := deep.Equal(test.want, got); diff != nil {
				t.Fatal(diff)
			}
		})
	}
}
