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 }