package stargate

import (
	"testing"

	. "github.com/pingcap/check"
	"github.com/pingcap/wormhole/pkg/whpb"
)

func TestClient(t *testing.T) {
	TestingT(t)
}

var _ = Suite(&testDmlSuite{})

type testDmlSuite struct{}

func (t *testDmlSuite) TestGenColumnPlaceholders(c *C) {
	c.Assert(genColumnPlaceholders(3), Equals, "(?,?,?)")
}

func (t *testDmlSuite) TestGenColumnList(c *C) {
	table := testGenTable("normal")
	c.Assert(genColumnList(table.Columns), Equals, "`ID`,`NAME`,`AGE`")
}

func (t *testDmlSuite) TestGenKVs(c *C) {
	table := testGenTable("normal")
	c.Assert(genKVs(table.Columns), Equals, "`ID` = ?, `NAME` = ?, `AGE` = ?")
}

func (t *testDmlSuite) TestGenWhere(c *C) {
	table := testGenTable("normal")
	where := genWhere(table.Columns, []interface{}{1, "test", nil})
	c.Assert(where, Equals, "`ID` = ? AND `NAME` = ? AND `AGE` IS ?")
}

func (t *testDmlSuite) TestGenKeyColumns(c *C) {
	table := testGenTable("normal")
	keyCols := genKeyColumns(table.Columns)
	c.Assert(len(keyCols), Equals, 1)
}

func testGenTable(tt string) *whpb.DMLData {
	t := &whpb.DMLData{}
	userIDCol := &whpb.Column{
		Idx:   1,
		Name:  "ID",
		IsKey: true,
		Type:  1,
	}
	userNameCol := &whpb.Column{
		Idx:   2,
		Name:  "NAME",
		IsKey: false,
		Type:  2,
	}
	userAgeCol := &whpb.Column{
		Idx:   3,
		Name:  "AGE",
		IsKey: false,
		Type:  3,
	}
	t.Columns = []*whpb.Column{userIDCol, userNameCol, userAgeCol}
	return t
}
