91 lines
3.3 KiB
Go
91 lines
3.3 KiB
Go
package processor
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"apskel-pos-be/internal/entities"
|
|
"apskel-pos-be/internal/models"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type analyticsRepositoryStub struct {
|
|
purchasingResult *entities.PurchasingAnalytics
|
|
}
|
|
|
|
func (analyticsRepositoryStub) GetPaymentMethodAnalytics(context.Context, uuid.UUID, *uuid.UUID, time.Time, time.Time) ([]*entities.PaymentMethodAnalytics, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (analyticsRepositoryStub) GetSalesAnalytics(context.Context, uuid.UUID, *uuid.UUID, time.Time, time.Time, string) ([]*entities.SalesAnalytics, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (s analyticsRepositoryStub) GetPurchasingAnalytics(context.Context, uuid.UUID, *uuid.UUID, time.Time, time.Time, string) (*entities.PurchasingAnalytics, error) {
|
|
return s.purchasingResult, nil
|
|
}
|
|
|
|
func (analyticsRepositoryStub) GetProductAnalytics(context.Context, uuid.UUID, *uuid.UUID, time.Time, time.Time, int) ([]*entities.ProductAnalytics, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (analyticsRepositoryStub) GetProductAnalyticsPerCategory(context.Context, uuid.UUID, *uuid.UUID, time.Time, time.Time) ([]*entities.ProductAnalyticsPerCategory, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (analyticsRepositoryStub) GetDashboardOverview(context.Context, uuid.UUID, *uuid.UUID, time.Time, time.Time) (*entities.DashboardOverview, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (analyticsRepositoryStub) GetProfitLossAnalytics(context.Context, uuid.UUID, *uuid.UUID, time.Time, time.Time) (*entities.ProfitLossAnalytics, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
type expenseRepositoryStub struct{}
|
|
|
|
func (expenseRepositoryStub) Create(context.Context, *entities.Expense) error { return nil }
|
|
func (expenseRepositoryStub) GetByID(context.Context, uuid.UUID) (*entities.Expense, error) {
|
|
return nil, nil
|
|
}
|
|
func (expenseRepositoryStub) GetByIDAndOrganizationID(context.Context, uuid.UUID, uuid.UUID) (*entities.Expense, error) {
|
|
return nil, nil
|
|
}
|
|
func (expenseRepositoryStub) Update(context.Context, *entities.Expense) error { return nil }
|
|
func (expenseRepositoryStub) Delete(context.Context, uuid.UUID) error { return nil }
|
|
func (expenseRepositoryStub) List(context.Context, uuid.UUID, map[string]interface{}, int, int) ([]*entities.Expense, int64, error) {
|
|
return nil, 0, nil
|
|
}
|
|
func (expenseRepositoryStub) CreateItem(context.Context, *entities.ExpenseItem) error { return nil }
|
|
func (expenseRepositoryStub) DeleteItemsByExpenseID(context.Context, uuid.UUID) error { return nil }
|
|
|
|
func TestAnalyticsProcessorGetPurchasingAnalyticsPassesOutletName(t *testing.T) {
|
|
outletID := uuid.New()
|
|
outletName := "Main Outlet"
|
|
now := time.Date(2026, 5, 1, 0, 0, 0, 0, time.UTC)
|
|
processor := NewAnalyticsProcessorImpl(analyticsRepositoryStub{
|
|
purchasingResult: &entities.PurchasingAnalytics{
|
|
OutletName: &outletName,
|
|
Summary: entities.PurchasingSummary{
|
|
TotalPurchases: 125,
|
|
},
|
|
},
|
|
}, expenseRepositoryStub{})
|
|
|
|
result, err := processor.GetPurchasingAnalytics(context.Background(), &models.PurchasingAnalyticsRequest{
|
|
OrganizationID: uuid.New(),
|
|
OutletID: &outletID,
|
|
DateFrom: now,
|
|
DateTo: now,
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
require.NotNil(t, result)
|
|
require.Equal(t, &outletID, result.OutletID)
|
|
require.NotNil(t, result.OutletName)
|
|
require.Equal(t, outletName, *result.OutletName)
|
|
require.Equal(t, float64(125), result.Summary.TotalPurchases)
|
|
}
|