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  }