Files
zeekay 2b8695dc7c Fix all remaining CI errors using agent swarm
- 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.
2025-10-02 19:02:45 +00:00

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))
}