package gitindex

import (
	"io/ioutil"
	"net/url"
	"os"
	"path/filepath"
	"reflect"
	"testing"
)

func TestDeleteRepos(t *testing.T) {
	dir, err := ioutil.TempDir("", "")
	if err != nil {
		t.Fatalf("TempDir: %v", err)
	}
	defer os.RemoveAll(dir)

	if err := createSubmoduleRepo(dir); err != nil {
		t.Error("createSubmoduleRepo", err)
	}

	reposBefore, err := FindGitRepos(dir)
	if err != nil {
		t.Error("FindGitRepos", err)
	}

	gotBefore := map[string]struct{}{}
	for _, r := range reposBefore {
		p, err := filepath.Rel(dir, r)
		if err != nil {
			t.Fatalf("Relative: %v", err)
		}

		gotBefore[p] = struct{}{}
	}

	wantBefore := map[string]struct{}{
		"gerrit.googlesource.com/bdir.git":     {},
		"gerrit.googlesource.com/sub/bdir.git": {},
		"adir/.git":                            {},
		"bdir/.git":                            {},
		"gerrit.googlesource.com/adir.git":     {},
	}

	if !reflect.DeepEqual(gotBefore, wantBefore) {
		t.Fatalf("got %v want %v", gotBefore, wantBefore)
	}

	aURL, _ := url.Parse("http://gerrit.googlesource.com")
	aURL.Path = "sub"
	names := map[string]struct{}{
		"bdir/.git":                        {},
		"gerrit.googlesource.com/adir.git": {},
	}
	filter, _ := NewFilter("", "")

	err = DeleteRepos(dir, aURL, names, filter)
	if err != nil {
		t.Fatalf("DeleteRepos: %T", err)
	}
	reposAfter, err := FindGitRepos(dir)
	if err != nil {
		t.Error("FindGitRepos", err)
	}

	gotAfter := map[string]struct{}{}
	for _, r := range reposAfter {
		p, err := filepath.Rel(dir, r)
		if err != nil {
			t.Fatalf("Relative: %v", err)
		}

		gotAfter[p] = struct{}{}
	}
	wantAfter := map[string]struct{}{
		"gerrit.googlesource.com/bdir.git": {},
		"adir/.git":                        {},
		"bdir/.git":                        {},
		"gerrit.googlesource.com/adir.git": {}}

	if !reflect.DeepEqual(gotAfter, wantAfter) {
		t.Errorf("got %v want %v", gotAfter, wantAfter)
	}
}
