package repo

import (
	"os"
	"testing"

	"github.com/go-gorp/gorp"

	"github.com/coreos/dex/connector"
	"github.com/coreos/dex/db"
)

func newConnectorConfigRepo(t *testing.T, configs []connector.ConnectorConfig) connector.ConnectorConfigRepo {
	var dbMap *gorp.DbMap
	if os.Getenv("DEX_TEST_DSN") == "" {
		dbMap = db.NewMemDB()
	} else {
		dbMap = connect(t)
	}
	repo := db.NewConnectorConfigRepo(dbMap)
	if err := repo.Set(configs); err != nil {
		t.Fatalf("Unable to set connector configs: %v", err)
	}
	return repo
}

func TestConnectorConfigRepoGetByID(t *testing.T) {
	tests := []struct {
		cfgs []connector.ConnectorConfig
		id   string
		err  error
	}{
		{
			cfgs: []connector.ConnectorConfig{
				&connector.LocalConnectorConfig{ID: "local"},
			},
			id: "local",
		},
		{
			cfgs: []connector.ConnectorConfig{
				&connector.LocalConnectorConfig{ID: "local1"},
				&connector.LocalConnectorConfig{ID: "local2"},
			},
			id: "local2",
		},
		{
			cfgs: []connector.ConnectorConfig{
				&connector.LocalConnectorConfig{ID: "local1"},
				&connector.LocalConnectorConfig{ID: "local2"},
			},
			id:  "foo",
			err: connector.ErrorNotFound,
		},
	}

	for i, tt := range tests {
		repo := newConnectorConfigRepo(t, tt.cfgs)
		if _, err := repo.GetConnectorByID(nil, tt.id); err != tt.err {
			t.Errorf("case %d: want=%v, got=%v", i, tt.err, err)
		}
	}
}