mirror of
https://github.com/ysoftdevs/terraform-provider-bitbucket.git
synced 2026-03-25 10:51:13 +01:00
add tests and mock server
This commit is contained in:
96
test/resource_token_test.go
Normal file
96
test/resource_token_test.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-framework/providerserver"
|
||||
"github.com/hashicorp/terraform-plugin-go/tfprotov6"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
|
||||
"github.com/hashicorp/terraform-plugin-testing/terraform"
|
||||
|
||||
provider "terraform-provider-bitbucket-token/internal/provider"
|
||||
mock "terraform-provider-bitbucket-token/mock_server"
|
||||
)
|
||||
|
||||
// Acceptance test provider factories for protocol v6
|
||||
var testAccProviderFactories = map[string]func() (tfprotov6.ProviderServer, error){
|
||||
"bitbucket": providerserver.NewProtocol6WithError(provider.NewProvider()),
|
||||
}
|
||||
|
||||
func TestAccBitbucketToken_CRUD(t *testing.T) {
|
||||
server := mock.NewMockBitbucketServer()
|
||||
|
||||
if err := server.Start(); err != nil {
|
||||
t.Fatalf("server start error: %v", err)
|
||||
}
|
||||
|
||||
resourceName := "bitbucket_token.test"
|
||||
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
ProtoV6ProviderFactories: testAccProviderFactories,
|
||||
CheckDestroy: testAccCheckBitbucketTokenDestroy(server),
|
||||
Steps: []resource.TestStep{
|
||||
{
|
||||
// CREATE
|
||||
Config: testAccBitbucketTokenConfig(server.URL),
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
resource.TestCheckResourceAttrSet(resourceName, "id"),
|
||||
resource.TestCheckResourceAttrSet(resourceName, "current_token_name"),
|
||||
resource.TestCheckResourceAttrSet(resourceName, "current_token_expiry"),
|
||||
resource.TestCheckResourceAttrSet(resourceName, "token"),
|
||||
),
|
||||
},
|
||||
{
|
||||
// READ (no drift) – apply the same config again; plan should stay empty
|
||||
Config: testAccBitbucketTokenConfig(server.URL),
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
//
|
||||
// -------- Helper Functions --------
|
||||
//
|
||||
|
||||
// Basic test configuration for the provider + resource
|
||||
func testAccBitbucketTokenConfig(url string) string {
|
||||
return fmt.Sprintf(`
|
||||
provider "bitbucket" {
|
||||
server_url = "%s"
|
||||
auth_header = "dummy"
|
||||
tls_skip_verify = true
|
||||
}
|
||||
|
||||
resource "bitbucket_token" "test" {
|
||||
project_name = "proj"
|
||||
repository_name = "repo"
|
||||
token_name = "prefix"
|
||||
}
|
||||
`, url)
|
||||
}
|
||||
|
||||
// Ensures Terraform acceptance test environment is correct
|
||||
func testAccPreCheck(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skipping acceptance tests in short mode")
|
||||
}
|
||||
}
|
||||
|
||||
// Verifies that all tokens were removed by Delete()
|
||||
func testAccCheckBitbucketTokenDestroy(server *mock.MockBitbucketServer) resource.TestCheckFunc {
|
||||
return func(s *terraform.State) error {
|
||||
server.Mu.Lock()
|
||||
defer server.Mu.Unlock()
|
||||
|
||||
// server.Tokens should be empty after resource.Delete()
|
||||
for _, tokens := range server.Tokens {
|
||||
if len(tokens) != 0 {
|
||||
return fmt.Errorf("expected no tokens, but found: %#v", server.Tokens)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user