package meta_test

import (
	"testing"

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

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

	raw1 := generateRawObject(t)
	raw2 := generateRawObject(t)

	// put two objects in metabase
	err := putBig(db, raw1.Object())
	require.NoError(t, err)

	err = putBig(db, raw2.Object())
	require.NoError(t, err)

	// check if toMoveIt index empty
	toMoveList, err := meta.Movable(db)
	require.NoError(t, err)
	require.Len(t, toMoveList, 0)

	// mark to move object2
	err = meta.ToMoveIt(db, raw2.Object().Address())
	require.NoError(t, err)

	// check if toMoveIt index contains address of object 2
	toMoveList, err = meta.Movable(db)
	require.NoError(t, err)
	require.Len(t, toMoveList, 1)
	require.Contains(t, toMoveList, raw2.Object().Address())

	// remove from toMoveIt index non existing address
	err = meta.DoNotMove(db, raw1.Object().Address())
	require.NoError(t, err)

	// check if toMoveIt index hasn't changed
	toMoveList, err = meta.Movable(db)
	require.NoError(t, err)
	require.Len(t, toMoveList, 1)

	// remove from toMoveIt index existing address
	err = meta.DoNotMove(db, raw2.Object().Address())
	require.NoError(t, err)

	// check if toMoveIt index is empty now
	toMoveList, err = meta.Movable(db)
	require.NoError(t, err)
	require.Len(t, toMoveList, 0)
}