github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/appdef/impl_odoc_test.go (about)

     1  /*
     2   * Copyright (c) 2023-present Sigma-Soft, Ltd.
     3   * @author: Nikolay Nikitin
     4   */
     5  
     6  package appdef
     7  
     8  import (
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func Test_AppDef_AddODoc(t *testing.T) {
    15  	require := require.New(t)
    16  
    17  	docName, recName := NewQName("test", "doc"), NewQName("test", "rec")
    18  
    19  	var app IAppDef
    20  
    21  	t.Run("must be ok to add document", func(t *testing.T) {
    22  		adb := New()
    23  		adb.AddPackage("test", "test.com/test")
    24  
    25  		doc := adb.AddODoc(docName)
    26  		doc.
    27  			AddField("f1", DataKind_int64, true).
    28  			AddField("f2", DataKind_string, false)
    29  		doc.AddContainer("rec", recName, 0, Occurs_Unbounded)
    30  		rec := adb.AddORecord(recName)
    31  		rec.
    32  			AddField("f1", DataKind_int64, true).
    33  			AddField("f2", DataKind_string, false)
    34  
    35  		a, err := adb.Build()
    36  		require.NoError(err)
    37  
    38  		app = a
    39  	})
    40  
    41  	t.Run("must be ok to find builded doc", func(t *testing.T) {
    42  		typ := app.Type(docName)
    43  		require.Equal(TypeKind_ODoc, typ.Kind())
    44  
    45  		doc := app.ODoc(docName)
    46  		require.Equal(TypeKind_ODoc, doc.Kind())
    47  		require.Equal(typ.(IODoc), doc)
    48  		require.NotPanics(func() { doc.isODoc() })
    49  
    50  		require.Equal(2, doc.UserFieldCount())
    51  		require.Equal(DataKind_int64, doc.Field("f1").DataKind())
    52  
    53  		require.Equal(TypeKind_ORecord, doc.Container("rec").Type().Kind())
    54  
    55  		t.Run("must be ok to find builded record", func(t *testing.T) {
    56  			typ := app.Type(recName)
    57  			require.Equal(TypeKind_ORecord, typ.Kind())
    58  
    59  			rec := app.ORecord(recName)
    60  			require.Equal(TypeKind_ORecord, rec.Kind())
    61  			require.Equal(typ.(IORecord), rec)
    62  			require.NotPanics(func() { rec.isORecord() })
    63  
    64  			require.Equal(2, rec.UserFieldCount())
    65  			require.Equal(DataKind_int64, rec.Field("f1").DataKind())
    66  
    67  			require.Equal(0, rec.ContainerCount())
    68  		})
    69  	})
    70  
    71  	t.Run("must be ok to enumerate docs", func(t *testing.T) {
    72  		var docs []QName
    73  		app.ODocs(func(doc IODoc) {
    74  			docs = append(docs, doc.QName())
    75  		})
    76  		require.Len(docs, 1)
    77  		require.Equal(docName, docs[0])
    78  		t.Run("must be ok to enumerate recs", func(t *testing.T) {
    79  			var recs []QName
    80  			app.ORecords(func(rec IORecord) {
    81  				recs = append(recs, rec.QName())
    82  			})
    83  			require.Len(recs, 1)
    84  			require.Equal(recName, recs[0])
    85  		})
    86  	})
    87  }