Files
efrilmandClaude Opus 5.5 892575202b fix(orders): keep the customer a new order is created for
CreateOrderContractToModel never copied customer_id, so every order from
POST /orders was saved without a customer. Paying it then earned no
EnakPoint or EnakCoin (skipped as NO_CUSTOMER, which is not logged).

The customer must now belong to the order's organization, as
SetOrderCustomer already requires: it is who earns once the order is paid,
and orders.customer_id has no foreign key. A nil UUID means no customer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 23:29:17 +07:00

77 lines
2.1 KiB
Go

package transformer
import (
"encoding/json"
"testing"
"apskel-pos-be/internal/contract"
"apskel-pos-be/internal/models"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCreateOrderContractToModelCarriesWeight(t *testing.T) {
weight := 1.25
result := CreateOrderContractToModel(&contract.CreateOrderRequest{
OutletID: uuid.New(),
UserID: uuid.New(),
OrderItems: []contract.CreateOrderItemRequest{
{
ProductID: uuid.New(),
Quantity: 1,
Weight: &weight,
},
},
})
require.Len(t, result.OrderItems, 1)
require.NotNil(t, result.OrderItems[0].Weight)
require.Equal(t, weight, *result.OrderItems[0].Weight)
}
func TestCreateOrderContractToModelCarriesCustomer(t *testing.T) {
customerID := uuid.New()
result := CreateOrderContractToModel(&contract.CreateOrderRequest{
OutletID: uuid.New(),
UserID: uuid.New(),
CustomerID: &customerID,
OrderItems: []contract.CreateOrderItemRequest{{ProductID: uuid.New(), Quantity: 1}},
})
require.NotNil(t, result.CustomerID, "the order's customer is who earns EnakPoint and EnakCoin")
require.Equal(t, customerID, *result.CustomerID)
}
func TestAddToOrderContractToModelCarriesWeight(t *testing.T) {
weight := 0.8
result := AddToOrderContractToModel(&contract.AddToOrderRequest{
OrderItems: []contract.CreateOrderItemRequest{
{
ProductID: uuid.New(),
Quantity: 1,
Weight: &weight,
},
},
})
require.Len(t, result.OrderItems, 1)
require.NotNil(t, result.OrderItems[0].Weight)
require.Equal(t, weight, *result.OrderItems[0].Weight)
}
func TestOrderModelToContractCarriesEarnings(t *testing.T) {
got := OrderModelToContract(&models.OrderResponse{PointsEarned: 875, CoinsEarned: 3})
assert.Equal(t, int64(875), got.PointsEarned)
assert.Equal(t, int64(3), got.CoinsEarned)
body, err := json.Marshal(OrderModelToContract(&models.OrderResponse{}))
assert.NoError(t, err)
assert.Contains(t, string(body), `"points_earned":0`, "present as 0 when nothing was earned")
assert.Contains(t, string(body), `"coins_earned":0`)
}