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 }