/*
Copyright IBM Corp. All Rights Reserved.

SPDX-License-Identifier: Apache-2.0
*/

package snapshot

import (
	"testing"

	pb "github.com/hyperledger/fabric-protos-go-apiv2/peer"
	"github.com/hyperledger/fabric/internal/peer/common"
	"github.com/spf13/viper"
	"github.com/stretchr/testify/require"
)

//go:generate counterfeiter -o mock/snapshot_client.go -fake-name SnapshotClient . snapshotClient

type snapshotClient interface {
	pb.SnapshotClient
}

//go:generate counterfeiter -o mock/signer.go -fake-name Signer . signer

type signer interface {
	common.Signer
}

func TestValidatePeerConnectionParameters(t *testing.T) {
	viper.Set("peer.tls.enabled", false)
	require.NoError(t, validatePeerConnectionParameters())

	viper.Set("peer.tls.enabled", true)
	expectedErrMsg := "the required parameter 'tlsRootCertFile' is empty. Rerun the command with --tlsRootCertFile flag"
	require.EqualError(t, validatePeerConnectionParameters(), expectedErrMsg)

	tlsRootCertFile = "cert1_file"
	require.NoError(t, validatePeerConnectionParameters())

	// test error propagation
	args := []string{"-c", "mychannel"}
	resetFlags()
	cmd := listPendingCmd(nil, nil)
	cmd.SetArgs(args)
	err := cmd.Execute()
	require.EqualError(t, err, expectedErrMsg)

	resetFlags()
	cmd = submitRequestCmd(nil, nil)
	cmd.SetArgs(args)
	err = cmd.Execute()
	require.EqualError(t, err, expectedErrMsg)

	resetFlags()
	cmd = cancelRequestCmd(nil, nil)
	// append required block number parameter for cancel request
	args = append(args, []string{"-b", "10"}...)
	cmd.SetArgs(args)
	err = cmd.Execute()
	require.EqualError(t, err, expectedErrMsg)
}
