137 lines
4.0 KiB
Go
137 lines
4.0 KiB
Go
package processor
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"apskel-pos-be/internal/entities"
|
|
"apskel-pos-be/internal/models"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type expenseRepositoryCaptureStub struct {
|
|
createdExpense *entities.Expense
|
|
createdItems []*entities.ExpenseItem
|
|
}
|
|
|
|
func (s *expenseRepositoryCaptureStub) Create(_ context.Context, expense *entities.Expense) error {
|
|
if expense.ID == uuid.Nil {
|
|
expense.ID = uuid.New()
|
|
}
|
|
s.createdExpense = expense
|
|
return nil
|
|
}
|
|
|
|
func (s *expenseRepositoryCaptureStub) GetByID(context.Context, uuid.UUID) (*entities.Expense, error) {
|
|
if s.createdExpense == nil {
|
|
return nil, nil
|
|
}
|
|
items := make([]entities.ExpenseItem, len(s.createdItems))
|
|
for i, item := range s.createdItems {
|
|
items[i] = *item
|
|
}
|
|
s.createdExpense.Items = items
|
|
return s.createdExpense, nil
|
|
}
|
|
|
|
func (*expenseRepositoryCaptureStub) GetByIDAndOrganizationID(context.Context, uuid.UUID, uuid.UUID) (*entities.Expense, error) {
|
|
return nil, nil
|
|
}
|
|
func (*expenseRepositoryCaptureStub) Update(context.Context, *entities.Expense) error { return nil }
|
|
func (*expenseRepositoryCaptureStub) Delete(context.Context, uuid.UUID) error { return nil }
|
|
func (*expenseRepositoryCaptureStub) List(context.Context, uuid.UUID, map[string]interface{}, int, int) ([]*entities.Expense, int64, error) {
|
|
return nil, 0, nil
|
|
}
|
|
func (s *expenseRepositoryCaptureStub) CreateItem(_ context.Context, item *entities.ExpenseItem) error {
|
|
if item.ID == uuid.Nil {
|
|
item.ID = uuid.New()
|
|
}
|
|
s.createdItems = append(s.createdItems, item)
|
|
return nil
|
|
}
|
|
func (*expenseRepositoryCaptureStub) DeleteItemsByExpenseID(context.Context, uuid.UUID) error {
|
|
return nil
|
|
}
|
|
|
|
func TestExpenseProcessorCreatePersistsItemName(t *testing.T) {
|
|
repo := &expenseRepositoryCaptureStub{}
|
|
p := NewExpenseProcessorImpl(repo)
|
|
chartOfAccountID := uuid.New()
|
|
|
|
resp, err := p.CreateExpense(context.Background(), uuid.New(), &models.CreateExpenseRequest{
|
|
Receiver: "Cashier",
|
|
TransactionDate: "2026-05-29",
|
|
CodeNumber: "EXP-001",
|
|
OutletID: uuid.NewString(),
|
|
Total: 10000,
|
|
Items: []models.CreateExpenseItemRequest{
|
|
{
|
|
ChartOfAccountID: chartOfAccountID.String(),
|
|
Item: "Cleaning supplies",
|
|
Amount: 10000,
|
|
},
|
|
},
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
require.NotNil(t, resp)
|
|
require.Len(t, repo.createdItems, 1)
|
|
require.Equal(t, "Cleaning supplies", repo.createdItems[0].Item)
|
|
require.Len(t, resp.Items, 1)
|
|
require.Equal(t, "Cleaning supplies", resp.Items[0].Item)
|
|
}
|
|
|
|
func TestExpenseProcessorCreateDefaultsStatusToDraft(t *testing.T) {
|
|
repo := &expenseRepositoryCaptureStub{}
|
|
p := NewExpenseProcessorImpl(repo)
|
|
|
|
resp, err := p.CreateExpense(context.Background(), uuid.New(), &models.CreateExpenseRequest{
|
|
Receiver: "Cashier",
|
|
TransactionDate: "2026-05-29",
|
|
CodeNumber: "EXP-001",
|
|
OutletID: uuid.NewString(),
|
|
Total: 10000,
|
|
Items: []models.CreateExpenseItemRequest{
|
|
{
|
|
ChartOfAccountID: uuid.NewString(),
|
|
Item: "Cleaning supplies",
|
|
Amount: 10000,
|
|
},
|
|
},
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
require.NotNil(t, resp)
|
|
require.Equal(t, "draft", repo.createdExpense.Status)
|
|
require.Equal(t, "draft", resp.Status)
|
|
}
|
|
|
|
func TestExpenseProcessorCreatePersistsProvidedStatus(t *testing.T) {
|
|
repo := &expenseRepositoryCaptureStub{}
|
|
p := NewExpenseProcessorImpl(repo)
|
|
status := "approved"
|
|
|
|
resp, err := p.CreateExpense(context.Background(), uuid.New(), &models.CreateExpenseRequest{
|
|
Receiver: "Cashier",
|
|
TransactionDate: "2026-05-29",
|
|
CodeNumber: "EXP-001",
|
|
OutletID: uuid.NewString(),
|
|
Status: &status,
|
|
Total: 10000,
|
|
Items: []models.CreateExpenseItemRequest{
|
|
{
|
|
ChartOfAccountID: uuid.NewString(),
|
|
Item: "Cleaning supplies",
|
|
Amount: 10000,
|
|
},
|
|
},
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
require.NotNil(t, resp)
|
|
require.Equal(t, "approved", repo.createdExpense.Status)
|
|
require.Equal(t, "approved", resp.Status)
|
|
}
|