Files
go-cart-actor/pkg/checkout/mutation_contact_details_updated_test.go
matst80 0ef29596c1
All checks were successful
Build and Publish / BuildAndDeployAmd64 (push) Successful in 46s
Build and Publish / BuildAndDeployArm64 (push) Successful in 4m25s
update
2025-12-04 14:19:00 +01:00

95 lines
2.9 KiB
Go

package checkout
import (
"testing"
checkout_messages "git.k6n.net/go-cart-actor/proto/checkout"
)
func TestHandleContactDetailsUpdated(t *testing.T) {
tests := []struct {
name string
initial *ContactDetails
update *checkout_messages.ContactDetailsUpdated
expected *ContactDetails
}{
{
name: "update all fields",
initial: nil,
update: &checkout_messages.ContactDetailsUpdated{
Email: stringPtr("test@example.com"),
Phone: stringPtr("123456789"),
Name: stringPtr("John Doe"),
},
expected: &ContactDetails{
Email: stringPtr("test@example.com"),
Phone: stringPtr("123456789"),
Name: stringPtr("John Doe"),
},
},
{
name: "update partial fields",
initial: &ContactDetails{
Email: stringPtr("old@example.com"),
Phone: nil,
Name: stringPtr("Old Name"),
},
update: &checkout_messages.ContactDetailsUpdated{
Phone: stringPtr("987654321"),
},
expected: &ContactDetails{
Email: stringPtr("old@example.com"),
Phone: stringPtr("987654321"),
Name: stringPtr("Old Name"),
},
},
{
name: "nil message",
initial: nil,
update: nil,
expected: &ContactDetails{}, // but error expected
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
grain := &CheckoutGrain{
ContactDetails: tt.initial,
}
err := HandleContactDetailsUpdated(grain, tt.update)
if tt.name == "nil message" {
if err == nil {
t.Errorf("expected error for nil message, got nil")
}
return
}
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if grain.ContactDetails == nil && tt.expected != nil {
t.Errorf("expected contact details, got nil")
} else if grain.ContactDetails != nil && tt.expected == nil {
t.Errorf("expected nil contact details, got %v", grain.ContactDetails)
} else if grain.ContactDetails != nil && tt.expected != nil {
if (grain.ContactDetails.Email == nil && tt.expected.Email != nil) || (grain.ContactDetails.Email != nil && tt.expected.Email == nil) || (grain.ContactDetails.Email != nil && *grain.ContactDetails.Email != *tt.expected.Email) {
t.Errorf("email mismatch: got %v, expected %v", grain.ContactDetails.Email, tt.expected.Email)
}
if (grain.ContactDetails.Phone == nil && tt.expected.Phone != nil) || (grain.ContactDetails.Phone != nil && tt.expected.Phone == nil) || (grain.ContactDetails.Phone != nil && *grain.ContactDetails.Phone != *tt.expected.Phone) {
t.Errorf("phone mismatch: got %v, expected %v", grain.ContactDetails.Phone, tt.expected.Phone)
}
if (grain.ContactDetails.Name == nil && tt.expected.Name != nil) || (grain.ContactDetails.Name != nil && tt.expected.Name == nil) || (grain.ContactDetails.Name != nil && *grain.ContactDetails.Name != *tt.expected.Name) {
t.Errorf("name mismatch: got %v, expected %v", grain.ContactDetails.Name, tt.expected.Name)
}
}
})
}
}
func stringPtr(s string) *string {
return &s
}