terraform-provider-gitea/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource/testcase_validate.go
dependabot[bot] 910ccdb092
Bump github.com/hashicorp/terraform-plugin-sdk/v2 from 2.26.1 to 2.27.0
Bumps [github.com/hashicorp/terraform-plugin-sdk/v2](https://github.com/hashicorp/terraform-plugin-sdk) from 2.26.1 to 2.27.0.
- [Release notes](https://github.com/hashicorp/terraform-plugin-sdk/releases)
- [Changelog](https://github.com/hashicorp/terraform-plugin-sdk/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hashicorp/terraform-plugin-sdk/compare/v2.26.1...v2.27.0)

---
updated-dependencies:
- dependency-name: github.com/hashicorp/terraform-plugin-sdk/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-03 20:21:30 +00:00

88 lines
2.4 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package resource
import (
"context"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging"
)
// hasProviders returns true if the TestCase has set any of the
// ExternalProviders, ProtoV5ProviderFactories, ProtoV6ProviderFactories,
// ProviderFactories, or Providers fields.
func (c TestCase) hasProviders(_ context.Context) bool {
if len(c.ExternalProviders) > 0 {
return true
}
if len(c.ProtoV5ProviderFactories) > 0 {
return true
}
if len(c.ProtoV6ProviderFactories) > 0 {
return true
}
if len(c.ProviderFactories) > 0 {
return true
}
if len(c.Providers) > 0 {
return true
}
return false
}
// validate ensures the TestCase is valid based on the following criteria:
//
// - No overlapping ExternalProviders and Providers entries
// - No overlapping ExternalProviders and ProviderFactories entries
// - TestStep validations performed by the (TestStep).validate() method.
func (c TestCase) validate(ctx context.Context) error {
logging.HelperResourceTrace(ctx, "Validating TestCase")
if len(c.Steps) == 0 {
err := fmt.Errorf("TestCase missing Steps")
logging.HelperResourceError(ctx, "TestCase validation error", map[string]interface{}{logging.KeyError: err})
return err
}
for name := range c.ExternalProviders {
if _, ok := c.Providers[name]; ok {
err := fmt.Errorf("TestCase provider %q set in both ExternalProviders and Providers", name)
logging.HelperResourceError(ctx, "TestCase validation error", map[string]interface{}{logging.KeyError: err})
return err
}
if _, ok := c.ProviderFactories[name]; ok {
err := fmt.Errorf("TestCase provider %q set in both ExternalProviders and ProviderFactories", name)
logging.HelperResourceError(ctx, "TestCase validation error", map[string]interface{}{logging.KeyError: err})
return err
}
}
testCaseHasProviders := c.hasProviders(ctx)
for stepIndex, step := range c.Steps {
stepNumber := stepIndex + 1 // Use 1-based index for humans
stepValidateReq := testStepValidateRequest{
StepNumber: stepNumber,
TestCaseHasProviders: testCaseHasProviders,
}
err := step.validate(ctx, stepValidateReq)
if err != nil {
err := fmt.Errorf("TestStep %d/%d validation error: %w", stepNumber, len(c.Steps), err)
logging.HelperResourceError(ctx, "TestCase validation error", map[string]interface{}{logging.KeyError: err})
return err
}
}
return nil
}