@@ -809,6 +809,165 @@ resource "github_organization_ruleset" "test" {
809809 })
810810 })
811811 })
812+
813+ t .Run ("updates_required_reviewers" , func (t * testing.T ) {
814+ randomID := acctest .RandStringFromCharSet (5 , acctest .CharSetAlphaNum )
815+ teamName := fmt .Sprintf ("%steam-req-rev-%s" , testResourcePrefix , randomID )
816+ rulesetName := fmt .Sprintf ("%s-ruleset-req-rev-%s" , testResourcePrefix , randomID )
817+
818+ config := `
819+ resource "github_team" "test" {
820+ name = "%s"
821+ }
822+
823+ resource "github_organization_ruleset" "test" {
824+ name = "%s"
825+ target = "branch"
826+ enforcement = "active"
827+
828+ conditions {
829+ repository_name {
830+ include = ["~ALL"]
831+ exclude = []
832+ }
833+
834+ ref_name {
835+ include = ["~ALL"]
836+ exclude = []
837+ }
838+ }
839+
840+ rules {
841+ pull_request {
842+ allowed_merge_methods = ["merge", "squash"]
843+ required_approving_review_count = 1
844+
845+ required_reviewers {
846+ reviewer {
847+ id = github_team.test.id
848+ type = "Team"
849+ }
850+ file_patterns = ["*.go", "src/**/*.ts"]
851+ minimum_approvals = %d
852+ }
853+ }
854+ }
855+ }
856+ `
857+
858+ resource .Test (t , resource.TestCase {
859+ PreCheck : func () { skipUnlessHasPaidOrgs (t ) },
860+ ProviderFactories : providerFactories ,
861+ Steps : []resource.TestStep {
862+ {
863+ Config : fmt .Sprintf (config , teamName , rulesetName , 1 ),
864+ Check : resource .ComposeTestCheckFunc (
865+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "name" , rulesetName ),
866+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "target" , "branch" ),
867+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "enforcement" , "active" ),
868+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.#" , "1" ),
869+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.minimum_approvals" , "1" ),
870+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.#" , "2" ),
871+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.0" , "*.go" ),
872+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.1" , "src/**/*.ts" ),
873+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.reviewer.0.type" , "Team" ),
874+ ),
875+ },
876+ {
877+ Config : fmt .Sprintf (config , teamName , rulesetName , 2 ),
878+ Check : resource .ComposeTestCheckFunc (
879+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.minimum_approvals" , "2" ),
880+ ),
881+ },
882+ {
883+ ResourceName : "github_organization_ruleset.test" ,
884+ ImportState : true ,
885+ ImportStateVerify : true ,
886+ ImportStateVerifyIgnore : []string {"etag" },
887+ },
888+ },
889+ })
890+ })
891+ t .Run ("creates_rule_with_multiple_required_reviewers" , func (t * testing.T ) {
892+ randomID := acctest .RandStringFromCharSet (5 , acctest .CharSetAlphaNum )
893+ teamName1 := fmt .Sprintf ("%steam-req-rev-1-%s" , testResourcePrefix , randomID )
894+ teamName2 := fmt .Sprintf ("%steam-req-rev-2-%s" , testResourcePrefix , randomID )
895+ rulesetName := fmt .Sprintf ("%s-ruleset-multi-rev-%s" , testResourcePrefix , randomID )
896+
897+ config := fmt .Sprintf (`
898+ resource "github_team" "test1" {
899+ name = "%s"
900+ }
901+
902+ resource "github_team" "test2" {
903+ name = "%s"
904+ }
905+
906+ resource "github_organization_ruleset" "test" {
907+ name = "%s"
908+ target = "branch"
909+ enforcement = "active"
910+
911+ conditions {
912+ repository_name {
913+ include = ["~ALL"]
914+ exclude = []
915+ }
916+
917+ ref_name {
918+ include = ["~ALL"]
919+ exclude = []
920+ }
921+ }
922+
923+ rules {
924+ pull_request {
925+ allowed_merge_methods = ["merge", "squash"]
926+ required_approving_review_count = 1
927+
928+ required_reviewers {
929+ reviewer {
930+ id = github_team.test1.id
931+ type = "Team"
932+ }
933+ file_patterns = ["*.go"]
934+ minimum_approvals = 1
935+ }
936+
937+ required_reviewers {
938+ reviewer {
939+ id = github_team.test2.id
940+ type = "Team"
941+ }
942+ file_patterns = ["*.md", "docs/**/*"]
943+ minimum_approvals = 1
944+ }
945+ }
946+ }
947+ }
948+ ` , teamName1 , teamName2 , rulesetName )
949+
950+ resource .Test (t , resource.TestCase {
951+ PreCheck : func () { skipUnlessHasPaidOrgs (t ) },
952+ ProviderFactories : providerFactories ,
953+ Steps : []resource.TestStep {
954+ {
955+ Config : config ,
956+ Check : resource .ComposeTestCheckFunc (
957+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "name" , rulesetName ),
958+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "target" , "branch" ),
959+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "enforcement" , "active" ),
960+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.#" , "2" ),
961+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.minimum_approvals" , "1" ),
962+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.#" , "1" ),
963+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.0" , "*.go" ),
964+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.1.minimum_approvals" , "1" ),
965+ resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.1.file_patterns.#" , "2" ),
966+ ),
967+ },
968+ },
969+ })
970+ })
812971}
813972
814973func TestOrganizationPushRulesetSupport (t * testing.T ) {
@@ -934,204 +1093,3 @@ func TestOrganizationPushRulesetSupport(t *testing.T) {
9341093 t .Errorf ("Expected 4 restricted file extensions, got %d" , len (restrictedExts ))
9351094 }
9361095}
937-
938- func TestAccGithubOrganizationRuleset_requiredReviewers (t * testing.T ) {
939- randomID := acctest .RandStringFromCharSet (5 , acctest .CharSetAlphaNum )
940- teamName := fmt .Sprintf ("%steam-req-rev-%s" , testResourcePrefix , randomID )
941- rulesetName := fmt .Sprintf ("%s-ruleset-req-rev-%s" , testResourcePrefix , randomID )
942-
943- config := fmt .Sprintf (`
944- resource "github_team" "test" {
945- name = "%s"
946- }
947-
948- resource "github_organization_ruleset" "test" {
949- name = "%s"
950- target = "branch"
951- enforcement = "active"
952-
953- conditions {
954- repository_name {
955- include = ["~ALL"]
956- exclude = []
957- }
958-
959- ref_name {
960- include = ["~ALL"]
961- exclude = []
962- }
963- }
964-
965- rules {
966- pull_request {
967- allowed_merge_methods = ["merge", "squash"]
968- required_approving_review_count = 1
969-
970- required_reviewers {
971- reviewer {
972- id = github_team.test.id
973- type = "Team"
974- }
975- file_patterns = ["*.go", "src/**/*.ts"]
976- minimum_approvals = 1
977- }
978- }
979- }
980- }
981- ` , teamName , rulesetName )
982-
983- // Updated config: change minimum_approvals from 1 to 2
984- configUpdated := fmt .Sprintf (`
985- resource "github_team" "test" {
986- name = "%s"
987- }
988-
989- resource "github_organization_ruleset" "test" {
990- name = "%s"
991- target = "branch"
992- enforcement = "active"
993-
994- conditions {
995- repository_name {
996- include = ["~ALL"]
997- exclude = []
998- }
999-
1000- ref_name {
1001- include = ["~ALL"]
1002- exclude = []
1003- }
1004- }
1005-
1006- rules {
1007- pull_request {
1008- allowed_merge_methods = ["merge", "squash"]
1009- required_approving_review_count = 1
1010-
1011- required_reviewers {
1012- reviewer {
1013- id = github_team.test.id
1014- type = "Team"
1015- }
1016- file_patterns = ["*.go", "src/**/*.ts"]
1017- minimum_approvals = 2
1018- }
1019- }
1020- }
1021- }
1022- ` , teamName , rulesetName )
1023-
1024- resource .Test (t , resource.TestCase {
1025- PreCheck : func () { skipUnlessHasPaidOrgs (t ) },
1026- ProviderFactories : providerFactories ,
1027- Steps : []resource.TestStep {
1028- {
1029- Config : config ,
1030- Check : resource .ComposeTestCheckFunc (
1031- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "name" , rulesetName ),
1032- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "target" , "branch" ),
1033- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "enforcement" , "active" ),
1034- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.#" , "1" ),
1035- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.minimum_approvals" , "1" ),
1036- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.#" , "2" ),
1037- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.0" , "*.go" ),
1038- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.1" , "src/**/*.ts" ),
1039- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.reviewer.0.type" , "Team" ),
1040- ),
1041- },
1042- {
1043- Config : configUpdated ,
1044- Check : resource .ComposeTestCheckFunc (
1045- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.minimum_approvals" , "2" ),
1046- ),
1047- },
1048- {
1049- ResourceName : "github_organization_ruleset.test" ,
1050- ImportState : true ,
1051- ImportStateVerify : true ,
1052- ImportStateVerifyIgnore : []string {"etag" },
1053- },
1054- },
1055- })
1056- }
1057-
1058- func TestAccGithubOrganizationRuleset_requiredReviewersMultiple (t * testing.T ) {
1059- randomID := acctest .RandStringFromCharSet (5 , acctest .CharSetAlphaNum )
1060- teamName1 := fmt .Sprintf ("%steam-req-rev-1-%s" , testResourcePrefix , randomID )
1061- teamName2 := fmt .Sprintf ("%steam-req-rev-2-%s" , testResourcePrefix , randomID )
1062- rulesetName := fmt .Sprintf ("%s-ruleset-multi-rev-%s" , testResourcePrefix , randomID )
1063-
1064- config := fmt .Sprintf (`
1065- resource "github_team" "test1" {
1066- name = "%s"
1067- }
1068-
1069- resource "github_team" "test2" {
1070- name = "%s"
1071- }
1072-
1073- resource "github_organization_ruleset" "test" {
1074- name = "%s"
1075- target = "branch"
1076- enforcement = "active"
1077-
1078- conditions {
1079- repository_name {
1080- include = ["~ALL"]
1081- exclude = []
1082- }
1083-
1084- ref_name {
1085- include = ["~ALL"]
1086- exclude = []
1087- }
1088- }
1089-
1090- rules {
1091- pull_request {
1092- allowed_merge_methods = ["merge", "squash"]
1093- required_approving_review_count = 1
1094-
1095- required_reviewers {
1096- reviewer {
1097- id = github_team.test1.id
1098- type = "Team"
1099- }
1100- file_patterns = ["*.go"]
1101- minimum_approvals = 1
1102- }
1103-
1104- required_reviewers {
1105- reviewer {
1106- id = github_team.test2.id
1107- type = "Team"
1108- }
1109- file_patterns = ["*.md", "docs/**/*"]
1110- minimum_approvals = 1
1111- }
1112- }
1113- }
1114- }
1115- ` , teamName1 , teamName2 , rulesetName )
1116-
1117- resource .Test (t , resource.TestCase {
1118- PreCheck : func () { skipUnlessHasPaidOrgs (t ) },
1119- ProviderFactories : providerFactories ,
1120- Steps : []resource.TestStep {
1121- {
1122- Config : config ,
1123- Check : resource .ComposeTestCheckFunc (
1124- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "name" , rulesetName ),
1125- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "target" , "branch" ),
1126- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "enforcement" , "active" ),
1127- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.#" , "2" ),
1128- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.minimum_approvals" , "1" ),
1129- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.#" , "1" ),
1130- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.0.file_patterns.0" , "*.go" ),
1131- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.1.minimum_approvals" , "1" ),
1132- resource .TestCheckResourceAttr ("github_organization_ruleset.test" , "rules.0.pull_request.0.required_reviewers.1.file_patterns.#" , "2" ),
1133- ),
1134- },
1135- },
1136- })
1137- }
0 commit comments