package main import ( "testing" "time" messages "git.tornberg.me/go-cart-actor/proto" ) func GetMessage(t uint16, data interface{}) *Message { ts := time.Now().Unix() return &Message{ TimeStamp: &ts, Type: t, Content: data, } } func TestAddToCart(t *testing.T) { grain, err := spawn(ToCartId("kalle")) if err != nil { t.Errorf("Error spawning: %v\n", err) } if len(grain.Items) != 0 { t.Errorf("Expected 0 items, got %d\n", len(grain.Items)) } msg := GetMessage(AddItemType, &messages.AddItem{ Quantity: 2, Price: 100, Sku: "123", Name: "Test item", Image: "test.jpg", }) result, err := grain.HandleMessage(msg, false) if err != nil { t.Errorf("Error handling message: %v\n", err) } if len(result) == 0 { t.Errorf("Expected result, got nil\n") } if grain.TotalPrice != 200 { t.Errorf("Expected total price 200, got %d\n", grain.TotalPrice) } if len(grain.Items) != 1 { t.Errorf("Expected 1 item, got %d\n", len(grain.Items)) } if grain.Items[0].Quantity != 2 { t.Errorf("Expected quantity 2, got %d\n", grain.Items[0].Quantity) } result, err = grain.HandleMessage(msg, false) if err != nil { t.Errorf("Error handling message: %v\n", err) } if len(result) == 0 { t.Errorf("Expected result, got nil\n") } if grain.Items[0].Quantity != 4 { t.Errorf("Expected quantity 4, got %d\n", grain.Items[0].Quantity) } if grain.TotalPrice != 400 { t.Errorf("Expected total price 400, got %d\n", grain.TotalPrice) } } func TestSetDelivery(t *testing.T) { grain, err := spawn(ToCartId("kalle")) if err != nil { t.Errorf("Error spawning: %v\n", err) } if len(grain.Items) != 0 { t.Errorf("Expected 0 items, got %d\n", len(grain.Items)) } msg := GetMessage(AddItemType, &messages.AddItem{ Quantity: 2, Price: 100, Sku: "123", Name: "Test item", Image: "test.jpg", }) grain.HandleMessage(msg, false) msg = GetMessage(AddItemType, &messages.AddItem{ Quantity: 2, Price: 100, Sku: "123", Name: "Test item", Image: "test.jpg", }) result, err := grain.HandleMessage(msg, false) if err != nil { t.Errorf("Error handling message: %v\n", err) } if len(result) == 0 { t.Errorf("Expected result, got nil\n") } setDelivery := GetMessage(SetDeliveryType, &messages.SetDelivery{ Provider: "test", Items: []int64{1}, }) _, err = grain.HandleMessage(setDelivery, false) if err != nil { t.Errorf("Error handling message: %v\n", err) } if len(grain.Deliveries) != 1 { t.Errorf("Expected 1 delivery, got %d\n", len(grain.Deliveries)) } if len(grain.Deliveries[0].Items) != 1 { t.Errorf("Expected 1 items in delivery, got %d\n", len(grain.Deliveries[0].Items)) } } func TestSetDeliveryOnAll(t *testing.T) { grain, err := spawn(ToCartId("kalle")) if err != nil { t.Errorf("Error spawning: %v\n", err) } if len(grain.Items) != 0 { t.Errorf("Expected 0 items, got %d\n", len(grain.Items)) } msg := GetMessage(AddItemType, &messages.AddItem{ Quantity: 2, Price: 100, Sku: "123", Name: "Test item", Image: "test.jpg", }) grain.HandleMessage(msg, false) msg = GetMessage(AddItemType, &messages.AddItem{ Quantity: 2, Price: 100, Sku: "1233", Name: "Test item2", Image: "test.jpg", }) result, err := grain.HandleMessage(msg, false) if err != nil { t.Errorf("Error handling message: %v\n", err) } if len(result) == 0 { t.Errorf("Expected result, got nil\n") } setDelivery := GetMessage(SetDeliveryType, &messages.SetDelivery{ Provider: "test", Items: []int64{}, }) _, err = grain.HandleMessage(setDelivery, false) if err != nil { t.Errorf("Error handling message: %v\n", err) } if len(grain.Deliveries) != 1 { t.Errorf("Expected 1 delivery, got %d\n", len(grain.Deliveries)) } if len(grain.Deliveries[0].Items) != 2 { t.Errorf("Expected 2 items in delivery, got %d\n", len(grain.Deliveries[0].Items)) } }