@@ -941,3 +941,204 @@ func TestOrganizationPushRulesetSupport(t *testing.T) {
941941 t .Errorf ("Expected 4 restricted file extensions, got %d" , len (restrictedExts ))
942942 }
943943}
944+
945+ func TestAccGithubOrganizationRuleset_requiredReviewers (t * testing.T ) {
946+ randomID := acctest .RandStringFromCharSet (5 , acctest .CharSetAlphaNum )
947+ teamName := fmt .Sprintf ("%steam-req-rev-%s" , testResourcePrefix , randomID )
948+ rulesetName := fmt .Sprintf ("%s-ruleset-req-rev-%s" , testResourcePrefix , randomID )
949+
950+ config := fmt .Sprintf (`
951+ resource "github_team" "test" {
952+ name = "%s"
953+ }
954+
955+ resource "github_organization_ruleset" "test" {
956+ name = "%s"
957+ target = "branch"
958+ enforcement = "active"
959+
960+ conditions {
961+ repository_name {
962+ include = ["~ALL"]
963+ exclude = []
964+ }
965+
966+ ref_name {
967+ include = ["~ALL"]
968+ exclude = []
969+ }
970+ }
971+
972+ rules {
973+ pull_request {
974+ allowed_merge_methods = ["merge", "squash"]
975+ required_approving_review_count = 1
976+
977+ required_reviewers {
978+ reviewer {
979+ id = github_team.test.id
980+ type = "Team"
981+ }
982+ file_patterns = ["*.go", "src/**/*.ts"]
983+ minimum_approvals = 1
984+ }
985+ }
986+ }
987+ }
988+ ` , teamName , rulesetName )
989+
990+ // Updated config: change minimum_approvals from 1 to 2
991+ configUpdated := fmt .Sprintf (`
992+ resource "github_team" "test" {
993+ name = "%s"
994+ }
995+
996+ resource "github_organization_ruleset" "test" {
997+ name = "%s"
998+ target = "branch"
999+ enforcement = "active"
1000+
1001+ conditions {
1002+ repository_name {
1003+ include = ["~ALL"]
1004+ exclude = []
1005+ }
1006+
1007+ ref_name {
1008+ include = ["~ALL"]
1009+ exclude = []
1010+ }
1011+ }
1012+
1013+ rules {
1014+ pull_request {
1015+ allowed_merge_methods = ["merge", "squash"]
1016+ required_approving_review_count = 1
1017+
1018+ required_reviewers {
1019+ reviewer {
1020+ id = github_team.test.id
1021+ type = "Team"
1022+ }
1023+ file_patterns = ["*.go", "src/**/*.ts"]
1024+ minimum_approvals = 2
1025+ }
1026+ }
1027+ }
1028+ }
1029+ ` , teamName , rulesetName )
1030+
1031+ resource .Test (t , resource.TestCase {
1032+ PreCheck : func () { skipUnlessHasPaidOrgs (t ) },
1033+ ProviderFactories : providerFactories ,
1034+ Steps : []resource.TestStep {
1035+ {
1036+ Config : config ,
1037+ Check : resource .ComposeTestCheckFunc (
1038+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "name" , rulesetName ),
1039+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "target" , "branch" ),
1040+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "enforcement" , "active" ),
1041+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.#" , "1" ),
1042+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.minimum_approvals" , "1" ),
1043+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.#" , "2" ),
1044+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.0" , "*.go" ),
1045+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.1" , "src/**/*.ts" ),
1046+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.reviewer.0.type" , "Team" ),
1047+ ),
1048+ },
1049+ {
1050+ Config : configUpdated ,
1051+ Check : resource .ComposeTestCheckFunc (
1052+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.minimum_approvals" , "2" ),
1053+ ),
1054+ },
1055+ {
1056+ ResourceName : "github_organization_ruleset.test" ,
1057+ ImportState : true ,
1058+ ImportStateVerify : true ,
1059+ ImportStateVerifyIgnore : []string {"etag" },
1060+ },
1061+ },
1062+ })
1063+ }
1064+
1065+ func TestAccGithubOrganizationRuleset_requiredReviewersMultiple (t * testing.T ) {
1066+ randomID := acctest .RandStringFromCharSet (5 , acctest .CharSetAlphaNum )
1067+ teamName1 := fmt .Sprintf ("%steam-req-rev-1-%s" , testResourcePrefix , randomID )
1068+ teamName2 := fmt .Sprintf ("%steam-req-rev-2-%s" , testResourcePrefix , randomID )
1069+ rulesetName := fmt .Sprintf ("%s-ruleset-multi-rev-%s" , testResourcePrefix , randomID )
1070+
1071+ config := fmt .Sprintf (`
1072+ resource "github_team" "test1" {
1073+ name = "%s"
1074+ }
1075+
1076+ resource "github_team" "test2" {
1077+ name = "%s"
1078+ }
1079+
1080+ resource "github_organization_ruleset" "test" {
1081+ name = "%s"
1082+ target = "branch"
1083+ enforcement = "active"
1084+
1085+ conditions {
1086+ repository_name {
1087+ include = ["~ALL"]
1088+ exclude = []
1089+ }
1090+
1091+ ref_name {
1092+ include = ["~ALL"]
1093+ exclude = []
1094+ }
1095+ }
1096+
1097+ rules {
1098+ pull_request {
1099+ allowed_merge_methods = ["merge", "squash"]
1100+ required_approving_review_count = 1
1101+
1102+ required_reviewers {
1103+ reviewer {
1104+ id = github_team.test1.id
1105+ type = "Team"
1106+ }
1107+ file_patterns = ["*.go"]
1108+ minimum_approvals = 1
1109+ }
1110+
1111+ required_reviewers {
1112+ reviewer {
1113+ id = github_team.test2.id
1114+ type = "Team"
1115+ }
1116+ file_patterns = ["*.md", "docs/**/*"]
1117+ minimum_approvals = 1
1118+ }
1119+ }
1120+ }
1121+ }
1122+ ` , teamName1 , teamName2 , rulesetName )
1123+
1124+ resource .Test (t , resource.TestCase {
1125+ PreCheck : func () { skipUnlessHasPaidOrgs (t ) },
1126+ ProviderFactories : providerFactories ,
1127+ Steps : []resource.TestStep {
1128+ {
1129+ Config : config ,
1130+ Check : resource .ComposeTestCheckFunc (
1131+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "name" , rulesetName ),
1132+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "target" , "branch" ),
1133+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "enforcement" , "active" ),
1134+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.#" , "2" ),
1135+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.minimum_approvals" , "1" ),
1136+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.#" , "1" ),
1137+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.0" , "*.go" ),
1138+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.1.minimum_approvals" , "1" ),
1139+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.1.file_patterns.#" , "2" ),
1140+ ),
1141+ },
1142+ },
1143+ })
1144+ }
0 commit comments