package service import ( "encoding/json" "testing" "github.com/DATA-DOG/go-sqlmock" "github.com/wmms/wmms/internal/model" "github.com/wmms/wmms/pkg/database" ) func TestManufacturerCanBeTheOnlyPartnerRole(t *testing.T) { var item model.BusinessPartner if err := json.Unmarshal([]byte(`{"is_manufacturer":true,"legal_name":"制造企业","partner_code":"MFG-001"}`), &item); err != nil { t.Fatal(err) } if err := normalizePartner(&item); err != nil { t.Fatalf("manufacturer role rejected: %v", err) } } func TestManufacturerServiceListAcceptsRole(t *testing.T) { db, mock, err := sqlmock.New() if err != nil { t.Fatal(err) } database.DB = db t.Cleanup(func() { database.DB = nil; db.Close() }) mock.ExpectQuery(`SELECT COUNT\(\*\).*op.is_manufacturer = TRUE`).WithArgs(int64(2)).WillReturnRows(sqlmock.NewRows([]string{"total"}).AddRow(0)) mock.ExpectQuery(`SELECT op.id.*op.is_manufacturer = TRUE`).WithArgs(int64(2), 20, 0).WillReturnRows(sqlmock.NewRows([]string{"id"})) items, total, err := NewPartnerService().List(2, "manufacturer", 20, 0, "") if err != nil { t.Fatal(err) } if total != 0 || len(items) != 0 { t.Fatalf("unexpected list: %v / %v", items, total) } if err := mock.ExpectationsWereMet(); err != nil { t.Fatal(err) } }