terraform-provider-woodpecker/internal/resource_user_test.go

122 lines
4.4 KiB
Go
Raw Normal View History

2023-08-27 06:17:27 +00:00
package internal_test
import (
2023-08-28 05:59:47 +00:00
"errors"
2023-08-27 06:17:27 +00:00
"fmt"
2023-08-28 05:59:47 +00:00
"slices"
2023-08-27 06:17:27 +00:00
"testing"
2023-11-26 15:29:01 +00:00
"github.com/Kichiyaki/terraform-provider-woodpecker/internal/woodpecker"
2023-08-27 06:17:27 +00:00
"github.com/google/uuid"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/plancheck"
2023-08-28 05:59:47 +00:00
"github.com/hashicorp/terraform-plugin-testing/terraform"
2023-08-27 06:17:27 +00:00
)
2023-09-02 05:13:07 +00:00
func TestUserResource(t *testing.T) {
2023-08-27 06:17:27 +00:00
t.Parallel()
login := uuid.NewString()
newLogin := uuid.NewString()
2023-08-28 05:59:47 +00:00
2023-08-27 06:17:27 +00:00
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
CheckDestroy: checkUserResourceDestroy(login, newLogin),
2023-08-27 06:17:27 +00:00
Steps: []resource.TestStep{
2023-08-28 05:59:47 +00:00
{ // create user
2023-08-27 06:17:27 +00:00
Config: fmt.Sprintf(`
resource "woodpecker_user" "test_user" {
login = "%s"
}
`, login),
Check: resource.ComposeAggregateTestCheckFunc(
2023-08-28 05:59:47 +00:00
resource.TestCheckResourceAttrSet("woodpecker_user.test_user", "id"),
2023-08-27 06:17:27 +00:00
resource.TestCheckResourceAttr("woodpecker_user.test_user", "login", login),
resource.TestCheckResourceAttr("woodpecker_user.test_user", "email", ""),
2023-09-02 05:11:10 +00:00
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"),
2023-08-27 06:17:27 +00:00
),
},
2023-08-28 05:59:47 +00:00
{ // update user
2023-08-27 06:17:27 +00:00
Config: fmt.Sprintf(`
resource "woodpecker_user" "test_user" {
login = "%s"
email = "%s@localhost"
2023-09-02 05:11:10 +00:00
avatar_url = "http://localhost/%s"
is_admin = true
2023-08-27 06:17:27 +00:00
}
`, login, login, login),
Check: resource.ComposeAggregateTestCheckFunc(
2023-08-28 05:59:47 +00:00
resource.TestCheckResourceAttrSet("woodpecker_user.test_user", "id"),
2023-08-27 06:17:27 +00:00
resource.TestCheckResourceAttr("woodpecker_user.test_user", "login", login),
resource.TestCheckResourceAttr("woodpecker_user.test_user", "email", login+"@localhost"),
2023-09-02 05:11:10 +00:00
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"),
2023-08-27 06:17:27 +00:00
),
},
2023-09-02 05:11:10 +00:00
{ // update user
2023-08-27 06:17:27 +00:00
Config: fmt.Sprintf(`
resource "woodpecker_user" "test_user" {
login = "%s"
2023-09-02 05:11:10 +00:00
is_admin = false
2023-08-27 06:17:27 +00:00
}
`, login),
Check: resource.ComposeAggregateTestCheckFunc(
2023-08-28 05:59:47 +00:00
resource.TestCheckResourceAttrSet("woodpecker_user.test_user", "id"),
2023-08-27 06:17:27 +00:00
resource.TestCheckResourceAttr("woodpecker_user.test_user", "login", login),
resource.TestCheckResourceAttr("woodpecker_user.test_user", "email", login+"@localhost"),
2023-09-02 05:11:10 +00:00
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"),
2023-08-27 06:17:27 +00:00
),
},
2023-08-28 05:59:47 +00:00
{ // import
2023-08-27 06:17:27 +00:00
ResourceName: "woodpecker_user.test_user",
ImportState: true,
ImportStateId: login,
ImportStateVerify: true,
},
2023-08-28 05:59:47 +00:00
{ // replace user
2023-08-27 06:17:27 +00:00
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(
2023-08-28 05:59:47 +00:00
resource.TestCheckResourceAttrSet("woodpecker_user.test_user", "id"),
2023-08-27 06:17:27 +00:00
resource.TestCheckResourceAttr("woodpecker_user.test_user", "login", newLogin),
resource.TestCheckResourceAttr("woodpecker_user.test_user", "email", ""),
2023-09-02 05:11:10 +00:00
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"),
2023-08-27 06:17:27 +00:00
),
},
},
})
}
2023-08-28 05:59:47 +00:00
func checkUserResourceDestroy(logins ...string) func(state *terraform.State) error {
2023-08-28 05:59:47 +00:00
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
}
}