package git

import "testing"

func TestBranchIterator(t *testing.T) {
	repo := createTestRepo(t)
	seedTestRepo(t, repo)

	i, err := repo.NewBranchIterator(BranchLocal)
	checkFatal(t, err)

	b, bt, err := i.Next()
	checkFatal(t, err)
	if name, _ := b.Name(); name != "master" {
		t.Fatalf("expected master")
	} else if bt != BranchLocal {
		t.Fatalf("expected BranchLocal, not %v", t)
	}
	b, bt, err = i.Next()
	if !IsErrorCode(err, ErrIterOver) {
		t.Fatal("expected iterover")
	}
}

func TestBranchIteratorEach(t *testing.T) {
	repo := createTestRepo(t)
	seedTestRepo(t, repo)

	i, err := repo.NewBranchIterator(BranchLocal)
	checkFatal(t, err)

	var names []string
	f := func(b *Branch, t BranchType) error {
		name, err := b.Name()
		if err != nil {
			return err
		}

		names = append(names, name)
		return nil
	}

	err = i.ForEach(f)
	if err != nil && !IsErrorCode(err, ErrIterOver) {
		t.Fatal(err)
	}

	if len(names) != 1 {
		t.Fatalf("expect 1 branch, but it was %d\n", len(names))
	}

	if names[0] != "master" {
		t.Fatalf("expect branch master, but it was %s\n", names[0])
	}
}
