diff --git a/github/resource_github_organization_role.go b/github/resource_github_organization_role.go index d6da7fa746..5c868194b5 100644 --- a/github/resource_github_organization_role.go +++ b/github/resource_github_organization_role.go @@ -73,17 +73,26 @@ func resourceGithubOrganizationRoleCreate(ctx context.Context, d *schema.Resourc permissionsStr[i] = v.(string) } - role, _, err := client.Organizations.CreateCustomOrgRole(ctx, orgName, &github.CreateOrUpdateOrgRoleOptions{ + createOrUpdateOrgRoleOptions := &github.CreateOrUpdateOrgRoleOptions{ Name: github.String(d.Get("name").(string)), Description: github.String(d.Get("description").(string)), - BaseRole: github.String(d.Get("base_role").(string)), Permissions: permissionsStr, - }) + } + + baseRole := d.Get("base_role").(string) + if baseRole != "none" { + createOrUpdateOrgRoleOptions.BaseRole = github.String(baseRole) + } + + role, _, err := client.Organizations.CreateCustomOrgRole(ctx, orgName, createOrUpdateOrgRoleOptions) if err != nil { return diag.FromErr(fmt.Errorf("error creating organization role (%s/%s): %w", orgName, d.Get("name").(string), err)) } d.SetId(fmt.Sprint(role.GetID())) + if err = d.Set("role_id", role.GetID()); err != nil { + return diag.FromErr(err) + } return nil } @@ -123,8 +132,14 @@ func resourceGithubOrganizationRoleRead(ctx context.Context, d *schema.ResourceD if err = d.Set("description", role.Description); err != nil { return diag.FromErr(err) } - if err = d.Set("base_role", role.BaseRole); err != nil { - return diag.FromErr(err) + if role.BaseRole != nil { + if err = d.Set("base_role", role.BaseRole); err != nil { + return diag.FromErr(err) + } + } else { + if err = d.Set("base_role", "none"); err != nil { + return diag.FromErr(err) + } } if err = d.Set("permissions", role.Permissions); err != nil { return diag.FromErr(err) diff --git a/github/resource_github_organization_role_test.go b/github/resource_github_organization_role_test.go index 210a3f68b9..6c40ca71e0 100644 --- a/github/resource_github_organization_role_test.go +++ b/github/resource_github_organization_role_test.go @@ -25,12 +25,12 @@ func TestAccGithubOrganizationRole(t *testing.T) { Steps: []resource.TestStep{ { Config: config, - Check: resource.ComposeTestCheckFunc( + Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrSet("github_organization_role.test", "id"), resource.TestCheckResourceAttrSet("github_organization_role.test", "role_id"), resource.TestCheckResourceAttr("github_organization_role.test", "name", name), resource.TestCheckResourceAttr("github_organization_role.test", "base_role", "none"), - resource.TestCheckResourceAttrSet("github_organization_role.test", "permissions.#"), + resource.TestCheckNoResourceAttr("github_organization_role.test", "permissions"), resource.TestCheckResourceAttr("github_organization_role.test", "permissions.#", "0"), ), }, @@ -57,11 +57,11 @@ func TestAccGithubOrganizationRole(t *testing.T) { Steps: []resource.TestStep{ { Config: config, - Check: resource.ComposeTestCheckFunc( + Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrSet("github_organization_role.test", "id"), resource.TestCheckResourceAttr("github_organization_role.test", "name", name), resource.TestCheckResourceAttr("github_organization_role.test", "base_role", baseRole), - resource.TestCheckResourceAttrSet("github_organization_role.test", "permissions.#"), + resource.TestCheckNoResourceAttr("github_organization_role.test", "permissions"), resource.TestCheckResourceAttr("github_organization_role.test", "permissions.#", "0"), ), }, @@ -167,7 +167,7 @@ func TestAccGithubOrganizationRole(t *testing.T) { Steps: []resource.TestStep{ { Config: config, - Check: resource.ComposeTestCheckFunc( + Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrSet("github_organization_role.test", "id"), resource.TestCheckResourceAttrSet("github_organization_role.test", "role_id"), resource.TestCheckResourceAttr("github_organization_role.test", "name", name), @@ -175,8 +175,8 @@ func TestAccGithubOrganizationRole(t *testing.T) { resource.TestCheckResourceAttr("github_organization_role.test", "base_role", baseRole), resource.TestCheckResourceAttrSet("github_organization_role.test", "permissions.#"), resource.TestCheckResourceAttr("github_organization_role.test", "permissions.#", "2"), - resource.TestCheckResourceAttr("github_organization_role.test", "permissions.0", permission0), - resource.TestCheckResourceAttr("github_organization_role.test", "permissions.1", permission1), + resource.TestCheckTypeSetElemAttr("github_organization_role.test", "permissions.*", permission0), + resource.TestCheckTypeSetElemAttr("github_organization_role.test", "permissions.*", permission1), ), }, },