github.com/ipld/go-ipld-prime@v0.21.0/codec/dagjson/marshal_test.go (about)

     1  package dagjson
     2  
     3  import (
     4  	"testing"
     5  
     6  	qt "github.com/frankban/quicktest"
     7  	cid "github.com/ipfs/go-cid"
     8  	"github.com/ipld/go-ipld-prime"
     9  	"github.com/ipld/go-ipld-prime/datamodel"
    10  	"github.com/ipld/go-ipld-prime/fluent/qp"
    11  	cidlink "github.com/ipld/go-ipld-prime/linking/cid"
    12  	"github.com/ipld/go-ipld-prime/node/basicnode"
    13  )
    14  
    15  var link = cid.MustParse("bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi")
    16  
    17  func TestMarshalUndefCid(t *testing.T) {
    18  	node, err := qp.BuildMap(basicnode.Prototype.Any, -1, func(ma datamodel.MapAssembler) {
    19  		qp.MapEntry(ma, "UndefCid", qp.Link(cidlink.Link{Cid: cid.Undef}))
    20  		qp.MapEntry(ma, "DefCid", qp.Link(cidlink.Link{Cid: link}))
    21  	})
    22  	qt.Assert(t, err, qt.IsNil)
    23  	_, err = ipld.Encode(node, Encode)
    24  	qt.Assert(t, err, qt.ErrorMatches, "encoding undefined CIDs are not supported by this codec")
    25  }
    26  
    27  // mirrored in json but with errors
    28  func TestMarshalLinks(t *testing.T) {
    29  	linkNode := basicnode.NewLink(cidlink.Link{Cid: link})
    30  	mapNode, err := qp.BuildMap(basicnode.Prototype.Any, -1, func(ma datamodel.MapAssembler) {
    31  		qp.MapEntry(ma, "Lnk", qp.Node(linkNode))
    32  	})
    33  	qt.Assert(t, err, qt.IsNil)
    34  
    35  	t.Run("link dag-json", func(t *testing.T) {
    36  		byts, err := ipld.Encode(linkNode, Encode)
    37  		qt.Assert(t, err, qt.IsNil)
    38  		qt.Assert(t, string(byts), qt.Equals,
    39  			`{"/":"bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"}`)
    40  	})
    41  	t.Run("nested link dag-json", func(t *testing.T) {
    42  		byts, err := ipld.Encode(mapNode, Encode)
    43  		qt.Assert(t, err, qt.IsNil)
    44  		qt.Assert(t, string(byts), qt.Equals,
    45  			`{"Lnk":{"/":"bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"}}`)
    46  	})
    47  }
    48  
    49  // mirrored in json but with errors
    50  func TestMarshalBytes(t *testing.T) {
    51  	bytsNode := basicnode.NewBytes([]byte("byte me"))
    52  	mapNode, err := qp.BuildMap(basicnode.Prototype.Any, -1, func(ma datamodel.MapAssembler) {
    53  		qp.MapEntry(ma, "Byts", qp.Node(bytsNode))
    54  	})
    55  	qt.Assert(t, err, qt.IsNil)
    56  
    57  	t.Run("bytes dag-json", func(t *testing.T) {
    58  		byts, err := ipld.Encode(bytsNode, Encode)
    59  		qt.Assert(t, err, qt.IsNil)
    60  		qt.Assert(t, string(byts), qt.Equals,
    61  			`{"/":{"bytes":"Ynl0ZSBtZQ"}}`)
    62  	})
    63  	t.Run("nested bytes dag-json", func(t *testing.T) {
    64  		byts, err := ipld.Encode(mapNode, Encode)
    65  		qt.Assert(t, err, qt.IsNil)
    66  		qt.Assert(t, string(byts), qt.Equals,
    67  			`{"Byts":{"/":{"bytes":"Ynl0ZSBtZQ"}}}`)
    68  	})
    69  }