package blockstore

import (
	"context"
	"testing"

	blocks "github.com/ipfs/go-block-format"
	"github.com/ipfs/go-cid"
	mh "github.com/multiformats/go-multihash"
	"github.com/stretchr/testify/require"
)

func TestMemGetCodec(t *testing.T) {
	ctx := context.Background()
	bs := NewMemory()

	cborArr := []byte{0x82, 1, 2}

	h, err := mh.Sum(cborArr, mh.SHA2_256, -1)
	require.NoError(t, err)

	rawCid := cid.NewCidV1(cid.Raw, h)
	rawBlk, err := blocks.NewBlockWithCid(cborArr, rawCid)
	require.NoError(t, err)

	err = bs.Put(ctx, rawBlk)
	require.NoError(t, err)

	cborCid := cid.NewCidV1(cid.DagCBOR, h)

	cborBlk, err := bs.Get(ctx, cborCid)
	require.NoError(t, err)

	require.Equal(t, cborCid.Prefix(), cborBlk.Cid().Prefix())
	require.EqualValues(t, cborArr, cborBlk.RawData())

	// was allocated
	require.NotEqual(t, cborBlk, rawBlk)

	gotRawBlk, err := bs.Get(ctx, rawCid)
	require.NoError(t, err)

	// not allocated
	require.Equal(t, rawBlk, gotRawBlk)
}