package validations_test

//import (
//	"log"
//	"testing"
//
//	"github.com/tidbcloud/metrics-server/pkg/gormutil/validations"
//	"github.com/stretchr/testify/assert"
//	"gopkg.in/DATA-DOG/go-sqlmock.v1"
//	"gorm.io/driver/mysql"
//	"gorm.io/gorm"
//)
//
//var db *gorm.DB
//
//type User struct {
//	gorm.Model
//	Name           string `valid:"required"`
//	Password       string `valid:"length(6|20)"`
//	SecurePassword string `valid:"numeric"`
//	Email          string `valid:"email"`
//	CompanyID      int
//	Company        Company
//	CreditCard     CreditCard
//	Addresses      []Address
//	Languages      []Language `gorm:"many2many:user_languages"`
//}
//
//type Company struct {
//	gorm.Model
//	Name string
//}
//
//type CreditCard struct {
//	gorm.Model
//	UserID int
//	Number string
//}
//
//type Address struct {
//	gorm.Model
//	UserID  int
//	Address string
//}
//
//type Language struct {
//	gorm.Model
//	Code string
//}
//
//func init() {
//	mockdb, _, err := sqlmock.New()
//	if err != nil {
//		log.Fatalf("can't create sqlmock: %s", err)
//	}
//
//	db, err = gorm.Open(mysql.New(mysql.Config{
//		Conn:                      mockdb,
//		SkipInitializeWithVersion: true,
//	}), nil)
//	if err != nil {
//		log.Fatal(err)
//	}
//	err = validations.RegisterCallbacks(db)
//	if err != nil {
//		log.Fatal(err)
//	}
//}
//
//func TestInvalid(t *testing.T) {
//	user := User{
//		Name: "hello",
//	}
//	result := db.Save(&user)
//	assert.EqualError(t, result.Error, "Password is the wrong length (should be 6~20 characters); Email is not a valid email address")
//
//	user.Password = "1234556"
//	result = db.Save(&user)
//	assert.EqualError(t, result.Error, "Email is not a valid email address")
//
//	user.Email = "xxxxxx"
//	result = db.Save(&user)
//	assert.EqualError(t, result.Error, "Email is not a valid email address")
//
//	user.Email = "abc@efg.com"
//	user.SecurePassword = "1sbdf"
//	result = db.Save(&user)
//	assert.EqualError(t, result.Error, "SecurePassword is not a number")
//
//	user.SecurePassword = "123456"
//	result = db.Save(&user)
//	// Error raised from sqlmock
//	assert.Contains(t, result.Error.Error(), "'INSERT INTO `users` (`created_at`,`")
//}
