package service import ( "testing" "time" "github.com/DATA-DOG/go-sqlmock" "github.com/wmms/wmms/internal/model" ) // 普通审批(不扣库存)沿用已有规则:只要求公司授权、状态待审和相关物料合法,公司没有 // 启用仓库也必须能审批,不能因为无法解析库存维度而返回 ErrInventoryScopeUnavailable。 // 这里只登记审批必需的查询;若代码先解析仓库 scope,sqlmock 会因未预期语句失败。 func TestApproveWithoutAutoOutboundDoesNotRequireInventoryScope(t *testing.T) { mock := outboundMock(t) now := time.Now() mock.ExpectQuery("SELECT a.id, a.user_id, a.purpose").WithArgs(int64(1)).WillReturnRows( sqlmock.NewRows([]string{"id", "user_id", "purpose", "status", "rejection_reason", "approved_by", "created_at", "updated_at", "username"}). AddRow(1, 2, "领用", model.ApplicationStatusPending, "", 0, now, now, "alice")) mock.ExpectQuery("SELECT ai.id, ai.application_id").WithArgs(int64(1)).WillReturnRows( sqlmock.NewRows([]string{"id", "application_id", "material_id", "quantity", "material_code", "name"}). AddRow(11, 1, 7, 2, "M-1", "Material")) mock.ExpectExec("UPDATE material_applications SET status").WithArgs(model.ApplicationStatusApproved, int64(9), int64(1)).WillReturnResult(sqlmock.NewResult(0, 1)) if err := NewApplicationService().Approve(1, 1, 9, false); err != nil { t.Fatalf("普通审批不应要求仓库配置,got %v", err) } if err := mock.ExpectationsWereMet(); err != nil { t.Fatal(err) } }