diff --git a/admin_run.go b/admin_run.go index 36e756037..b0467aa67 100644 --- a/admin_run.go +++ b/admin_run.go @@ -134,11 +134,30 @@ func (o *AdminRunsListOptions) valid() error { func validateAdminRunFilterParams(runStatus string) error { // For the platform, an invalid filter value is a semantically understood query that returns an empty set, no error, no warning. But for go-tfe, an invalid value is good enough reason to error prior to a network call to the platform: if validString(&runStatus) { - runStatuses := strings.Split(runStatus, ",") + sanitizedRunstatus := strings.TrimSpace(runStatus) + runStatuses := strings.Split(sanitizedRunstatus, ",") // iterate over our statuses, and ensure it is valid. for _, status := range runStatuses { switch status { - case string(RunApplied), string(RunApplyQueued), string(RunApplying), string(RunCanceled), string(RunConfirmed), string(RunCostEstimate), string(RunCostEstimating), string(RunDiscarded), string(RunErrored), string(RunPending), string(RunPlanQueued), string(RunPlanned), string(RunPlannedAndFinished), string(RunPlanning), string(RunPolicyChecked), string(RunPolicyChecking), string(RunPolicyOverride), string(RunPolicySoftFailed): + case string(RunApplied), + string(RunApplyQueued), + string(RunApplying), + string(RunCanceled), + string(RunConfirmed), + string(RunCostEstimate), + string(RunCostEstimating), + string(RunDiscarded), + string(RunErrored), + string(RunPending), + string(RunPlanQueued), + string(RunPlanned), + string(RunPlannedAndFinished), + string(RunPlanning), + string(RunPolicyChecked), + string(RunPolicyChecking), + string(RunPolicyOverride), + string(RunPolicySoftFailed), + "": // do nothing default: return fmt.Errorf(`invalid value "%s" for run status`, status) diff --git a/admin_run_integration_test.go b/admin_run_integration_test.go index 20d092aca..5bd2b884a 100644 --- a/admin_run_integration_test.go +++ b/admin_run_integration_test.go @@ -252,6 +252,15 @@ func TestAdminRuns_AdminRunsListOptions_valid(t *testing.T) { err := opts.valid() assert.Error(t, err) }) + + t.Run("has trailing comma and trailing space", func(t *testing.T) { + opts := AdminRunsListOptions{ + RunStatus: "pending, ", + } + + err := opts.valid() + assert.NoError(t, err) + }) } func TestAdminRun_ForceCancel_Marshal(t *testing.T) {