45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
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)
|
|
}
|
|
}
|