package netmap

import (
	"testing"

	"github.com/nspcc-dev/neofs-api-go/v2/netmap"
	"github.com/stretchr/testify/require"
)

func TestOperationFromV2(t *testing.T) {
	for _, item := range []struct {
		op   Operation
		opV2 netmap.Operation
	}{
		{
			op:   0,
			opV2: netmap.UnspecifiedOperation,
		},
		{
			op:   OpEQ,
			opV2: netmap.EQ,
		},
		{
			op:   OpNE,
			opV2: netmap.NE,
		},
		{
			op:   OpOR,
			opV2: netmap.OR,
		},
		{
			op:   OpAND,
			opV2: netmap.AND,
		},
		{
			op:   OpLE,
			opV2: netmap.LE,
		},
		{
			op:   OpLT,
			opV2: netmap.LT,
		},
		{
			op:   OpGT,
			opV2: netmap.GT,
		},
		{
			op:   OpGE,
			opV2: netmap.GE,
		},
	} {
		require.Equal(t, item.op, OperationFromV2(item.opV2))
		require.Equal(t, item.opV2, item.op.ToV2())
	}
}

func TestOperation_String(t *testing.T) {
	toPtr := func(v Operation) *Operation {
		return &v
	}

	testEnumStrings(t, new(Operation), []enumStringItem{
		{val: toPtr(OpEQ), str: "EQ"},
		{val: toPtr(OpNE), str: "NE"},
		{val: toPtr(OpGT), str: "GT"},
		{val: toPtr(OpGE), str: "GE"},
		{val: toPtr(OpLT), str: "LT"},
		{val: toPtr(OpLE), str: "LE"},
		{val: toPtr(OpAND), str: "AND"},
		{val: toPtr(OpOR), str: "OR"},
		{val: toPtr(0), str: "OPERATION_UNSPECIFIED"},
	})
}