From 3c849fc692e8b63478c36aa7c666eb2b28b2d1e8 Mon Sep 17 00:00:00 2001 From: Danis Kirasirov <dbgbbu@gmail.com> Date: Fri, 2 Feb 2024 14:26:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9=20File,=20Reference?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/expr/expr_test.go | 2 +- pkg/expr/mongo_test.go | 33 +------------------------ pkg/files/file_test.go | 34 ++++++++++++++++++++++++++ pkg/references/reference_test.go | 41 ++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 33 deletions(-) create mode 100644 pkg/references/reference_test.go diff --git a/pkg/expr/expr_test.go b/pkg/expr/expr_test.go index 14bab92f..35153da2 100644 --- a/pkg/expr/expr_test.go +++ b/pkg/expr/expr_test.go @@ -62,7 +62,7 @@ func (s *testEnvStruct) Equal(other *testEnvStruct) bool { return s.ID == other.ID } -func TestEval_StructInEnv(t *testing.T) { +func TestExpr_Example(t *testing.T) { ctx := context.Background() tests := []struct { diff --git a/pkg/expr/mongo_test.go b/pkg/expr/mongo_test.go index 7f020faa..8fb87de5 100644 --- a/pkg/expr/mongo_test.go +++ b/pkg/expr/mongo_test.go @@ -55,6 +55,7 @@ func TestConvertToMongo(t *testing.T) { {"in", "In(s, [1,2,3])", nil, bson.M{"s": bson.M{"$in": []interface{}{1, 2, 3}}}, false}, {"in", "In(s, 1)", nil, bson.M{"s": bson.M{"$in": []interface{}{1}}}, false}, {"text search or id", "id", nil, nil, true}, + {"struct env", "db_item.id == env_item.id", map[string]interface{}{"env_item": &testEnvStruct{ID: "id1"}}, bson.M{"db_item.id": "id1"}, true}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -69,38 +70,6 @@ func TestConvertToMongo(t *testing.T) { } } -func TestConvertToMongo_StructInEnv(t *testing.T) { - ctx := context.Background() - - tests := []struct { - name string - exp string - env map[string]interface{} - wantErr bool - wantResult interface{} - }{ - { - name: "get field", - exp: "db_item.id == env_item.id", - env: map[string]interface{}{"env_item": &testEnvStruct{ID: "id1"}}, - wantResult: bson.M{"db_item.id": "id1"}, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := ConvertToMongo(ctx, tt.exp, tt.env, nil) - if tt.wantErr { - require.Error(t, err) - return - } - - require.NoError(t, err) - require.Equal(t, tt.wantResult, result) - }) - } -} - func BenchmarkConvertToMongo(b *testing.B) { const idsNum = 1_000_000 ctx := context.Background() diff --git a/pkg/files/file_test.go b/pkg/files/file_test.go index 14fb89ce..617bed4c 100644 --- a/pkg/files/file_test.go +++ b/pkg/files/file_test.go @@ -1,9 +1,11 @@ package files import ( + "context" "testing" "text/template" + "git.perx.ru/perxis/perxis-go/pkg/expr" "github.com/stretchr/testify/require" ) @@ -55,3 +57,35 @@ func TestFile_SetURLWithTemplate(t *testing.T) { }) } } + +func TestFile_InExpr(t *testing.T) { + ctx := context.Background() + + tests := []struct { + exp string + env map[string]interface{} + wantResult interface{} + wantErr bool + }{ + {"f.id", map[string]interface{}{"f": &File{ID: "some_id"}}, "some_id", false}, + {"f.name", map[string]interface{}{"f": &File{Name: "some_name"}}, "some_name", false}, + {"f.size", map[string]interface{}{"f": &File{Size: 1}}, 1, false}, + {"f.mime_type", map[string]interface{}{"f": &File{MimeType: "some_mime_type"}}, "some_mime_type", false}, + {"f.url", map[string]interface{}{"f": &File{URL: "some_url"}}, "some_url", false}, + {"f.key", map[string]interface{}{"f": &File{Key: "some_key"}}, "some_key", false}, + {"f.not_exists", map[string]interface{}{"f": &File{}}, "", true}, + } + + for _, tt := range tests { + t.Run(tt.exp, func(t *testing.T) { + result, err := expr.Eval(ctx, tt.exp, tt.env) + if tt.wantErr { + require.Error(t, err) + return + } + + require.NoError(t, err) + require.Equal(t, tt.wantResult, result) + }) + } +} diff --git a/pkg/references/reference_test.go b/pkg/references/reference_test.go new file mode 100644 index 00000000..5e79de47 --- /dev/null +++ b/pkg/references/reference_test.go @@ -0,0 +1,41 @@ +package references + +import ( + "context" + "testing" + + "git.perx.ru/perxis/perxis-go/pkg/expr" + "github.com/stretchr/testify/require" +) + +func TestReference_InExpr(t *testing.T) { + ctx := context.Background() + + tests := []struct { + exp string + env map[string]interface{} + wantResult interface{} + wantErr bool + }{ + {"r.id", map[string]interface{}{"r": &Reference{ID: "some_id"}}, "some_id", false}, + {"r.collection_id", map[string]interface{}{"r": &Reference{CollectionID: "some_coll_id"}}, "some_coll_id", false}, + {"r.disabled", map[string]interface{}{"r": &Reference{Disabled: true}}, true, false}, + {"r.String()", map[string]interface{}{"r": &Reference{ID: "id", CollectionID: "collID"}}, "collID.id", false}, + {"r1.Equal(r2)", map[string]interface{}{"r1": &Reference{"id", "collID", false}, "r2": &Reference{"id", "collID", false}}, true, false}, + {"r.IsValid()", map[string]interface{}{"r": &Reference{}}, false, false}, + {"r.not_exists", map[string]interface{}{"r": &Reference{}}, false, true}, + } + + for _, tt := range tests { + t.Run(tt.exp, func(t *testing.T) { + result, err := expr.Eval(ctx, tt.exp, tt.env) + if tt.wantErr { + require.Error(t, err) + return + } + + require.NoError(t, err) + require.Equal(t, tt.wantResult, result) + }) + } +} -- GitLab