package service import ( "errors" "regexp" "testing" "github.com/DATA-DOG/go-sqlmock" "github.com/wmms/wmms/internal/model" "github.com/wmms/wmms/pkg/database" ) func TestMaterialServiceRejectsInvalidCategory(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 query := `SELECT EXISTS( SELECT 1 FROM material_categories WHERE id = ? AND organization_id = ? AND parent_id IS NOT NULL AND status = 'active' )` mock.ExpectQuery(regexp.QuoteMeta(query)).WithArgs(int64(12), int64(1)). WillReturnRows(sqlmock.NewRows([]string{"exists"}).AddRow(false)) categoryID := int64(12) _, err = NewMaterialService().Create(&model.CreateMaterialRequest{ OrganizationID: 1, MaterialCode: "MAT-001", Name: "轴承", CategoryID: &categoryID, }, "tester") if !errors.Is(err, ErrInvalidMaterialCategory) { t.Fatalf("create error = %v, want ErrInvalidMaterialCategory", err) } if err := mock.ExpectationsWereMet(); err != nil { t.Fatal(err) } }