package repository import ( "regexp" "testing" "github.com/DATA-DOG/go-sqlmock" "github.com/wmms/wmms/internal/model" "github.com/wmms/wmms/pkg/database" ) func TestPartnerCreateSeparatesLegalEntityAndOrganizationRelationship(t *testing.T) { db, mock, err := sqlmock.New() if err != nil { t.Fatalf("open sql mock: %v", err) } t.Cleanup(func() { database.DB = nil; db.Close() }) database.DB = db partner := &model.BusinessPartner{ OrganizationID: 1, PartnerCode: "SUP-001", LegalName: "示例供应商", IsSupplier: true, SupplierStatus: "active", } mock.ExpectBegin() mock.ExpectExec(regexp.QuoteMeta(`INSERT INTO business_partners (legal_name, unified_credit_code, contact_name, contact_phone, address) VALUES (?, NULLIF(?, ''), NULLIF(?, ''), NULLIF(?, ''), NULLIF(?, ''))`)). WithArgs("示例供应商", "", "", "", ""). WillReturnResult(sqlmock.NewResult(9, 1)) mock.ExpectExec(regexp.QuoteMeta(`INSERT INTO organization_partners (organization_id, business_partner_id, partner_code, is_supplier, is_customer, supplier_status, customer_status, settlement_currency, payment_terms) VALUES (?, ?, ?, ?, ?, NULLIF(?, ''), NULLIF(?, ''), NULLIF(?, ''), NULLIF(?, ''))`)). WithArgs(int64(1), int64(9), "SUP-001", true, false, "active", "", "", ""). WillReturnResult(sqlmock.NewResult(15, 1)) mock.ExpectCommit() if err := NewPartnerRepository().Create(partner); err != nil { t.Fatalf("create partner: %v", err) } if partner.ID != 15 || partner.BusinessPartnerID != 9 { t.Fatalf("unexpected identifiers: %+v", partner) } if err := mock.ExpectationsWereMet(); err != nil { t.Fatal(err) } }