mirror of
https://github.com/Kichiyaki/terraform-provider-woodpecker.git
synced 2024-06-02 02:38:03 +00:00
157 lines
5.6 KiB
Go
157 lines
5.6 KiB
Go
package internal_test
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"slices"
|
|
"strconv"
|
|
"testing"
|
|
|
|
"github.com/Kichiyaki/terraform-provider-woodpecker/internal/woodpecker"
|
|
"github.com/google/uuid"
|
|
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
|
|
"github.com/hashicorp/terraform-plugin-testing/plancheck"
|
|
"github.com/hashicorp/terraform-plugin-testing/terraform"
|
|
)
|
|
|
|
func TestRepositoryCronResource(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
giteaRepo := createRepo(t)
|
|
repo := activateRepo(t, giteaRepo)
|
|
branch := createBranch(t, giteaRepo)
|
|
newRepo := activateRepo(t, createRepo(t))
|
|
|
|
name := uuid.NewString()
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
|
|
CheckDestroy: checkRepositoryCronResourceDestroy(map[int64][]string{
|
|
repo.ID: {name},
|
|
newRepo.ID: {name},
|
|
}),
|
|
Steps: []resource.TestStep{
|
|
{ // create cron
|
|
Config: fmt.Sprintf(`
|
|
resource "woodpecker_repository_cron" "test_cron" {
|
|
repository_id = %d
|
|
name = "%s"
|
|
schedule = "@daily"
|
|
}
|
|
`, repo.ID, name),
|
|
Check: resource.ComposeAggregateTestCheckFunc(
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "id"),
|
|
resource.TestCheckResourceAttr(
|
|
"woodpecker_repository_cron.test_cron",
|
|
"repository_id",
|
|
strconv.FormatInt(repo.ID, 10),
|
|
),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "name", name),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "schedule", "@daily"),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "branch", ""),
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "created_at"),
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "creator_id"),
|
|
),
|
|
},
|
|
{ // update cron
|
|
Config: fmt.Sprintf(`
|
|
resource "woodpecker_repository_cron" "test_cron" {
|
|
repository_id = %d
|
|
name = "%s"
|
|
schedule = "@every 5m"
|
|
branch = "%s"
|
|
}
|
|
`, repo.ID, name, branch.Name),
|
|
Check: resource.ComposeAggregateTestCheckFunc(
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "id"),
|
|
resource.TestCheckResourceAttr(
|
|
"woodpecker_repository_cron.test_cron",
|
|
"repository_id",
|
|
strconv.FormatInt(repo.ID, 10),
|
|
),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "name", name),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "schedule", "@every 5m"),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "branch", branch.Name),
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "created_at"),
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "creator_id"),
|
|
),
|
|
},
|
|
{ // update cron
|
|
Config: fmt.Sprintf(`
|
|
resource "woodpecker_repository_cron" "test_cron" {
|
|
repository_id = %d
|
|
name = "%s"
|
|
schedule = "@daily"
|
|
}
|
|
//`, repo.ID, name),
|
|
Check: resource.ComposeAggregateTestCheckFunc(
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "id"),
|
|
resource.TestCheckResourceAttr(
|
|
"woodpecker_repository_cron.test_cron",
|
|
"repository_id",
|
|
strconv.FormatInt(repo.ID, 10),
|
|
),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "name", name),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "schedule", "@daily"),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "branch", branch.Name),
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "created_at"),
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "creator_id"),
|
|
),
|
|
},
|
|
{ // import
|
|
ResourceName: "woodpecker_repository_cron.test_cron",
|
|
ImportState: true,
|
|
ImportStateIdPrefix: strconv.FormatInt(repo.ID, 10) + "/",
|
|
ImportStateVerify: true,
|
|
},
|
|
{ // replace cron
|
|
Config: fmt.Sprintf(`
|
|
resource "woodpecker_repository_cron" "test_cron" {
|
|
repository_id = %d
|
|
name = "%s"
|
|
schedule = "@daily"
|
|
}
|
|
`, newRepo.ID, name),
|
|
ConfigPlanChecks: resource.ConfigPlanChecks{
|
|
PreApply: []plancheck.PlanCheck{
|
|
plancheck.ExpectResourceAction("woodpecker_repository_cron.test_cron", plancheck.ResourceActionReplace),
|
|
},
|
|
},
|
|
Check: resource.ComposeAggregateTestCheckFunc(
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "id"),
|
|
resource.TestCheckResourceAttr(
|
|
"woodpecker_repository_cron.test_cron",
|
|
"repository_id",
|
|
strconv.FormatInt(newRepo.ID, 10),
|
|
),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "name", name),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "schedule", "@daily"),
|
|
resource.TestCheckResourceAttr("woodpecker_repository_cron.test_cron", "branch", ""),
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "created_at"),
|
|
resource.TestCheckResourceAttrSet("woodpecker_repository_cron.test_cron", "creator_id"),
|
|
),
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
func checkRepositoryCronResourceDestroy(m map[int64][]string) func(state *terraform.State) error {
|
|
return func(state *terraform.State) error {
|
|
for repoID, names := range m {
|
|
crons, err := woodpeckerClient.CronList(repoID)
|
|
if err != nil {
|
|
return fmt.Errorf("couldn't list cron jobs: %w", err)
|
|
}
|
|
|
|
if slices.ContainsFunc(crons, func(cron *woodpecker.Cron) bool {
|
|
return slices.Contains(names, cron.Name)
|
|
}) {
|
|
return errors.New("at least one of the created cron jobs isn't deleted")
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|