package bond

import (
	"fmt"

	"github.com/cosmos/cosmos-sdk/client/flags"
	clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
	sdk "github.com/cosmos/cosmos-sdk/types"

	"git.vdb.to/cerc-io/laconicd/x/bond/client/cli"
)

func (ets *E2ETestSuite) TestTxCreateBond() {
	val := ets.network.Validators[0]
	sr := ets.Require()

	testCases := []struct {
		name string
		args []string
		err  bool
	}{
		{
			"without deposit",
			[]string{
				fmt.Sprintf("--%s=%s", flags.FlagFrom, ets.accountName),
				fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
				fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("3%s", ets.cfg.BondDenom)),
			},
			true,
		},
		{
			"create bond",
			[]string{
				fmt.Sprintf("10%s", ets.cfg.BondDenom),
				fmt.Sprintf("--%s=%s", flags.FlagFrom, ets.accountName),
				fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
				fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
				fmt.Sprintf("--%s=json", flags.FlagOutput),
				fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("3%s", ets.cfg.BondDenom)),
			},
			false,
		},
	}

	for _, tc := range testCases {
		ets.Run(fmt.Sprintf("Case %s", tc.name), func() {
			clientCtx := val.ClientCtx
			cmd := cli.NewCreateBondCmd()

			out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
			if tc.err {
				sr.Error(err)
			} else {
				sr.NoError(err)
				var d sdk.TxResponse
				err = val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &d)
				sr.Nil(err)
				sr.NoError(err)
				sr.Zero(d.Code)
			}
		})
	}
}