52 lines
1.6 KiB
Go
52 lines
1.6 KiB
Go
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)
|
|
}
|
|
}
|