apskel-pos-backend/internal/mappers/order_mapper_test.go
aditya.siregar 4f5950543e init
2025-07-18 20:10:29 +07:00

143 lines
3.6 KiB
Go

package mappers
import (
"testing"
"time"
"apskel-pos-be/internal/entities"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
)
func TestOrderItemEntityToResponse_WithProductNames(t *testing.T) {
// Arrange
productID := uuid.New()
variantID := uuid.New()
orderID := uuid.New()
itemID := uuid.New()
product := entities.Product{
ID: productID,
Name: "Test Product",
}
productVariant := entities.ProductVariant{
ID: variantID,
Name: "Test Variant",
}
orderItem := &entities.OrderItem{
ID: itemID,
OrderID: orderID,
ProductID: productID,
ProductVariantID: &variantID,
Quantity: 2,
UnitPrice: 10.0,
TotalPrice: 20.0,
UnitCost: 5.0,
TotalCost: 10.0,
Status: entities.OrderItemStatusPending,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
Product: product,
ProductVariant: &productVariant,
}
// Act
result := OrderItemEntityToResponse(orderItem)
// Assert
assert.NotNil(t, result)
assert.Equal(t, itemID, result.ID)
assert.Equal(t, orderID, result.OrderID)
assert.Equal(t, productID, result.ProductID)
assert.Equal(t, "Test Product", result.ProductName)
assert.Equal(t, &variantID, result.ProductVariantID)
assert.Equal(t, "Test Variant", *result.ProductVariantName)
assert.Equal(t, 2, result.Quantity)
assert.Equal(t, 10.0, result.UnitPrice)
assert.Equal(t, 20.0, result.TotalPrice)
}
func TestOrderItemEntityToResponse_WithoutProductVariant(t *testing.T) {
// Arrange
productID := uuid.New()
orderID := uuid.New()
itemID := uuid.New()
product := entities.Product{
ID: productID,
Name: "Test Product",
}
orderItem := &entities.OrderItem{
ID: itemID,
OrderID: orderID,
ProductID: productID,
ProductVariantID: nil,
Quantity: 1,
UnitPrice: 15.0,
TotalPrice: 15.0,
UnitCost: 7.0,
TotalCost: 7.0,
Status: entities.OrderItemStatusPending,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
Product: product,
ProductVariant: nil,
}
// Act
result := OrderItemEntityToResponse(orderItem)
// Assert
assert.NotNil(t, result)
assert.Equal(t, itemID, result.ID)
assert.Equal(t, orderID, result.OrderID)
assert.Equal(t, productID, result.ProductID)
assert.Equal(t, "Test Product", result.ProductName)
assert.Nil(t, result.ProductVariantID)
assert.Nil(t, result.ProductVariantName)
assert.Equal(t, 1, result.Quantity)
assert.Equal(t, 15.0, result.UnitPrice)
assert.Equal(t, 15.0, result.TotalPrice)
}
func TestOrderItemEntityToResponse_WithoutProductPreload(t *testing.T) {
// Arrange
productID := uuid.New()
orderID := uuid.New()
itemID := uuid.New()
// Create order item without preloaded product (empty product)
orderItem := &entities.OrderItem{
ID: itemID,
OrderID: orderID,
ProductID: productID,
ProductVariantID: nil,
Quantity: 1,
UnitPrice: 10.0,
TotalPrice: 10.0,
UnitCost: 5.0,
TotalCost: 5.0,
Status: entities.OrderItemStatusPending,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
Product: entities.Product{}, // Empty product
ProductVariant: nil,
}
// Act
result := OrderItemEntityToResponse(orderItem)
// Assert
assert.NotNil(t, result)
assert.Equal(t, itemID, result.ID)
assert.Equal(t, orderID, result.OrderID)
assert.Equal(t, productID, result.ProductID)
assert.Equal(t, "", result.ProductName) // Should be empty since product is not preloaded
assert.Nil(t, result.ProductVariantID)
assert.Nil(t, result.ProductVariantName)
}