github.com/storacha/go-ucanto@v0.7.2/core/result/failure/datamodel/failure_test.go (about) 1 package datamodel 2 3 import ( 4 "testing" 5 6 "github.com/ipld/go-ipld-prime/node/basicnode" 7 "github.com/ipld/go-ipld-prime/printer" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestBind(t *testing.T) { 12 t.Run("all fields", func(t *testing.T) { 13 np := basicnode.Prototype.Any 14 nb := np.NewBuilder() 15 ma, err := nb.BeginMap(3) 16 require.NoError(t, err) 17 na, err := ma.AssembleEntry("name") 18 require.NoError(t, err) 19 err = na.AssignString("BigError") 20 require.NoError(t, err) 21 na, err = ma.AssembleEntry("message") 22 require.NoError(t, err) 23 err = na.AssignString("boom") 24 require.NoError(t, err) 25 na, err = ma.AssembleEntry("stack") 26 require.NoError(t, err) 27 err = na.AssignString("at xyz") 28 require.NoError(t, err) 29 err = ma.Finish() 30 require.NoError(t, err) 31 nd := nb.Build() 32 t.Log(printer.Sprint(nd)) 33 34 f := Bind(nd) 35 require.Equal(t, *f.Name, "BigError") 36 require.Equal(t, f.Message, "boom") 37 require.Equal(t, f.Error(), "boom") 38 require.Equal(t, *f.Stack, "at xyz") 39 }) 40 41 t.Run("missing name", func(t *testing.T) { 42 np := basicnode.Prototype.Any 43 nb := np.NewBuilder() 44 ma, err := nb.BeginMap(2) 45 require.NoError(t, err) 46 na, err := ma.AssembleEntry("message") 47 require.NoError(t, err) 48 err = na.AssignString("boom") 49 require.NoError(t, err) 50 na, err = ma.AssembleEntry("stack") 51 require.NoError(t, err) 52 err = na.AssignString("at xyz") 53 require.NoError(t, err) 54 err = ma.Finish() 55 require.NoError(t, err) 56 nd := nb.Build() 57 t.Log(printer.Sprint(nd)) 58 59 f := Bind(nd) 60 require.Nil(t, f.Name) 61 require.Equal(t, f.Message, "boom") 62 require.Equal(t, f.Error(), "boom") 63 require.Equal(t, *f.Stack, "at xyz") 64 }) 65 66 t.Run("non-string name", func(t *testing.T) { 67 np := basicnode.Prototype.Any 68 nb := np.NewBuilder() 69 ma, err := nb.BeginMap(3) 70 require.NoError(t, err) 71 na, err := ma.AssembleEntry("name") 72 require.NoError(t, err) 73 err = na.AssignInt(5) 74 require.NoError(t, err) 75 na, err = ma.AssembleEntry("message") 76 require.NoError(t, err) 77 err = na.AssignString("boom") 78 require.NoError(t, err) 79 na, err = ma.AssembleEntry("stack") 80 require.NoError(t, err) 81 err = na.AssignString("at xyz") 82 require.NoError(t, err) 83 err = ma.Finish() 84 require.NoError(t, err) 85 nd := nb.Build() 86 t.Log(printer.Sprint(nd)) 87 88 f := Bind(nd) 89 require.Nil(t, f.Name) 90 require.Equal(t, f.Message, "boom") 91 require.Equal(t, f.Error(), "boom") 92 require.Equal(t, *f.Stack, "at xyz") 93 }) 94 95 t.Run("missing message", func(t *testing.T) { 96 np := basicnode.Prototype.Any 97 nb := np.NewBuilder() 98 ma, err := nb.BeginMap(2) 99 require.NoError(t, err) 100 na, err := ma.AssembleEntry("name") 101 require.NoError(t, err) 102 err = na.AssignString("BigError") 103 require.NoError(t, err) 104 na, err = ma.AssembleEntry("stack") 105 require.NoError(t, err) 106 err = na.AssignString("at xyz") 107 require.NoError(t, err) 108 err = ma.Finish() 109 require.NoError(t, err) 110 nd := nb.Build() 111 t.Log(printer.Sprint(nd)) 112 113 f := Bind(nd) 114 require.Equal(t, *f.Name, "BigError") 115 require.Equal(t, f.Message, "") 116 require.Equal(t, f.Error(), "") 117 require.Equal(t, *f.Stack, "at xyz") 118 }) 119 120 t.Run("non-string message", func(t *testing.T) { 121 np := basicnode.Prototype.Any 122 nb := np.NewBuilder() 123 ma, err := nb.BeginMap(3) 124 require.NoError(t, err) 125 na, err := ma.AssembleEntry("name") 126 require.NoError(t, err) 127 err = na.AssignString("BigError") 128 require.NoError(t, err) 129 na, err = ma.AssembleEntry("message") 130 require.NoError(t, err) 131 err = na.AssignInt(5) 132 require.NoError(t, err) 133 na, err = ma.AssembleEntry("stack") 134 require.NoError(t, err) 135 err = na.AssignString("at xyz") 136 require.NoError(t, err) 137 err = ma.Finish() 138 require.NoError(t, err) 139 nd := nb.Build() 140 t.Log(printer.Sprint(nd)) 141 142 f := Bind(nd) 143 require.Equal(t, *f.Name, "BigError") 144 require.Equal(t, f.Message, "") 145 require.Equal(t, f.Error(), "") 146 require.Equal(t, *f.Stack, "at xyz") 147 }) 148 t.Run("missing stack", func(t *testing.T) { 149 np := basicnode.Prototype.Any 150 nb := np.NewBuilder() 151 ma, err := nb.BeginMap(2) 152 require.NoError(t, err) 153 na, err := ma.AssembleEntry("name") 154 require.NoError(t, err) 155 err = na.AssignString("BigError") 156 require.NoError(t, err) 157 na, err = ma.AssembleEntry("message") 158 require.NoError(t, err) 159 err = na.AssignString("boom") 160 require.NoError(t, err) 161 err = ma.Finish() 162 require.NoError(t, err) 163 nd := nb.Build() 164 t.Log(printer.Sprint(nd)) 165 166 f := Bind(nd) 167 require.Equal(t, *f.Name, "BigError") 168 require.Equal(t, f.Message, "boom") 169 require.Equal(t, f.Error(), "boom") 170 require.Nil(t, f.Stack) 171 }) 172 t.Run("non-string stack", func(t *testing.T) { 173 np := basicnode.Prototype.Any 174 nb := np.NewBuilder() 175 ma, err := nb.BeginMap(3) 176 require.NoError(t, err) 177 na, err := ma.AssembleEntry("name") 178 require.NoError(t, err) 179 err = na.AssignString("BigError") 180 require.NoError(t, err) 181 na, err = ma.AssembleEntry("message") 182 require.NoError(t, err) 183 err = na.AssignString("boom") 184 require.NoError(t, err) 185 na, err = ma.AssembleEntry("stack") 186 require.NoError(t, err) 187 err = na.AssignInt(5) 188 require.NoError(t, err) 189 err = ma.Finish() 190 require.NoError(t, err) 191 nd := nb.Build() 192 t.Log(printer.Sprint(nd)) 193 194 f := Bind(nd) 195 require.Equal(t, *f.Name, "BigError") 196 require.Equal(t, f.Message, "boom") 197 require.Equal(t, f.Error(), "boom") 198 require.Nil(t, f.Stack) 199 }) 200 t.Run("non map", func(t *testing.T) { 201 np := basicnode.Prototype.Any 202 nb := np.NewBuilder() 203 la, err := nb.BeginList(1) 204 require.NoError(t, err) 205 err = la.AssembleValue().AssignString("test") 206 require.NoError(t, err) 207 err = la.Finish() 208 require.NoError(t, err) 209 nd := nb.Build() 210 t.Log(printer.Sprint(nd)) 211 212 f := Bind(nd) 213 require.Nil(t, f.Name) 214 require.Equal(t, f.Message, "") 215 require.Equal(t, f.Error(), "") 216 require.Nil(t, f.Stack) 217 }) 218 }