package state

import (
	"math/big"
	"testing"

	"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
	"github.com/nspcc-dev/neo-go/pkg/internal/testserdes"
	"github.com/nspcc-dev/neo-go/pkg/util"
	"github.com/stretchr/testify/require"
)

func TestValidatorState_DecodeEncodeBinary(t *testing.T) {
	state := &Validator{
		PublicKey:  &keys.PublicKey{},
		Registered: false,
		Votes:      util.Fixed8(10),
	}

	testserdes.EncodeDecodeBinary(t, state, new(Validator))
}

func TestRegisteredAndHasVotes_Registered(t *testing.T) {
	state := &Validator{
		PublicKey: &keys.PublicKey{
			X: big.NewInt(1),
			Y: big.NewInt(1),
		},
		Registered: true,
		Votes:      0,
	}
	require.False(t, state.RegisteredAndHasVotes())
}

func TestRegisteredAndHasVotes_RegisteredWithVotes(t *testing.T) {
	state := &Validator{
		PublicKey: &keys.PublicKey{
			X: big.NewInt(1),
			Y: big.NewInt(1),
		},
		Registered: true,
		Votes:      1,
	}
	require.True(t, state.RegisteredAndHasVotes())
}

func TestRegisteredAndHasVotes_NotRegisteredWithVotes(t *testing.T) {
	state := &Validator{
		PublicKey: &keys.PublicKey{
			X: big.NewInt(1),
			Y: big.NewInt(1),
		},
		Registered: false,
		Votes:      1,
	}
	require.False(t, state.RegisteredAndHasVotes())
}