57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
package orderreader
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
fulfillmentdomain "github.com/dujiao-next/internal/modules/fulfillment/domain"
|
|
orderdomain "github.com/dujiao-next/internal/modules/order/domain"
|
|
|
|
"github.com/dujiao-next/internal/shared/jsonmap"
|
|
)
|
|
|
|
type sourceStub struct {
|
|
order *orderdomain.Order
|
|
}
|
|
|
|
func (s sourceStub) GetByID(uint) (*orderdomain.Order, error) {
|
|
return s.order, nil
|
|
}
|
|
|
|
func TestReaderProjectsParentAndChildFulfillment(t *testing.T) {
|
|
parentID := uint(8)
|
|
deliveredAt := time.Unix(1_700_000_000, 0).UTC()
|
|
source := sourceStub{order: &orderdomain.Order{
|
|
ID: parentID,
|
|
OrderNo: "DJ-8",
|
|
Status: "completed",
|
|
Children: []orderdomain.Order{{
|
|
ID: 9,
|
|
ParentID: &parentID,
|
|
Status: "delivered",
|
|
Fulfillment: &fulfillmentdomain.Fulfillment{
|
|
Type: "manual",
|
|
Status: "delivered",
|
|
Payload: "code-123",
|
|
LogisticsJSON: jsonmap.JSON{"tracking_no": "TRACK-1"},
|
|
DeliveredAt: &deliveredAt,
|
|
},
|
|
}},
|
|
}}
|
|
|
|
projection, err := New(source).GetByID(parentID)
|
|
if err != nil {
|
|
t.Fatalf("GetByID() error = %v", err)
|
|
}
|
|
if projection.ID != parentID || projection.OrderNo != "DJ-8" || len(projection.Children) != 1 {
|
|
t.Fatalf("order projection mismatch: %#v", projection)
|
|
}
|
|
fulfillment := projection.Children[0].Fulfillment
|
|
if fulfillment == nil || fulfillment.Payload != "code-123" || fulfillment.DeliveryData["tracking_no"] != "TRACK-1" {
|
|
t.Fatalf("fulfillment projection mismatch: %#v", fulfillment)
|
|
}
|
|
if fulfillment.DeliveredAt == nil || !fulfillment.DeliveredAt.Equal(deliveredAt) {
|
|
t.Fatalf("delivered time mismatch: %#v", fulfillment.DeliveredAt)
|
|
}
|
|
}
|