123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- package test
- import (
- "git.sxidc.com/go-framework/baize/framework/core/tag/sql/sql_result"
- "git.sxidc.com/go-tools/utils/encoding"
- "git.sxidc.com/go-tools/utils/strutils"
- "github.com/pkg/errors"
- "math/rand"
- "reflect"
- "strings"
- "testing"
- "time"
- )
- type SqlResultTagStruct struct {
- Ignore string `sqlresult:"-"`
- Column string `sqlresult:"column:test_column"`
- TimeLayout time.Time `sqlresult:"timeLayout:2006-01-02"`
- Aes string `sqlresult:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
- SplitWith []string `sqlresult:"splitWith:##"`
- Trim string `sqlresult:"trim:||"`
- TrimPrefix string `sqlresult:"trimPrefix:{{"`
- TrimSuffix string `sqlresult:"trimSuffix:}}"`
- WrongTimeLayout int `sqlresult:"timeLayout:2006-01-02"`
- WrongAes int `sqlresult:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
- WrongSplitWith int `sqlresult:"splitWith:##"`
- WrongTrim int `sqlresult:"trim:||"`
- WrongTrimPrefix int `sqlresult:"trimPrefix:{{"`
- WrongTrimSuffix int `sqlresult:"trimSuffix:}}"`
- }
- func (s SqlResultTagStruct) checkFields(t *testing.T, result map[string]any) {
- if len(result) != reflect.TypeOf(s).NumField()-1 {
- t.Fatalf("%+v\n", errors.Errorf("有字段没有被解析"))
- }
- for columnName, value := range result {
- if columnName == "ignore" {
- t.Fatalf("%+v\n", errors.Errorf("忽略字段没有被忽略"))
- }
- switch columnName {
- case "test_column":
- if s.Column != value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.Column, value))
- }
- case "time_layout":
- resultValue := value.(string)
- if s.TimeLayout.Format(time.DateOnly)+"T00:00:00" != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.TimeLayout.Format(time.DateOnly), resultValue))
- }
- case "aes":
- resultValue := value.(string)
- decrypted, err := encoding.AESDecrypt(resultValue, "@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L")
- if err != nil {
- t.Fatalf("%+v\n", errors.Errorf(err.Error()))
- }
- if s.Aes != decrypted {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.Aes, decrypted))
- }
- case "split_with":
- resultValue := value.(string)
- if strings.Join(s.SplitWith, "##") != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, strings.Join(s.SplitWith, "##"), resultValue))
- }
- case "trim":
- resultValue := value.(string)
- if s.Trim != strings.Trim(resultValue, "||") {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.Trim, strings.Trim(resultValue, "||")))
- }
- case "trim_prefix":
- resultValue := value.(string)
- if s.TrimPrefix != strings.TrimPrefix(resultValue, "{{") {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.TrimPrefix, strings.TrimPrefix(resultValue, "{{")))
- }
- case "trim_suffix":
- resultValue := value.(string)
- if s.TrimSuffix != strings.TrimSuffix(resultValue, "}}") {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.TrimSuffix, strings.TrimSuffix(resultValue, "}}")))
- }
- case "wrong_time_layout":
- resultValue := value.(int)
- if s.WrongTimeLayout != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongTimeLayout, resultValue))
- }
- case "wrong_aes":
- resultValue := value.(int)
- if s.WrongAes != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongAes, resultValue))
- }
- case "wrong_split_with":
- resultValue := value.(int)
- if s.WrongSplitWith != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongSplitWith, resultValue))
- }
- case "wrong_trim":
- resultValue := value.(int)
- if s.WrongTrim != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongTrim, resultValue))
- }
- case "wrong_trim_prefix":
- resultValue := value.(int)
- if s.WrongTrimPrefix != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongTrimPrefix, resultValue))
- }
- case "wrong_trim_suffix":
- resultValue := value.(int)
- if s.WrongTrimSuffix != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongTrimSuffix, resultValue))
- }
- default:
- t.Fatalf("%+v\n", errors.Errorf("未知的列: tag columnName: %v", columnName))
- }
- }
- }
- type SqlResultTagPointFieldsStruct struct {
- Ignore *string `sqlresult:"-"`
- Column *string `sqlresult:"column:test_column"`
- TimeLayout *time.Time `sqlresult:"timeLayout:2006-01-02"`
- Aes *string `sqlresult:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
- SplitWith *[]string `sqlresult:"splitWith:##"`
- Trim *string `sqlresult:"trim:||"`
- TrimPrefix *string `sqlresult:"trimPrefix:{{"`
- TrimSuffix *string `sqlresult:"trimSuffix:}}"`
- WrongTimeLayout *int `sqlresult:"timeLayout:2006-01-02"`
- WrongAes *int `sqlresult:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
- WrongSplitWith *int `sqlresult:"splitWith:##"`
- WrongTrim *int `sqlresult:"trim:||"`
- WrongTrimPrefix *int `sqlresult:"trimPrefix:{{"`
- WrongTrimSuffix *int `sqlresult:"trimSuffix:}}"`
- }
- func (s SqlResultTagPointFieldsStruct) checkFields(t *testing.T, result map[string]any) {
- if len(result) != reflect.TypeOf(s).NumField()-1 {
- t.Fatalf("%+v\n", errors.Errorf("有字段没有被解析"))
- }
- for columnName, value := range result {
- if columnName == "ignore" {
- t.Fatalf("%+v\n", errors.Errorf("忽略字段没有被忽略"))
- }
- switch columnName {
- case "test_column":
- if *s.Column != value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, *s.Column, value))
- }
- case "time_layout":
- resultValue := value.(string)
- if (*s.TimeLayout).Format(time.DateOnly)+"T00:00:00" != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, (*s.TimeLayout).Format(time.DateOnly), resultValue))
- }
- case "aes":
- resultValue := value.(string)
- decrypted, err := encoding.AESDecrypt(resultValue, "@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L")
- if err != nil {
- t.Fatalf("%+v\n", errors.Errorf(err.Error()))
- }
- if *s.Aes != decrypted {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, *s.Aes, decrypted))
- }
- case "split_with":
- resultValue := value.(string)
- if strings.Join(*s.SplitWith, "##") != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, strings.Join(*s.SplitWith, "##"), resultValue))
- }
- case "trim":
- resultValue := value.(string)
- if *s.Trim != strings.Trim(resultValue, "||") {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.Trim, strings.Trim(resultValue, "||")))
- }
- case "trim_prefix":
- resultValue := value.(string)
- if *s.TrimPrefix != strings.TrimPrefix(resultValue, "{{") {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.TrimPrefix, strings.TrimPrefix(resultValue, "{{")))
- }
- case "trim_suffix":
- resultValue := value.(string)
- if *s.TrimSuffix != strings.TrimSuffix(resultValue, "}}") {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.TrimSuffix, strings.TrimSuffix(resultValue, "}}")))
- }
- case "wrong_time_layout":
- resultValue := value.(int)
- if *s.WrongTimeLayout != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongTimeLayout, resultValue))
- }
- case "wrong_aes":
- resultValue := value.(int)
- if *s.WrongAes != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongAes, resultValue))
- }
- case "wrong_split_with":
- resultValue := value.(int)
- if *s.WrongSplitWith != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongSplitWith, resultValue))
- }
- case "wrong_trim":
- resultValue := value.(int)
- if *s.WrongTrim != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongTrim, resultValue))
- }
- case "wrong_trim_prefix":
- resultValue := value.(int)
- if *s.WrongTrimPrefix != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongTrimPrefix, resultValue))
- }
- case "wrong_trim_suffix":
- resultValue := value.(int)
- if *s.WrongTrimSuffix != resultValue {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
- columnName, s.WrongTrimSuffix, resultValue))
- }
- default:
- t.Fatalf("%+v\n", errors.Errorf("未知的列: tag columnName: %v", columnName))
- }
- }
- }
- func TestSqlResultTagDefaultUsage(t *testing.T) {
- aesEncrypted, err := encoding.AESEncrypt(strutils.SimpleUUID(), "@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L")
- if err != nil {
- t.Fatalf("%+v\n", errors.Errorf(err.Error()))
- }
- result := map[string]any{
- "test_column": strutils.SimpleUUID(),
- "time_layout": "2024-07-03T00:00:00",
- "aes": aesEncrypted,
- "split_with": strings.Join([]string{strutils.SimpleUUID(), strutils.SimpleUUID()}, "##"),
- "trim": "||" + strutils.SimpleUUID() + "||",
- "trim_prefix": "{{" + strutils.SimpleUUID(),
- "trim_suffix": strutils.SimpleUUID() + "}}",
- "wrong_time_layout": rand.Int(),
- "wrong_aes": rand.Int(),
- "wrong_split_with": rand.Int(),
- "wrong_trim": rand.Int(),
- "wrong_trim_prefix": rand.Int(),
- "wrong_trim_suffix": rand.Int(),
- }
- s := SqlResultTagStruct{}
- sPointerField := SqlResultTagPointFieldsStruct{}
- err = sql_result.DefaultUsage(result, s, "")
- if err == nil || err.Error() != "参数不是结构指针" {
- t.Fatalf("%+v\n", errors.Errorf("没有检测出参数必须是指针类型"))
- }
- err = sql_result.DefaultUsage(result, sPointerField, "")
- if err == nil || err.Error() != "参数不是结构指针" {
- t.Fatalf("%+v\n", errors.Errorf("没有检测出参数必须是指针类型"))
- }
- err = sql_result.DefaultUsage(result, &s, "")
- if err != nil {
- t.Fatalf("%+v\n", err)
- }
- s.checkFields(t, result)
- err = sql_result.DefaultUsage(result, &sPointerField, "")
- if err != nil {
- t.Fatalf("%+v\n", err)
- }
- sPointerField.checkFields(t, result)
- }
|