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  }