github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/crypto/keys/client/delete_test.go (about)

     1  package client
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/gnolang/gno/tm2/pkg/commands"
     8  	"github.com/gnolang/gno/tm2/pkg/crypto/keys"
     9  	"github.com/gnolang/gno/tm2/pkg/testutils"
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  const (
    15  	testMnemonic = "equip will roof matter pink blind book anxiety banner elbow sun young"
    16  )
    17  
    18  func Test_execDelete(t *testing.T) {
    19  	t.Parallel()
    20  
    21  	// make new test dir
    22  	kbHome, kbCleanUp := testutils.NewTestCaseDir(t)
    23  	defer kbCleanUp()
    24  
    25  	// initialize test options
    26  	cfg := &DeleteCfg{
    27  		RootCfg: &BaseCfg{
    28  			BaseOptions: BaseOptions{
    29  				Home:                  kbHome,
    30  				InsecurePasswordStdin: true,
    31  			},
    32  		},
    33  	}
    34  
    35  	io := commands.NewTestIO()
    36  
    37  	fakeKeyName1 := "deleteApp_Key1"
    38  	fakeKeyName2 := "deleteApp_Key2"
    39  
    40  	// Add test accounts to keybase.
    41  	kb, err := keys.NewKeyBaseFromDir(kbHome)
    42  	assert.NoError(t, err)
    43  
    44  	_, err = kb.CreateAccount(fakeKeyName1, testMnemonic, "", "", 0, 0)
    45  	assert.NoError(t, err)
    46  
    47  	_, err = kb.CreateAccount(fakeKeyName2, testMnemonic, "", "", 0, 1)
    48  	assert.NoError(t, err)
    49  
    50  	// test: Key not found
    51  	args := []string{"blah"}
    52  	err = execDelete(cfg, args, nil)
    53  	require.Error(t, err)
    54  	require.Equal(t, err.Error(), "Key blah not found")
    55  
    56  	// test: User confirmation missing
    57  	args = []string{fakeKeyName1}
    58  	io.SetIn(strings.NewReader(""))
    59  	err = execDelete(cfg, args, io)
    60  	require.Error(t, err)
    61  	require.Equal(t, err.Error(), "EOF")
    62  
    63  	{
    64  		_, err = kb.GetByName(fakeKeyName1)
    65  		require.NoError(t, err)
    66  
    67  		// Now there is a blank password followed by a confirmation.
    68  		args := []string{fakeKeyName1}
    69  		io.SetIn(strings.NewReader("\ny\n"))
    70  		err = execDelete(cfg, args, io)
    71  		require.NoError(t, err)
    72  
    73  		_, err = kb.GetByName(fakeKeyName1)
    74  		require.Error(t, err) // Key1 is gone
    75  	}
    76  
    77  	// Set config yes = true
    78  	cfg = &DeleteCfg{
    79  		RootCfg: &BaseCfg{
    80  			BaseOptions: BaseOptions{
    81  				Home:                  kbHome,
    82  				InsecurePasswordStdin: true,
    83  			},
    84  		},
    85  		Yes: true,
    86  	}
    87  
    88  	_, err = kb.GetByName(fakeKeyName2)
    89  	require.NoError(t, err)
    90  
    91  	// Run again with blank password followed by eof.
    92  	args = []string{fakeKeyName2}
    93  	io.SetIn(strings.NewReader("\n"))
    94  	err = execDelete(cfg, args, io)
    95  	require.NoError(t, err)
    96  	_, err = kb.GetByName(fakeKeyName2)
    97  	require.Error(t, err) // Key2 is gone
    98  
    99  	// TODO: Write another case for !keys.Local
   100  }