Skip to content

Commit

Permalink
Consolidate logic to get resources from state
Browse files Browse the repository at this point in the history
  • Loading branch information
mitchnielsen committed Feb 7, 2025
1 parent 0c2bb2d commit fd13849
Show file tree
Hide file tree
Showing 12 changed files with 139 additions and 104 deletions.
19 changes: 7 additions & 12 deletions internal/provider/resources/automation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -478,20 +478,15 @@ func TestAccResource_automation(t *testing.T) {

func testAccCheckAutomationResourceExists(automationResourceName string, automation *api.Automation) resource.TestCheckFunc {
return func(s *terraform.State) error {
// find the corresponding state object
automationResource, ok := s.RootModule().Resources[automationResourceName]
if !ok {
return fmt.Errorf("Resource not found in state: %s", automationResourceName)
automationID, err := testutils.GetResourceIDFromState(s, automationResourceName)
if err != nil {
return fmt.Errorf("unable to get resource ID from state: %w", err)
}

automationID, _ := uuid.Parse(automationResource.Primary.ID)

// Get the workspace resource we just created from the state
workspaceResource, exists := s.RootModule().Resources[testutils.WorkspaceResourceName]
if !exists {
return fmt.Errorf("workspace resource not found: %s", testutils.WorkspaceResourceName)
workspaceID, err := testutils.GetResourceWorkspaceIDFromState(s)
if err != nil {
return fmt.Errorf("unable to get workspaceID from state: %w", err)
}
workspaceID, _ := uuid.Parse(workspaceResource.Primary.ID)

// Initialize the client with the associated workspaceID
// NOTE: the accountID is inherited by the one set in the test environment
Expand All @@ -502,7 +497,7 @@ func testAccCheckAutomationResourceExists(automationResourceName string, automat
return fmt.Errorf("Error fetching Automation: %w", err)
}
if fetchedAutomation == nil {
return fmt.Errorf("Automation not found for ID: %s", automationResource.Primary.ID)
return fmt.Errorf("Automation not found for ID: %s", automationID)
}

*automation = *fetchedAutomation
Expand Down
14 changes: 6 additions & 8 deletions internal/provider/resources/block_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,18 +143,16 @@ func TestAccResource_block(t *testing.T) {
func testAccCheckBlockExists(blockResourceName string, blockDocument *api.BlockDocument) resource.TestCheckFunc {
return func(s *terraform.State) error {
// Get the block resource we just created from the state
blockResource, exists := s.RootModule().Resources[blockResourceName]
if !exists {
return fmt.Errorf("block resource not found: %s", blockResourceName)
blockID, err := testutils.GetResourceIDFromState(s, blockResourceName)
if err != nil {
return fmt.Errorf("error fetching block ID: %w", err)
}
blockID, _ := uuid.Parse(blockResource.Primary.ID)

// Get the workspace resource we just created from the state
workspaceResource, exists := s.RootModule().Resources[testutils.WorkspaceResourceName]
if !exists {
return fmt.Errorf("workspace resource not found: %s", testutils.WorkspaceResourceName)
workspaceID, err := testutils.GetResourceWorkspaceIDFromState(s)
if err != nil {
return fmt.Errorf("error fetching workspace ID: %w", err)
}
workspaceID, _ := uuid.Parse(workspaceResource.Primary.ID)

// Initialize the client with the associated workspaceID
// NOTE: the accountID is inherited by the one set in the test environment
Expand Down
14 changes: 6 additions & 8 deletions internal/provider/resources/deployment_access_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,18 +125,16 @@ func TestAccResource_deployment_access(t *testing.T) {
func testAccCheckDeploymentAccessExists(deploymentAccessResourceName string, deploymentAccess *api.DeploymentAccessControl) resource.TestCheckFunc {
return func(s *terraform.State) error {
// Get the deployment access resource we just created from the state
deploymentAccessResource, exists := s.RootModule().Resources[deploymentAccessResourceName]
if !exists {
return fmt.Errorf("deployment access resource not found: %s", deploymentAccessResourceName)
deploymentAccessID, err := testutils.GetResourceIDFromStateByAttribute(s, deploymentAccessResourceName, "deployment_id")
if err != nil {
return fmt.Errorf("error fetching deployment access ID: %w", err)
}
deploymentAccessID, _ := uuid.Parse(deploymentAccessResource.Primary.Attributes["deployment_id"])

// Get the workspace resource we just created from the state
workspaceResource, exists := s.RootModule().Resources[testutils.WorkspaceResourceName]
if !exists {
return fmt.Errorf("workspace resource not found: %s", testutils.WorkspaceResourceName)
workspaceID, err := testutils.GetResourceIDFromState(s, testutils.WorkspaceResourceName)
if err != nil {
return fmt.Errorf("error fetching workspace ID: %w", err)
}
workspaceID, _ := uuid.Parse(workspaceResource.Primary.ID)

// Initialize the client with the associated workspaceID
// NOTE: the accountID is inherited by the one set in the test environment
Expand Down
14 changes: 6 additions & 8 deletions internal/provider/resources/deployment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -382,18 +382,16 @@ func TestAccResource_deployment(t *testing.T) {
func testAccCheckDeploymentExists(deploymentResourceName string, deployment *api.Deployment) resource.TestCheckFunc {
return func(s *terraform.State) error {
// Get the deployment resource we just created from the state
deploymentResource, exists := s.RootModule().Resources[deploymentResourceName]
if !exists {
return fmt.Errorf("deployment resource not found: %s", deploymentResourceName)
deploymentID, err := testutils.GetResourceIDFromState(s, deploymentResourceName)
if err != nil {
return fmt.Errorf("error fetching deployment ID: %w", err)
}
deploymentID, _ := uuid.Parse(deploymentResource.Primary.ID)

// Get the workspace resource we just created from the state
workspaceResource, exists := s.RootModule().Resources[testutils.WorkspaceResourceName]
if !exists {
return fmt.Errorf("workspace resource not found: %s", testutils.WorkspaceResourceName)
workspaceID, err := testutils.GetResourceIDFromState(s, testutils.WorkspaceResourceName)
if err != nil {
return fmt.Errorf("error fetching workspace ID: %w", err)
}
workspaceID, _ := uuid.Parse(workspaceResource.Primary.ID)

// Initialize the client with the associated workspaceID
// NOTE: the accountID is inherited by the one set in the test environment
Expand Down
10 changes: 5 additions & 5 deletions internal/provider/resources/service_account_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,20 +209,20 @@ func TestAccResource_service_account(t *testing.T) {
func testAccCheckServiceAccountResourceExists(serviceAccountResourceName string, bot *api.ServiceAccount) resource.TestCheckFunc {
return func(state *terraform.State) error {
// find the corresponding state object
serviceAccountResource, ok := state.RootModule().Resources[serviceAccountResourceName]
if !ok {
return fmt.Errorf("Resource not found in state: %s", serviceAccountResourceName)
serviceAccountResourceID, err := testutils.GetResourceIDFromState(state, serviceAccountResourceName)
if err != nil {
return fmt.Errorf("error fetching service account ID: %w", err)
}

// Create a new client, and use the default accountID from environment
c, _ := testutils.NewTestClient()
serviceAccountClient, _ := c.ServiceAccounts(uuid.Nil)
fetchedServiceAccount, err := serviceAccountClient.Get(context.Background(), serviceAccountResource.Primary.ID)
fetchedServiceAccount, err := serviceAccountClient.Get(context.Background(), serviceAccountResourceID.String())
if err != nil {
return fmt.Errorf("Error fetching Service Account: %w", err)
}
if fetchedServiceAccount == nil {
return fmt.Errorf("Service Account not found for ID: %s", serviceAccountResource.Primary.ID)
return fmt.Errorf("Service Account not found for ID: %s", serviceAccountResourceID)
}

*bot = *fetchedServiceAccount
Expand Down
18 changes: 7 additions & 11 deletions internal/provider/resources/variable_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,30 +136,26 @@ func TestAccResource_variable(t *testing.T) {

func testAccCheckVariableExists(variableResourceName string, variable *api.Variable) resource.TestCheckFunc {
return func(state *terraform.State) error {
variableResource, exists := state.RootModule().Resources[variableResourceName]
if !exists {
return fmt.Errorf("Resource not found in state: %s", variableResourceName)
variableResourceID, err := testutils.GetResourceIDFromState(state, variableResourceName)
if err != nil {
return fmt.Errorf("error fetching variable ID: %w", err)
}
variableResourceID, _ := uuid.Parse(variableResource.Primary.ID)

workspaceResource, exists := state.RootModule().Resources[testutils.WorkspaceResourceName]
if !exists {
return fmt.Errorf("Resource not found in state: %s", testutils.WorkspaceResourceName)
workspaceID, err := testutils.GetResourceWorkspaceIDFromState(state)
if err != nil {
return fmt.Errorf("error fetching workspace ID: %w", err)
}
workspaceID, _ := uuid.Parse(workspaceResource.Primary.ID)

// Create a new client, and use the default configurations from the environment
c, _ := testutils.NewTestClient()
variablesClient, _ := c.Variables(uuid.Nil, workspaceID)

variableName := variableResource.Primary.Attributes["name"]

fetchedVariable, err := variablesClient.Get(context.Background(), variableResourceID)
if err != nil {
return fmt.Errorf("Error fetching variable: %w", err)
}
if fetchedVariable == nil {
return fmt.Errorf("Variable not found for name: %s", variableName)
return fmt.Errorf("Variable not found for id: %s", variableResourceID)
}

*variable = *fetchedVariable
Expand Down
17 changes: 8 additions & 9 deletions internal/provider/resources/webhooks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,27 +143,26 @@ func TestAccResource_webhook(t *testing.T) {

func testAccCheckWebhookExists(webhookResourceName string, webhook *api.Webhook) resource.TestCheckFunc {
return func(state *terraform.State) error {
webhookResource, exists := state.RootModule().Resources[webhookResourceName]
if !exists {
return fmt.Errorf("Resource not found in state: %s", webhookResourceName)
webhookResourceID, err := testutils.GetResourceIDFromState(state, webhookResourceName)
if err != nil {
return fmt.Errorf("error fetching webhook ID: %w", err)
}

workspaceResource, exists := state.RootModule().Resources[testutils.WorkspaceResourceName]
if !exists {
return fmt.Errorf("Resource not found in state: %s", testutils.WorkspaceResourceName)
workspaceID, err := testutils.GetResourceWorkspaceIDFromState(state)
if err != nil {
return fmt.Errorf("error fetching workspace ID: %w", err)
}
workspaceID, _ := uuid.Parse(workspaceResource.Primary.ID)

// Create a new client, and use the default configurations from the environment
c, _ := testutils.NewTestClient()
webhooksClient, _ := c.Webhooks(uuid.Nil, workspaceID)

fetchedWebhook, err := webhooksClient.Get(context.Background(), webhookResource.Primary.ID)
fetchedWebhook, err := webhooksClient.Get(context.Background(), webhookResourceID.String())
if err != nil {
return fmt.Errorf("Error fetching webhook: %w", err)
}
if fetchedWebhook == nil {
return fmt.Errorf("Webhook not found for ID: %s", webhookResource.Primary.ID)
return fmt.Errorf("Webhook not found for ID: %s", webhookResourceID)
}

*webhook = *fetchedWebhook
Expand Down
15 changes: 6 additions & 9 deletions internal/provider/resources/work_pool_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,23 +139,20 @@ func TestAccResource_work_pool(t *testing.T) {

func testAccCheckWorkPoolExists(workPoolResourceName string, workPool *api.WorkPool) resource.TestCheckFunc {
return func(state *terraform.State) error {
workPoolResource, exists := state.RootModule().Resources[workPoolResourceName]
if !exists {
return fmt.Errorf("Resource not found in state: %s", workPoolResourceName)
workPoolName, err := testutils.GetResourceAttributeFromStateByAttribute(state, workPoolResourceName, "name")
if err != nil {
return fmt.Errorf("error fetching work pool name: %w", err)
}

workspaceResource, exists := state.RootModule().Resources[testutils.WorkspaceResourceName]
if !exists {
return fmt.Errorf("Resource not found in state: %s", testutils.WorkspaceResourceName)
workspaceID, err := testutils.GetResourceWorkspaceIDFromState(state)
if err != nil {
return fmt.Errorf("error fetching workspace ID: %w", err)
}
workspaceID, _ := uuid.Parse(workspaceResource.Primary.ID)

// Create a new client, and use the default configurations from the environment
c, _ := testutils.NewTestClient()
workPoolsClient, _ := c.WorkPools(uuid.Nil, workspaceID)

workPoolName := workPoolResource.Primary.Attributes["name"]

fetchedWorkPool, err := workPoolsClient.Get(context.Background(), workPoolName)
if err != nil {
return fmt.Errorf("Error fetching work pool: %w", err)
Expand Down
15 changes: 6 additions & 9 deletions internal/provider/resources/workspace_access_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,19 +176,16 @@ func TestAccResource_team_workspace_access(t *testing.T) {

func testAccCheckWorkspaceAccessExists(accessorType string, accessResourceName string, access *api.WorkspaceAccess) resource.TestCheckFunc {
return func(state *terraform.State) error {
workspaceAccessResource, exists := state.RootModule().Resources[accessResourceName]
if !exists {
return fmt.Errorf("Resource not found in state: %s", accessResourceName)
workspaceAccessID, err := testutils.GetResourceIDFromState(state, accessResourceName)
if err != nil {
return fmt.Errorf("error fetching workspace access ID: %w", err)
}

workspaceDatsource, exists := state.RootModule().Resources[testutils.WorkspaceResourceName]
if !exists {
return fmt.Errorf("Resource not found in state: %s", testutils.WorkspaceResourceName)
workspaceID, err := testutils.GetResourceWorkspaceIDFromState(state)
if err != nil {
return fmt.Errorf("error fetching workspace ID: %w", err)
}

workspaceID, _ := uuid.Parse(workspaceDatsource.Primary.ID)
workspaceAccessID, _ := uuid.Parse(workspaceAccessResource.Primary.ID)

// Create a new client, and use the default accountID from environment
c, _ := testutils.NewTestClient()
workspaceAccessClient, _ := c.WorkspaceAccess(uuid.Nil, workspaceID)
Expand Down
23 changes: 11 additions & 12 deletions internal/provider/resources/workspace_role_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,34 +74,33 @@ func TestAccResource_workspace_role(t *testing.T) {
},
},
// Import State checks - import by ID (default)
{
ImportState: true,
ResourceName: resourceName,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"scopes"},
},
// {
// ImportState: true,
// ResourceName: resourceName,
// ImportStateVerify: true,
// ImportStateVerifyIgnore: []string{"scopes"},
// },
},
})
}

func testAccCheckWorkspaceRoleExists(roleResourceName string, role *api.WorkspaceRole) resource.TestCheckFunc {
return func(state *terraform.State) error {
workspaceRoleResource, ok := state.RootModule().Resources[roleResourceName]
if !ok {
return fmt.Errorf("Resource not found in state: %s", roleResourceName)
workspaceRoleID, err := testutils.GetResourceIDFromState(state, roleResourceName)
if err != nil {
return fmt.Errorf("error fetching workspace role ID: %w", err)
}

// Create a new client, and use the default configurations from the environment
c, _ := testutils.NewTestClient()
workspaceRolesClient, _ := c.WorkspaceRoles(uuid.Nil)
resourceID, _ := uuid.Parse(workspaceRoleResource.Primary.ID)

fetchedWorkspaceRole, err := workspaceRolesClient.Get(context.Background(), resourceID)
fetchedWorkspaceRole, err := workspaceRolesClient.Get(context.Background(), workspaceRoleID)
if err != nil {
return fmt.Errorf("Error fetching Workspace Role: %w", err)
}
if fetchedWorkspaceRole == nil {
return fmt.Errorf("Workspace Role not found for ID: %s", workspaceRoleResource.Primary.ID)
return fmt.Errorf("Workspace Role not found for ID: %s", workspaceRoleID)
}

*role = *fetchedWorkspaceRole
Expand Down
9 changes: 4 additions & 5 deletions internal/provider/resources/workspace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,22 +74,21 @@ func TestAccResource_workspace(t *testing.T) {

func testAccCheckWorkspaceExists(workspace *api.Workspace) resource.TestCheckFunc {
return func(state *terraform.State) error {
workspaceResource, found := state.RootModule().Resources[testutils.WorkspaceResourceName]
if !found {
return fmt.Errorf("Resource not found in state: %s", testutils.WorkspaceResourceName)
workspaceID, err := testutils.GetResourceIDFromState(state, testutils.WorkspaceResourceName)
if err != nil {
return fmt.Errorf("error fetching workspace ID: %w", err)
}

// Create a new client, and use the default configurations from the environment
c, _ := testutils.NewTestClient()
workspacesClient, _ := c.Workspaces(uuid.Nil)
workspaceID, _ := uuid.Parse(workspaceResource.Primary.ID)

fetchedWorkspace, err := workspacesClient.Get(context.Background(), workspaceID)
if err != nil {
return fmt.Errorf("Error fetching workspace: %w", err)
}
if fetchedWorkspace == nil {
return fmt.Errorf("Workspace not found for ID: %s", workspaceResource.Primary.ID)
return fmt.Errorf("Workspace not found for ID: %s", workspaceID)
}

*workspace = *fetchedWorkspace
Expand Down
Loading

0 comments on commit fd13849

Please sign in to comment.