ast_expr_test.go 1.9 KB
package domain

import (
	"github.com/linmadan/egglib-go/utils/json"
	"github.com/stretchr/testify/assert"
	"testing"
)

func TestAstExprUnmarshalJSON(t *testing.T) {
	inputs := []struct {
		data ExprAST
	}{
		{
			data: &FunCallerExprAST{
				Name:     "if",
				ExprType: TypeFunCallerExprAST,
				Args: []ExprAST{
					&BinaryExprAST{
						ExprType: TypeBinaryExprAST,
						Op:       "<",
						Lhs: &FieldExprAST{
							ExprType: TypeFieldExprAST,
							Str:      "table.count",
						},
						Rhs: &FieldExprAST{
							ExprType: TypeFieldExprAST,
							Str:      "100",
						},
					},
					&FieldExprAST{
						ExprType: TypeFieldExprAST,
						Str:      "200",
					},
					&FieldExprAST{
						ExprType: TypeFieldExprAST,
						Str:      "300",
					},
				},
			},
		},
		{
			data: &FunCallerExprAST{
				Name:     "sum",
				ExprType: TypeFunCallerExprAST,
				Args: []ExprAST{
					&BinaryExprAST{
						ExprType: TypeBinaryExprAST,
						Op:       "/",
						Lhs: &ValueExprAST{
							ExprType: TypeValueExprAST,
							Str:      "1",
						},
						Rhs: &FunCallerExprAST{
							ExprType: TypeFunCallerExprAST,
							Name:     "countifs",
							Args: []ExprAST{
								&FieldExprAST{
									ExprType: TypeFieldExprAST,
									Str:      "业绩1",
									Field: &TableField{
										TableId:      1,
										TableName:    "测试ABC",
										TableSqlName: "table_abc_test",
										FieldName:    "业绩",
										FieldSqlName: "ye_ji_1",
										FieldSQLType: "Float",
									},
								},
								&ValueExprAST{
									ExprType: TypeValueExprAST,
									Str:      "业绩2",
								},
							},
						},
					},
				},
			},
		},
	}

	for _, input := range inputs {
		data, err := json.Marshal(input.data)
		if err != nil {
			t.Fatal(err)
		}
		v, err := AstExprUnmarshalJSON(data)
		if err != nil {
			t.Fatal(err)
		}
		if v != nil {

		}
		assert.Equal(t, input.data, v)
	}
}