77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
package transformer
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
"time"
|
|
|
|
"apskel-pos-be/internal/contract"
|
|
"apskel-pos-be/internal/models"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestPurchasingAnalyticsContractToModelParsesDateRangeAndOutlet(t *testing.T) {
|
|
orgID := uuid.New()
|
|
outletID := uuid.New().String()
|
|
|
|
req := &contract.PurchasingAnalyticsRequest{
|
|
OrganizationID: orgID,
|
|
OutletID: &outletID,
|
|
DateFrom: "01-05-2026",
|
|
DateTo: "02-05-2026",
|
|
GroupBy: "week",
|
|
}
|
|
|
|
result := PurchasingAnalyticsContractToModel(req)
|
|
|
|
require.Equal(t, orgID, result.OrganizationID)
|
|
require.NotNil(t, result.OutletID)
|
|
require.Equal(t, outletID, result.OutletID.String())
|
|
require.Equal(t, "week", result.GroupBy)
|
|
|
|
location, err := time.LoadLocation("Asia/Jakarta")
|
|
require.NoError(t, err)
|
|
require.Equal(t, time.Date(2026, 5, 1, 0, 0, 0, 0, location), result.DateFrom)
|
|
require.Equal(t, time.Date(2026, 5, 2, 23, 59, 59, int(time.Second-time.Nanosecond), location), result.DateTo)
|
|
}
|
|
|
|
func TestPurchasingAnalyticsContractToModelIgnoresInvalidOutlet(t *testing.T) {
|
|
outletID := "not-a-uuid"
|
|
|
|
result := PurchasingAnalyticsContractToModel(&contract.PurchasingAnalyticsRequest{
|
|
OutletID: &outletID,
|
|
DateFrom: "01-05-2026",
|
|
DateTo: "02-05-2026",
|
|
})
|
|
|
|
require.Nil(t, result.OutletID)
|
|
}
|
|
|
|
func TestPurchasingAnalyticsModelToContractCopiesOutletName(t *testing.T) {
|
|
outletID := uuid.New()
|
|
outletName := "Main Outlet"
|
|
|
|
result := PurchasingAnalyticsModelToContract(&models.PurchasingAnalyticsResponse{
|
|
OrganizationID: uuid.New(),
|
|
OutletID: &outletID,
|
|
OutletName: &outletName,
|
|
})
|
|
|
|
require.NotNil(t, result)
|
|
require.Equal(t, &outletID, result.OutletID)
|
|
require.NotNil(t, result.OutletName)
|
|
require.Equal(t, outletName, *result.OutletName)
|
|
}
|
|
|
|
func TestPurchasingAnalyticsModelToContractOmitsNilOutletName(t *testing.T) {
|
|
result := PurchasingAnalyticsModelToContract(&models.PurchasingAnalyticsResponse{
|
|
OrganizationID: uuid.New(),
|
|
})
|
|
|
|
payload, err := json.Marshal(result)
|
|
require.NoError(t, err)
|
|
require.NotContains(t, string(payload), "outlet_name")
|
|
}
|