github.com/liftedinit/mfx-migrator@v0.0.1-alpha.1/cmd/migrate_test.go (about)

     1  package cmd_test
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/go-resty/resty/v2"
     9  	"github.com/jarcoal/httpmock"
    10  	"github.com/spf13/cobra"
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"github.com/liftedinit/mfx-migrator/cmd"
    14  	"github.com/liftedinit/mfx-migrator/testutils"
    15  )
    16  
    17  func TestMigrateCmd(t *testing.T) {
    18  	if err := os.Chdir(t.TempDir()); err != nil {
    19  		t.Fatal(err)
    20  	}
    21  
    22  	testutils.SetupWorkItem(t)
    23  
    24  	var slice []string
    25  	urlArg := append(slice, []string{"--url", testutils.RootUrl}...)
    26  	uuidArg := append(urlArg, []string{"--uuid", testutils.DummyUUIDStr}...)
    27  	chainHomeArg := append(uuidArg, []string{"--chain-home", "/tmp"}...)
    28  	usernameArg := append(chainHomeArg, []string{"--username", "user"}...)
    29  	passwordArg := append(usernameArg, []string{"--password", "pass"}...)
    30  
    31  	pp := make([]string, len(passwordArg))
    32  	copy(pp, passwordArg)
    33  	chainIdArg := append(pp, []string{"--chain-id", ""}...)
    34  	addressPrefixArg := append(pp, []string{"--address-prefix", ""}...)
    35  	nodeAddressArg := append(pp, []string{"--node-address", ""}...)
    36  	keyringBackendArg := append(pp, []string{"--keyring-backend", ""}...)
    37  	bankAddressArg := append(pp, []string{"--bank-address", ""}...)
    38  
    39  	tt := []struct {
    40  		name string
    41  		args []string
    42  		err  string
    43  		out  string
    44  	}{
    45  		{name: "no argument", args: []string{}, err: "URL cannot be empty"},
    46  		{name: "uuid missing", args: urlArg, err: "required flag(s) \"uuid\" not set"},
    47  		{name: "chain home missing", args: uuidArg, err: "chain home is required"},
    48  		{name: "username missing", args: chainHomeArg, err: "username is required"},
    49  		{name: "password missing", args: usernameArg, err: "password is required"},
    50  
    51  		// Set defaults to empty strings
    52  		{name: "chain id missing", args: chainIdArg, err: "chain ID is required"},
    53  		{name: "address prefix missing", args: addressPrefixArg, err: "address prefix is required"},
    54  		{name: "node address missing", args: nodeAddressArg, err: "node address is required"},
    55  		{name: "keyring backend missing", args: keyringBackendArg, err: "keyring backend is required"},
    56  		{name: "bank address missing", args: bankAddressArg, err: "bank address is required"},
    57  	}
    58  
    59  	for _, tc := range tt {
    60  		command := &cobra.Command{Use: "migrate", PersistentPreRunE: cmd.RootCmdPersistentPreRunE, RunE: cmd.MigrateCmdRunE}
    61  
    62  		// Create a new resty client and inject it into the command context
    63  		client := resty.New()
    64  		ctx := context.WithValue(context.Background(), cmd.RestyClientKey, client)
    65  		command.SetContext(ctx)
    66  
    67  		// Enable http mocking on the resty client
    68  		httpmock.ActivateNonDefault(client.GetClient())
    69  		defer httpmock.DeactivateAndReset()
    70  
    71  		cmd.SetupRootCmdFlags(command)
    72  		cmd.SetupMigrateCmdFlags(command)
    73  
    74  		t.Run(tc.name, func(t *testing.T) {
    75  			_, err := testutils.Execute(t, command, tc.args...)
    76  			require.ErrorContains(t, err, tc.err)
    77  		})
    78  	}
    79  }