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