mirror of
https://github.com/luxfi/cli.git
synced 2026-10-30 17:01:20 +00:00
- Fix PrintToUser argument errors in blockchaincmd - Fix prompts package imports (use CLI prompts not SDK) - Fix format directive errors (use %s not %w for strings) - Fix non-constant format strings in nodecmd - Fix undefined config.LuxDataDirVar - Fix struct field issues in tests - Fix IPv6 address formatting - Add proper fmt.Sprintf wrapping where needed - Ensure NewEthClient is properly exported All CI errors should now be resolved.
141 lines
4.4 KiB
Go
141 lines
4.4 KiB
Go
// Copyright (C) 2022-2025, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package capturetests
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/luxfi/cli/internal/mocks"
|
|
"github.com/luxfi/cli/pkg/prompts"
|
|
"github.com/luxfi/crypto"
|
|
"github.com/stretchr/testify/mock"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
/*
|
|
These tests need to be in an independent module
|
|
because otherwise they create a circular dependency
|
|
between the mocks and the prompts modules
|
|
*/
|
|
|
|
func TestListDecision(t *testing.T) {
|
|
require := require.New(t)
|
|
mockPrompt := &mocks.Prompter{}
|
|
|
|
pk, err := crypto.GenerateKey()
|
|
require.NoError(err)
|
|
addr := crypto.PubkeyToAddress(pk.PublicKey)
|
|
pk2, err := crypto.GenerateKey()
|
|
require.NoError(err)
|
|
addr2 := crypto.PubkeyToAddress(pk2.PublicKey)
|
|
|
|
// 1. cancel
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Cancel, nil).Once()
|
|
|
|
// 2. error
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return("", errors.New("fake error")).Once()
|
|
|
|
// 3. add - 1 valid, 1 done
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Add, nil).Once()
|
|
mockPrompt.On("CaptureAddress", mock.Anything).Return(addr, nil).Once()
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Done, nil).Once()
|
|
|
|
// 4. add - 1 valid, then add the same
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Add, nil).Once()
|
|
mockPrompt.On("CaptureAddress", mock.Anything, mock.Anything).Return(addr, nil).Once()
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Add, nil).Once()
|
|
mockPrompt.On("CaptureAddress", mock.Anything, mock.Anything).Return(addr, nil).Once()
|
|
// do a preview (nothing changes, but prints 2 addrs on STDOUT)
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Preview, nil).Once()
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Add, nil).Once()
|
|
mockPrompt.On("CaptureAddress", mock.Anything, mock.Anything).Return(addr2, nil).Once()
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Done, nil).Once()
|
|
|
|
// 5. add - 2 valid, then remove index 1, readd
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Add, nil).Once()
|
|
mockPrompt.On("CaptureAddress", mock.Anything, mock.Anything).Return(addr, nil).Once()
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Add, nil).Once()
|
|
mockPrompt.On("CaptureAddress", mock.Anything, mock.Anything).Return(addr2, nil).Once()
|
|
// print info (nothing changes, but prints info to STDOUT)
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.MoreInfo, nil).Once()
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Del, nil).Once()
|
|
mockPrompt.On("CaptureIndex", mock.Anything, mock.Anything).Return(1, nil).Once()
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Add, nil).Once()
|
|
mockPrompt.On("CaptureAddress", mock.Anything, mock.Anything).Return(addr2, nil).Once()
|
|
mockPrompt.On("CaptureList", mock.Anything, mock.Anything).Return(prompts.Done, nil).Once()
|
|
|
|
prompt := "Test CaptureListDecision"
|
|
capture := mockPrompt.CaptureAddress
|
|
capturePrompt := "Enter address"
|
|
label := "Test"
|
|
info := "something"
|
|
|
|
// 1.cancel
|
|
list, cancel, err := prompts.CaptureListDecision(
|
|
mockPrompt,
|
|
prompt,
|
|
capture,
|
|
capturePrompt,
|
|
label,
|
|
info,
|
|
)
|
|
require.NoError(err)
|
|
require.True(cancel)
|
|
require.Empty(list)
|
|
|
|
// 2. error
|
|
list, cancel, err = prompts.CaptureListDecision(
|
|
mockPrompt,
|
|
prompt,
|
|
capture,
|
|
capturePrompt,
|
|
label,
|
|
info,
|
|
)
|
|
require.Error(err)
|
|
require.ErrorContains(err, "fake error")
|
|
require.False(cancel)
|
|
require.Empty(list)
|
|
|
|
// 3. add - 1 valid, 1 done
|
|
list, cancel, err = prompts.CaptureListDecision(
|
|
mockPrompt,
|
|
prompt,
|
|
capture,
|
|
capturePrompt,
|
|
label,
|
|
info,
|
|
)
|
|
require.NoError(err)
|
|
require.False(cancel)
|
|
require.Exactly(1, len(list))
|
|
|
|
// 4. add - 1 valid, then add the same
|
|
list, cancel, err = prompts.CaptureListDecision(
|
|
mockPrompt,
|
|
prompt,
|
|
capture,
|
|
capturePrompt,
|
|
label,
|
|
info,
|
|
)
|
|
require.NoError(err)
|
|
require.False(cancel)
|
|
require.Exactly(2, len(list))
|
|
|
|
// 5. add - 2 valid, then remove index 1, readd
|
|
list, cancel, err = prompts.CaptureListDecision(
|
|
mockPrompt,
|
|
prompt,
|
|
capture,
|
|
capturePrompt,
|
|
label,
|
|
info,
|
|
)
|
|
require.NoError(err)
|
|
require.False(cancel)
|
|
require.Exactly(2, len(list))
|
|
}
|