package meta_test

import (
	"testing"

	"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobovnicza"
	meta "github.com/nspcc-dev/neofs-node/pkg/local_object_storage/metabase"
	"github.com/stretchr/testify/require"
)

func TestDB_PutBlobovnicaUpdate(t *testing.T) {
	db := newDB(t)
	defer releaseDB(db)

	raw1 := generateRawObject(t)
	blobovniczaID := blobovnicza.ID{1, 2, 3, 4}

	// put one object with blobovniczaID
	err := meta.Put(db, raw1.Object(), &blobovniczaID)
	require.NoError(t, err)

	fetchedBlobovniczaID, err := meta.IsSmall(db, raw1.Object().Address())
	require.NoError(t, err)
	require.Equal(t, &blobovniczaID, fetchedBlobovniczaID)

	t.Run("update blobovniczaID", func(t *testing.T) {
		newID := blobovnicza.ID{5, 6, 7, 8}

		err := meta.Put(db, raw1.Object(), &newID)
		require.NoError(t, err)

		fetchedBlobovniczaID, err := meta.IsSmall(db, raw1.Object().Address())
		require.NoError(t, err)
		require.Equal(t, &newID, fetchedBlobovniczaID)
	})

	t.Run("update blobovniczaID on bad object", func(t *testing.T) {
		raw2 := generateRawObject(t)
		err := putBig(db, raw2.Object())
		require.NoError(t, err)

		fetchedBlobovniczaID, err := meta.IsSmall(db, raw2.Object().Address())
		require.NoError(t, err)
		require.Nil(t, fetchedBlobovniczaID)

		err = meta.Put(db, raw2.Object(), &blobovniczaID)
		require.Error(t, err)
	})
}