package model import ( "testing" "go.mongodb.org/mongo-driver/v2/bson" ) func TestPaymentMethodAsCardReadsStoredSnakeCaseExpiry(t *testing.T) { data, err := bson.Marshal(bson.M{ "pan": "2200001100000001", "firstName": "S", "lastName": "S", "exp_month": 12.0, "exp_year": 2031.0, "country": nil, }) if err != nil { t.Fatalf("marshal card data: %v", err) } card, err := (&PaymentMethod{ Type: PaymentTypeCard, Data: data, }).AsCard() if err != nil { t.Fatalf("AsCard returned error: %v", err) } if got, want := card.ExpMonth, 12; got == nil || *got != want { t.Fatalf("exp_month mismatch: got=%v want=%d", got, want) } if got, want := card.ExpYear, 2031; got == nil || *got != want { t.Fatalf("exp_year mismatch: got=%v want=%d", got, want) } } func TestCardPaymentDataMarshalUsesStoredSnakeCaseExpiry(t *testing.T) { expMonth := 12 expYear := 2031 raw, err := bson.Marshal(CardPaymentData{ Pan: "2200001100000001", FirstName: "S", LastName: "S", ExpMonth: &expMonth, ExpYear: &expYear, }) if err != nil { t.Fatalf("marshal card data: %v", err) } var data bson.M if err := bson.Unmarshal(raw, &data); err != nil { t.Fatalf("unmarshal card data: %v", err) } if got, want := paymentDataInt(data["exp_month"]), 12; got == nil || *got != want { t.Fatalf("stored exp_month mismatch: got=%v want=%d", got, want) } if got, want := paymentDataInt(data["exp_year"]), 2031; got == nil || *got != want { t.Fatalf("stored exp_year mismatch: got=%v want=%d", got, want) } if _, ok := data["expMonth"]; ok { t.Fatalf("card data must not store camelCase expMonth: %#v", data) } if _, ok := data["expYear"]; ok { t.Fatalf("card data must not store camelCase expYear: %#v", data) } }