ledger accounts improvement
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"github.com/tech/sendico/ledger/storage"
|
||||
"github.com/tech/sendico/ledger/storage/model"
|
||||
"github.com/tech/sendico/pkg/merrors"
|
||||
pmodel "github.com/tech/sendico/pkg/model"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
@@ -30,16 +31,16 @@ func (s *stubRepository) Balances() storage.BalancesStore { return s
|
||||
func (s *stubRepository) Outbox() storage.OutboxStore { return s.outbox }
|
||||
|
||||
type stubAccountsStore struct {
|
||||
getByID map[primitive.ObjectID]*model.Account
|
||||
defaultSettlement *model.Account
|
||||
getByID map[primitive.ObjectID]*pmodel.LedgerAccount
|
||||
defaultSettlement *pmodel.LedgerAccount
|
||||
getErr error
|
||||
defaultErr error
|
||||
}
|
||||
|
||||
func (s *stubAccountsStore) Create(context.Context, *model.Account) error {
|
||||
func (s *stubAccountsStore) Create(context.Context, *pmodel.LedgerAccount) error {
|
||||
return merrors.NotImplemented("create")
|
||||
}
|
||||
func (s *stubAccountsStore) Get(ctx context.Context, accountRef primitive.ObjectID) (*model.Account, error) {
|
||||
func (s *stubAccountsStore) Get(ctx context.Context, accountRef primitive.ObjectID) (*pmodel.LedgerAccount, error) {
|
||||
if s.getErr != nil {
|
||||
return nil, s.getErr
|
||||
}
|
||||
@@ -48,10 +49,16 @@ func (s *stubAccountsStore) Get(ctx context.Context, accountRef primitive.Object
|
||||
}
|
||||
return nil, storage.ErrAccountNotFound
|
||||
}
|
||||
func (s *stubAccountsStore) GetByAccountCode(context.Context, primitive.ObjectID, string, string) (*model.Account, error) {
|
||||
func (s *stubAccountsStore) GetByAccountCode(context.Context, primitive.ObjectID, string, string) (*pmodel.LedgerAccount, error) {
|
||||
return nil, merrors.NotImplemented("get by code")
|
||||
}
|
||||
func (s *stubAccountsStore) GetDefaultSettlement(context.Context, primitive.ObjectID, string) (*model.Account, error) {
|
||||
func (s *stubAccountsStore) GetByRole(context.Context, primitive.ObjectID, string, pmodel.AccountRole) (*pmodel.LedgerAccount, error) {
|
||||
return nil, merrors.NotImplemented("get by role")
|
||||
}
|
||||
func (s *stubAccountsStore) GetSystemAccount(context.Context, pmodel.SystemAccountPurpose, string) (*pmodel.LedgerAccount, error) {
|
||||
return nil, merrors.NotImplemented("get system account")
|
||||
}
|
||||
func (s *stubAccountsStore) GetDefaultSettlement(context.Context, primitive.ObjectID, string) (*pmodel.LedgerAccount, error) {
|
||||
if s.defaultErr != nil {
|
||||
return nil, s.defaultErr
|
||||
}
|
||||
@@ -60,10 +67,10 @@ func (s *stubAccountsStore) GetDefaultSettlement(context.Context, primitive.Obje
|
||||
}
|
||||
return s.defaultSettlement, nil
|
||||
}
|
||||
func (s *stubAccountsStore) ListByOrganization(context.Context, primitive.ObjectID, int, int) ([]*model.Account, error) {
|
||||
func (s *stubAccountsStore) ListByOrganization(context.Context, primitive.ObjectID, *storage.AccountsFilter, int, int) ([]*pmodel.LedgerAccount, error) {
|
||||
return nil, merrors.NotImplemented("list")
|
||||
}
|
||||
func (s *stubAccountsStore) UpdateStatus(context.Context, primitive.ObjectID, model.AccountStatus) error {
|
||||
func (s *stubAccountsStore) UpdateStatus(context.Context, primitive.ObjectID, pmodel.LedgerAccountStatus) error {
|
||||
return merrors.NotImplemented("update status")
|
||||
}
|
||||
|
||||
@@ -135,16 +142,16 @@ func TestResolveSettlementAccount_Default(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
orgRef := primitive.NewObjectID()
|
||||
settlementID := primitive.NewObjectID()
|
||||
settlement := &model.Account{}
|
||||
settlement := &pmodel.LedgerAccount{}
|
||||
settlement.SetID(settlementID)
|
||||
settlement.OrganizationRef = orgRef
|
||||
settlement.OrganizationRef = &orgRef
|
||||
settlement.Currency = "USD"
|
||||
settlement.Status = model.AccountStatusActive
|
||||
settlement.Status = pmodel.LedgerAccountStatusActive
|
||||
|
||||
accounts := &stubAccountsStore{defaultSettlement: settlement}
|
||||
repo := &stubRepository{accounts: accounts}
|
||||
service := &Service{logger: zap.NewNop(), storage: repo}
|
||||
cache := make(map[primitive.ObjectID]*model.Account)
|
||||
cache := make(map[primitive.ObjectID]*pmodel.LedgerAccount)
|
||||
|
||||
result, err := service.resolveSettlementAccount(ctx, orgRef, "USD", "", cache)
|
||||
|
||||
@@ -157,16 +164,16 @@ func TestResolveSettlementAccount_Override(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
orgRef := primitive.NewObjectID()
|
||||
overrideID := primitive.NewObjectID()
|
||||
override := &model.Account{}
|
||||
override := &pmodel.LedgerAccount{}
|
||||
override.SetID(overrideID)
|
||||
override.OrganizationRef = orgRef
|
||||
override.OrganizationRef = &orgRef
|
||||
override.Currency = "EUR"
|
||||
override.Status = model.AccountStatusActive
|
||||
override.Status = pmodel.LedgerAccountStatusActive
|
||||
|
||||
accounts := &stubAccountsStore{getByID: map[primitive.ObjectID]*model.Account{overrideID: override}}
|
||||
accounts := &stubAccountsStore{getByID: map[primitive.ObjectID]*pmodel.LedgerAccount{overrideID: override}}
|
||||
repo := &stubRepository{accounts: accounts}
|
||||
service := &Service{logger: zap.NewNop(), storage: repo}
|
||||
cache := make(map[primitive.ObjectID]*model.Account)
|
||||
cache := make(map[primitive.ObjectID]*pmodel.LedgerAccount)
|
||||
|
||||
result, err := service.resolveSettlementAccount(ctx, orgRef, "EUR", overrideID.Hex(), cache)
|
||||
|
||||
@@ -182,7 +189,7 @@ func TestResolveSettlementAccount_NoDefault(t *testing.T) {
|
||||
repo := &stubRepository{accounts: accounts}
|
||||
service := &Service{logger: zap.NewNop(), storage: repo}
|
||||
|
||||
_, err := service.resolveSettlementAccount(ctx, orgRef, "USD", "", map[primitive.ObjectID]*model.Account{})
|
||||
_, err := service.resolveSettlementAccount(ctx, orgRef, "USD", "", map[primitive.ObjectID]*pmodel.LedgerAccount{})
|
||||
|
||||
require.Error(t, err)
|
||||
assert.True(t, errors.Is(err, merrors.ErrInvalidArg))
|
||||
@@ -192,8 +199,8 @@ func TestUpsertBalances_Succeeds(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
orgRef := primitive.NewObjectID()
|
||||
accountRef := primitive.NewObjectID()
|
||||
account := &model.Account{AllowNegative: false, Currency: "USD"}
|
||||
account.OrganizationRef = orgRef
|
||||
account := &pmodel.LedgerAccount{AllowNegative: false, Currency: "USD"}
|
||||
account.OrganizationRef = &orgRef
|
||||
|
||||
balanceLines := []*model.PostingLine{
|
||||
{
|
||||
@@ -206,7 +213,7 @@ func TestUpsertBalances_Succeeds(t *testing.T) {
|
||||
balances := &stubBalancesStore{}
|
||||
repo := &stubRepository{balances: balances}
|
||||
service := &Service{logger: zap.NewNop(), storage: repo}
|
||||
accountCache := map[primitive.ObjectID]*model.Account{accountRef: account}
|
||||
accountCache := map[primitive.ObjectID]*pmodel.LedgerAccount{accountRef: account}
|
||||
|
||||
require.NoError(t, service.upsertBalances(ctx, balanceLines, accountCache))
|
||||
require.Len(t, balances.upserts, 1)
|
||||
@@ -219,8 +226,8 @@ func TestUpsertBalances_DisallowNegative(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
orgRef := primitive.NewObjectID()
|
||||
accountRef := primitive.NewObjectID()
|
||||
account := &model.Account{AllowNegative: false, Currency: "USD"}
|
||||
account.OrganizationRef = orgRef
|
||||
account := &pmodel.LedgerAccount{AllowNegative: false, Currency: "USD"}
|
||||
account.OrganizationRef = &orgRef
|
||||
|
||||
balanceLines := []*model.PostingLine{
|
||||
{
|
||||
@@ -233,7 +240,7 @@ func TestUpsertBalances_DisallowNegative(t *testing.T) {
|
||||
balances := &stubBalancesStore{}
|
||||
repo := &stubRepository{balances: balances}
|
||||
service := &Service{logger: zap.NewNop(), storage: repo}
|
||||
accountCache := map[primitive.ObjectID]*model.Account{accountRef: account}
|
||||
accountCache := map[primitive.ObjectID]*pmodel.LedgerAccount{accountRef: account}
|
||||
|
||||
err := service.upsertBalances(ctx, balanceLines, accountCache)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user