github.com/peterbale/terraform@v0.9.0-beta2.0.20170315142748-5723acd55547/builtin/providers/github/resource_github_team_membership_test.go (about) 1 package github 2 3 import ( 4 "context" 5 "fmt" 6 "testing" 7 8 "github.com/google/go-github/github" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 func TestAccGithubTeamMembership_basic(t *testing.T) { 14 var membership github.Membership 15 16 testAccGithubTeamMembershipUpdateConfig := fmt.Sprintf(` 17 resource "github_membership" "test_org_membership" { 18 username = "%s" 19 role = "member" 20 } 21 22 resource "github_team" "test_team" { 23 name = "foo" 24 description = "Terraform acc test group" 25 } 26 27 resource "github_team_membership" "test_team_membership" { 28 team_id = "${github_team.test_team.id}" 29 username = "%s" 30 role = "maintainer" 31 } 32 `, testUser, testUser) 33 34 resource.Test(t, resource.TestCase{ 35 PreCheck: func() { testAccPreCheck(t) }, 36 Providers: testAccProviders, 37 CheckDestroy: testAccCheckGithubTeamMembershipDestroy, 38 Steps: []resource.TestStep{ 39 { 40 Config: testAccGithubTeamMembershipConfig, 41 Check: resource.ComposeTestCheckFunc( 42 testAccCheckGithubTeamMembershipExists("github_team_membership.test_team_membership", &membership), 43 testAccCheckGithubTeamMembershipRoleState("github_team_membership.test_team_membership", "member", &membership), 44 ), 45 }, 46 { 47 Config: testAccGithubTeamMembershipUpdateConfig, 48 Check: resource.ComposeTestCheckFunc( 49 testAccCheckGithubTeamMembershipExists("github_team_membership.test_team_membership", &membership), 50 testAccCheckGithubTeamMembershipRoleState("github_team_membership.test_team_membership", "maintainer", &membership), 51 ), 52 }, 53 }, 54 }) 55 } 56 57 func TestAccGithubTeamMembership_importBasic(t *testing.T) { 58 resource.Test(t, resource.TestCase{ 59 PreCheck: func() { testAccPreCheck(t) }, 60 Providers: testAccProviders, 61 CheckDestroy: testAccCheckGithubTeamMembershipDestroy, 62 Steps: []resource.TestStep{ 63 { 64 Config: testAccGithubTeamMembershipConfig, 65 }, 66 { 67 ResourceName: "github_team_membership.test_team_membership", 68 ImportState: true, 69 ImportStateVerify: true, 70 }, 71 }, 72 }) 73 } 74 75 func testAccCheckGithubTeamMembershipDestroy(s *terraform.State) error { 76 conn := testAccProvider.Meta().(*Organization).client 77 78 for _, rs := range s.RootModule().Resources { 79 if rs.Type != "github_team_membership" { 80 continue 81 } 82 83 t, u := parseTwoPartID(rs.Primary.ID) 84 membership, resp, err := conn.Organizations.GetTeamMembership(context.TODO(), toGithubID(t), u) 85 if err == nil { 86 if membership != nil { 87 return fmt.Errorf("Team membership still exists") 88 } 89 } 90 if resp.StatusCode != 404 { 91 return err 92 } 93 return nil 94 } 95 return nil 96 } 97 98 func testAccCheckGithubTeamMembershipExists(n string, membership *github.Membership) resource.TestCheckFunc { 99 return func(s *terraform.State) error { 100 rs, ok := s.RootModule().Resources[n] 101 if !ok { 102 return fmt.Errorf("Not Found: %s", n) 103 } 104 105 if rs.Primary.ID == "" { 106 return fmt.Errorf("No team membership ID is set") 107 } 108 109 conn := testAccProvider.Meta().(*Organization).client 110 t, u := parseTwoPartID(rs.Primary.ID) 111 112 teamMembership, _, err := conn.Organizations.GetTeamMembership(context.TODO(), toGithubID(t), u) 113 114 if err != nil { 115 return err 116 } 117 *membership = *teamMembership 118 return nil 119 } 120 } 121 122 func testAccCheckGithubTeamMembershipRoleState(n, expected string, membership *github.Membership) resource.TestCheckFunc { 123 return func(s *terraform.State) error { 124 rs, ok := s.RootModule().Resources[n] 125 if !ok { 126 return fmt.Errorf("Not Found: %s", n) 127 } 128 129 if rs.Primary.ID == "" { 130 return fmt.Errorf("No team membership ID is set") 131 } 132 133 conn := testAccProvider.Meta().(*Organization).client 134 t, u := parseTwoPartID(rs.Primary.ID) 135 136 teamMembership, _, err := conn.Organizations.GetTeamMembership(context.TODO(), toGithubID(t), u) 137 if err != nil { 138 return err 139 } 140 141 resourceRole := membership.Role 142 actualRole := teamMembership.Role 143 144 if *resourceRole != expected { 145 return fmt.Errorf("Team membership role %v in resource does match expected state of %v", *resourceRole, expected) 146 } 147 148 if *resourceRole != *actualRole { 149 return fmt.Errorf("Team membership role %v in resource does match actual state of %v", *resourceRole, *actualRole) 150 } 151 return nil 152 } 153 } 154 155 var testAccGithubTeamMembershipConfig string = fmt.Sprintf(` 156 resource "github_membership" "test_org_membership" { 157 username = "%s" 158 role = "member" 159 } 160 161 resource "github_team" "test_team" { 162 name = "foo" 163 description = "Terraform acc test group" 164 } 165 166 resource "github_team_membership" "test_team_membership" { 167 team_id = "${github_team.test_team.id}" 168 username = "%s" 169 role = "member" 170 } 171 `, testUser, testUser)