github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/istructsmem/internal/dynobuf/provide_test.go (about) 1 /* 2 * Copyright (c) 2021-present Sigma-Soft, Ltd. 3 * @author: Nikolay Nikitin 4 */ 5 6 package dynobuf 7 8 import ( 9 "testing" 10 11 "github.com/stretchr/testify/require" 12 "github.com/untillpro/dynobuffers" 13 "github.com/voedger/voedger/pkg/appdef" 14 ) 15 16 func TestDynoBufSchemesBasicUsage(t *testing.T) { 17 docName := appdef.NewQName("test", "doc") 18 viewName := appdef.NewQName("test", "view") 19 20 schemes := New() 21 22 schemes.Prepare( 23 func() appdef.IAppDef { 24 app := appdef.New() 25 app.AddODoc(docName). 26 AddField("f1", appdef.DataKind_int32, true). 27 AddField("f2", appdef.DataKind_QName, false). 28 AddField("f3", appdef.DataKind_string, false). 29 AddField("f4", appdef.DataKind_bytes, false) 30 31 v := app.AddView(viewName) 32 v.Key().PartKey().AddField("pkF1", appdef.DataKind_int32) 33 v.Key().ClustCols().AddField("ccF1", appdef.DataKind_string, appdef.MaxLen(100)) 34 v.Value().AddField("valF1", appdef.DataKind_Event, true) 35 36 a, _ := app.Build() 37 return a 38 }()) 39 40 t.Run("let test basic methods", func(t *testing.T) { 41 require := require.New(t) 42 43 t.Run("document scheme", func(t *testing.T) { 44 scheme := schemes.Scheme(docName) 45 require.NotNil(scheme, "schemes.Scheme returns nil", "docName: %q", docName) 46 47 require.Len(scheme.Fields, 4) 48 49 require.Equal("f1", scheme.Fields[0].Name) 50 require.Equal(dynobuffers.FieldTypeInt32, scheme.Fields[0].Ft) 51 52 require.Equal("f2", scheme.Fields[1].Name) 53 require.Equal(dynobuffers.FieldTypeByte, scheme.Fields[1].Ft) 54 require.True(scheme.Fields[1].IsArray) 55 56 require.Equal("f3", scheme.Fields[2].Name) 57 require.Equal(dynobuffers.FieldTypeString, scheme.Fields[2].Ft) 58 59 require.Equal("f4", scheme.Fields[3].Name) 60 require.Equal(dynobuffers.FieldTypeByte, scheme.Fields[3].Ft) 61 require.True(scheme.Fields[1].IsArray) 62 }) 63 64 t.Run("view scheme", func(t *testing.T) { 65 66 t.Run("key scheme", func(t *testing.T) { 67 68 t.Run("part key scheme", func(t *testing.T) { 69 pk := schemes.ViewPartKeyScheme(viewName) 70 require.NotNil(pk, "schemes.ViewPartKeyScheme returns nil", "viewName: %q", viewName) 71 72 require.Len(pk.Fields, 1) 73 74 require.Equal("pkF1", pk.Fields[0].Name) 75 require.Equal(dynobuffers.FieldTypeInt32, pk.Fields[0].Ft) 76 }) 77 78 t.Run("ccols scheme", func(t *testing.T) { 79 ccols := schemes.ViewClustColsScheme(viewName) 80 require.NotNil(ccols, "schemes.ViewClustColsScheme returns nil", "viewName: %q", viewName) 81 82 require.Len(ccols.Fields, 1) 83 84 require.Equal("ccF1", ccols.Fields[0].Name) 85 require.Equal(dynobuffers.FieldTypeString, ccols.Fields[0].Ft) 86 }) 87 }) 88 89 t.Run("value scheme", func(t *testing.T) { 90 val := schemes.Scheme(viewName) 91 require.NotNil(val, "schemes.ViewValueScheme returns nil", "viewName: %q", viewName) 92 93 require.Len(val.Fields, 1) 94 95 require.Equal("valF1", val.Fields[0].Name) 96 require.Equal(dynobuffers.FieldTypeByte, val.Fields[0].Ft) 97 require.True(val.Fields[0].IsArray) 98 }) 99 }) 100 }) 101 }