github.com/systematiccaos/gorm@v1.22.6/schema/check_test.go (about)

     1  package schema_test
     2  
     3  import (
     4  	"reflect"
     5  	"sync"
     6  	"testing"
     7  
     8  	"github.com/systematiccaos/gorm/schema"
     9  )
    10  
    11  type UserCheck struct {
    12  	Name  string `gorm:"check:name_checker,name <> 'jinzhu'"`
    13  	Name2 string `gorm:"check:name <> 'jinzhu'"`
    14  	Name3 string `gorm:"check:,name <> 'jinzhu'"`
    15  }
    16  
    17  func TestParseCheck(t *testing.T) {
    18  	user, err := schema.Parse(&UserCheck{}, &sync.Map{}, schema.NamingStrategy{})
    19  	if err != nil {
    20  		t.Fatalf("failed to parse user check, got error %v", err)
    21  	}
    22  
    23  	results := map[string]schema.Check{
    24  		"name_checker": {
    25  			Name:       "name_checker",
    26  			Constraint: "name <> 'jinzhu'",
    27  		},
    28  		"chk_user_checks_name2": {
    29  			Name:       "chk_user_checks_name2",
    30  			Constraint: "name <> 'jinzhu'",
    31  		},
    32  		"chk_user_checks_name3": {
    33  			Name:       "chk_user_checks_name3",
    34  			Constraint: "name <> 'jinzhu'",
    35  		},
    36  	}
    37  
    38  	checks := user.ParseCheckConstraints()
    39  
    40  	for k, result := range results {
    41  		v, ok := checks[k]
    42  		if !ok {
    43  			t.Errorf("Failed to found check %v from parsed checks %+v", k, checks)
    44  		}
    45  
    46  		for _, name := range []string{"Name", "Constraint"} {
    47  			if reflect.ValueOf(result).FieldByName(name).Interface() != reflect.ValueOf(v).FieldByName(name).Interface() {
    48  				t.Errorf(
    49  					"check %v %v should equal, expects %v, got %v",
    50  					k, name, reflect.ValueOf(result).FieldByName(name).Interface(), reflect.ValueOf(v).FieldByName(name).Interface(),
    51  				)
    52  			}
    53  		}
    54  	}
    55  }