mirror of
https://github.com/Kichiyaki/terraform-provider-woodpecker.git
synced 2024-06-02 02:38:03 +00:00
122 lines
4.4 KiB
Go
122 lines
4.4 KiB
Go
package internal_test
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"slices"
|
|
"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 TestUserResource(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
login := uuid.NewString()
|
|
newLogin := uuid.NewString()
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
|
|
CheckDestroy: checkUserResourceDestroy(login, newLogin),
|
|
Steps: []resource.TestStep{
|
|
{ // create user
|
|
Config: fmt.Sprintf(`
|
|
resource "woodpecker_user" "test_user" {
|
|
login = "%s"
|
|
}
|
|
`, login),
|
|
Check: resource.ComposeAggregateTestCheckFunc(
|
|
resource.TestCheckResourceAttrSet("woodpecker_user.test_user", "id"),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "login", login),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "email", ""),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "avatar_url", ""),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "is_active", "false"),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "is_admin", "false"),
|
|
),
|
|
},
|
|
{ // update user
|
|
Config: fmt.Sprintf(`
|
|
resource "woodpecker_user" "test_user" {
|
|
login = "%s"
|
|
email = "%s@localhost"
|
|
avatar_url = "http://localhost/%s"
|
|
is_admin = true
|
|
}
|
|
`, login, login, login),
|
|
Check: resource.ComposeAggregateTestCheckFunc(
|
|
resource.TestCheckResourceAttrSet("woodpecker_user.test_user", "id"),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "login", login),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "email", login+"@localhost"),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "avatar_url", "http://localhost/"+login),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "is_active", "false"),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "is_admin", "true"),
|
|
),
|
|
},
|
|
{ // update user
|
|
Config: fmt.Sprintf(`
|
|
resource "woodpecker_user" "test_user" {
|
|
login = "%s"
|
|
is_admin = false
|
|
}
|
|
`, login),
|
|
Check: resource.ComposeAggregateTestCheckFunc(
|
|
resource.TestCheckResourceAttrSet("woodpecker_user.test_user", "id"),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "login", login),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "email", login+"@localhost"),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "avatar_url", "http://localhost/"+login),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "is_active", "false"),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "is_admin", "false"),
|
|
),
|
|
},
|
|
{ // import
|
|
ResourceName: "woodpecker_user.test_user",
|
|
ImportState: true,
|
|
ImportStateId: login,
|
|
ImportStateVerify: true,
|
|
},
|
|
{ // replace user
|
|
Config: fmt.Sprintf(`
|
|
resource "woodpecker_user" "test_user" {
|
|
login = "%s"
|
|
}
|
|
`, newLogin),
|
|
ConfigPlanChecks: resource.ConfigPlanChecks{
|
|
PreApply: []plancheck.PlanCheck{
|
|
plancheck.ExpectResourceAction("woodpecker_user.test_user", plancheck.ResourceActionReplace),
|
|
},
|
|
},
|
|
Check: resource.ComposeAggregateTestCheckFunc(
|
|
resource.TestCheckResourceAttrSet("woodpecker_user.test_user", "id"),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "login", newLogin),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "email", ""),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "avatar_url", ""),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "is_active", "false"),
|
|
resource.TestCheckResourceAttr("woodpecker_user.test_user", "is_admin", "false"),
|
|
),
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
func checkUserResourceDestroy(logins ...string) func(state *terraform.State) error {
|
|
return func(state *terraform.State) error {
|
|
users, err := woodpeckerClient.UserList()
|
|
if err != nil {
|
|
return fmt.Errorf("couldn't list users: %w", err)
|
|
}
|
|
|
|
if slices.ContainsFunc(users, func(user *woodpecker.User) bool {
|
|
return slices.Contains(logins, user.Login)
|
|
}) {
|
|
return errors.New("at least one of the created users isn't deleted")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|