mirror of
https://github.com/hanzo-fi/payments.git
synced 2026-10-30 20:31:20 +00:00
85 lines
2.8 KiB
Go
85 lines
2.8 KiB
Go
package bankingbridge
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/hanzo-fi/go-libs/v5/pkg/types/pointer"
|
|
"github.com/hanzo-fi/payments/ee/plugins/bankingbridge/client"
|
|
"github.com/hanzo-fi/payments/pkg/domain/plugins"
|
|
"github.com/hanzo-fi/payments/pkg/domain/models"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"go.uber.org/mock/gomock"
|
|
)
|
|
|
|
func (suite *PluginTestSuite) TestFetchNextAccounts_Success() {
|
|
ctx := context.Background()
|
|
req := models.FetchNextAccountsRequest{
|
|
PageSize: 2,
|
|
State: nil,
|
|
}
|
|
importedAt1 := time.Now().Add(-time.Minute).Truncate(time.Millisecond).UTC()
|
|
importedAt2 := time.Now().Truncate(time.Millisecond).UTC()
|
|
|
|
accs := []client.Account{
|
|
{Reference: "acc1", ImportedAt: importedAt1, Name: pointer.For("name1"), DefaultAsset: pointer.For("JPY")},
|
|
{Reference: "acc2", ImportedAt: importedAt2, Name: pointer.For("name1"), DefaultAsset: pointer.For("AUD")},
|
|
}
|
|
|
|
newCursor := "newCursor"
|
|
suite.client.EXPECT().GetAccounts(gomock.Any(), "", "", req.PageSize).Return(accs, true, newCursor, nil)
|
|
|
|
resp, err := suite.plugin.FetchNextAccounts(ctx, req)
|
|
require.NoError(suite.T(), err)
|
|
assert.Len(suite.T(), resp.Accounts, len(accs))
|
|
assert.Equal(suite.T(), accs[0].Reference, resp.Accounts[0].Reference)
|
|
require.NotNil(suite.T(), resp.Accounts[0].DefaultAsset)
|
|
assert.Equal(suite.T(), accs[0].DefaultAsset, resp.Accounts[0].DefaultAsset)
|
|
require.NotNil(suite.T(), resp.Accounts[0].Name)
|
|
assert.Equal(suite.T(), accs[0].Name, resp.Accounts[0].Name)
|
|
assert.Equal(suite.T(), accs[0].ImportedAt, resp.Accounts[0].CreatedAt)
|
|
assert.Contains(suite.T(), string(resp.Accounts[0].Raw), accs[0].Reference)
|
|
assert.True(suite.T(), resp.HasMore)
|
|
|
|
var state workflowState
|
|
err = json.Unmarshal(resp.NewState, &state)
|
|
require.NoError(suite.T(), err)
|
|
assert.Equal(suite.T(), newCursor, state.Cursor)
|
|
|
|
lastSeenImportedAt, err := time.Parse(ImportedAtLayout, state.LastSeenImportedAt)
|
|
require.NoError(suite.T(), err)
|
|
assert.Equal(suite.T(), importedAt2, lastSeenImportedAt)
|
|
}
|
|
|
|
func (suite *PluginTestSuite) TestFetchNextAccounts_ClientError() {
|
|
ctx := context.Background()
|
|
req := models.FetchNextAccountsRequest{
|
|
PageSize: 2,
|
|
State: nil,
|
|
}
|
|
|
|
expectedErr := errors.New("new err")
|
|
suite.client.EXPECT().GetAccounts(gomock.Any(), "", "", req.PageSize).Return(nil, false, "", expectedErr)
|
|
|
|
_, err := suite.plugin.FetchNextAccounts(ctx, req)
|
|
require.Error(suite.T(), err)
|
|
assert.Equal(suite.T(), expectedErr, err)
|
|
}
|
|
|
|
func (suite *PluginTestSuite) TestFetchNextAccounts_NotYetInstalled() {
|
|
ctx := context.Background()
|
|
req := models.FetchNextAccountsRequest{
|
|
PageSize: 2,
|
|
State: nil,
|
|
}
|
|
|
|
suite.plugin.client = nil
|
|
|
|
_, err := suite.plugin.FetchNextAccounts(ctx, req)
|
|
require.Error(suite.T(), err)
|
|
assert.Equal(suite.T(), plugins.ErrNotYetInstalled, err)
|
|
}
|