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)