143 lines
3.6 KiB
Go
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)
|
||
|
|
}
|