github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/istructsmem/internal/descr/impl_view_test.go (about) 1 /* 2 * Copyright (c) 2021-present Sigma-Soft, Ltd. 3 * @author: Nikolay Nikitin 4 */ 5 6 package descr 7 8 import ( 9 "encoding/json" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 14 "github.com/voedger/voedger/pkg/appdef" 15 ) 16 17 func Test_View(t *testing.T) { 18 19 var app appdef.IAppDef 20 viewName := appdef.NewQName("test", "view") 21 22 // prepare AppDef with view 23 { 24 adb := appdef.New() 25 adb.AddPackage("test", "test.com/test") 26 27 docName := appdef.NewQName("test", "doc") 28 _ = adb.AddCDoc(docName) 29 30 view := adb.AddView(viewName) 31 view.SetComment("view comment") 32 view.Key().PartKey(). 33 AddField("pk_int", appdef.DataKind_int64). 34 AddRefField("pk_ref", docName) 35 view.Key().ClustCols(). 36 AddField("cc_int", appdef.DataKind_int64). 37 AddRefField("cc_ref", docName). 38 AddField("cc_name", appdef.DataKind_string, appdef.MaxLen(100)) 39 view.Value(). 40 AddField("vv_int", appdef.DataKind_int64, true). 41 AddRefField("vv_ref", true, docName). 42 AddField("vv_code", appdef.DataKind_string, false, appdef.MaxLen(10), appdef.Pattern(`^\w+$`)). 43 AddField("vv_data", appdef.DataKind_bytes, false, appdef.MaxLen(1024)).SetFieldComment("vv_data", "One kilobyte of data") 44 if a, err := adb.Build(); err == nil { 45 app = a 46 } else { 47 panic(err) 48 } 49 } 50 51 { 52 v := newView() 53 v.read(app.View(viewName)) 54 55 json, err := json.Marshal(v) 56 57 require := require.New(t) 58 require.NoError(err) 59 60 // os.WriteFile("C://temp//view_test.json", json, 0644) 61 62 const expected = `{ 63 "Comment": "view comment", 64 "Key": { 65 "Partition": [ 66 { 67 "Name": "pk_int", 68 "Data": "sys.int64", 69 "Required": true 70 }, 71 { 72 "Name": "pk_ref", 73 "Data": "sys.RecordID", 74 "Required": true, 75 "Refs": [ 76 "test.doc" 77 ] 78 } 79 ], 80 "ClustCols": [ 81 { 82 "Name": "cc_int", 83 "Data": "sys.int64" 84 }, 85 { 86 "Name": "cc_ref", 87 "Data": "sys.RecordID", 88 "Refs": [ 89 "test.doc" 90 ] 91 }, 92 { 93 "Name": "cc_name", 94 "DataType": { 95 "Ancestor": "sys.string", 96 "Constraints": { 97 "MaxLen": 100 98 } 99 } 100 } 101 ] 102 }, 103 "Value": [ 104 { 105 "Name": "sys.QName", 106 "Data": "sys.QName", 107 "Required": true 108 }, 109 { 110 "Name": "vv_int", 111 "Data": "sys.int64", 112 "Required": true 113 }, 114 { 115 "Name": "vv_ref", 116 "Data": "sys.RecordID", 117 "Required": true, 118 "Refs": [ 119 "test.doc" 120 ] 121 }, 122 { 123 "Name": "vv_code", 124 "DataType": { 125 "Ancestor": "sys.string", 126 "Constraints": { 127 "MaxLen": 10, 128 "Pattern": "^\\w+$" 129 } 130 } 131 }, 132 { 133 "Comment": "One kilobyte of data", 134 "Name": "vv_data", 135 "DataType": { 136 "Ancestor": "sys.bytes", 137 "Constraints": { 138 "MaxLen": 1024 139 } 140 } 141 } 142 ] 143 }` 144 require.JSONEq(expected, string(json)) 145 } 146 }