diff --git a/.github/tests/src/script.rb b/.github/tests/src/script.rb index 7c15fd2..32d1b67 100644 --- a/.github/tests/src/script.rb +++ b/.github/tests/src/script.rb @@ -61,6 +61,19 @@ def rules_required_pull_request_reviews(branch_name) JSON.parse(response.body)["required_pull_request_reviews"] end + def get_branch_ruleset(branch_name) + branch_ruleset = nil + response = get("rulesets") + JSON.parse(response.body).each do |ruleset| + id = ruleset['id'] + details = get("rulesets/#{id}") + if JSON.parse(details.body)['conditions']['ref_name']['include'].any? {|elem| elem.include?(branch_name)} + branch_ruleset = JSON.parse(details.body)['rules'] + end + end + branch_ruleset + end + def deploy_keys response = get("keys") return nil if response.code != '200' @@ -68,5 +81,3 @@ def deploy_keys end end - - diff --git a/.github/tests/test/script_test.rb b/.github/tests/test/script_test.rb index d2858e4..81b6772 100644 --- a/.github/tests/test/script_test.rb +++ b/.github/tests/test/script_test.rb @@ -29,7 +29,7 @@ def test_deploy_key_present def test_main_present actual = @obj.branch_exist?('main') - assert(actual, 'Branch nain is not present') + assert(actual, 'Branch main is not present') end def test_main_protected @@ -66,31 +66,43 @@ def test_codeowners_not_present_develop end def test_deny_merge_main - actual = @obj.rules_required_pull_request_reviews('main') - assert_not_nil(actual, 'We should not allow merge to main branch without PR') + classic_rules = @obj.rules_required_pull_request_reviews('main') + rulesets = @obj.get_branch_ruleset('main') + rulesets_rules = rulesets&.find { |rule| rule['type'] == 'pull_request' } + assert_not_nil(classic_rules || rulesets_rules, 'We should not allow merge to main branch without PR') end def test_deny_merge_develop - actual = @obj.rules_required_pull_request_reviews('develop') - assert_not_nil(actual, 'We should not allow merge to develop branch without PR ') + classic_rules = @obj.rules_required_pull_request_reviews('develop') + rulesets = @obj.get_branch_ruleset('develop') + rulesets_rules = rulesets&.find { |rule| rule['type'] == 'pull_request' } + assert_not_nil(classic_rules || rulesets_rules, 'We should not allow merge to develop branch without PR ') end def test_2_approvals_develop - actual = @obj.rules_required_pull_request_reviews('develop').nil? || @obj.rules_required_pull_request_reviews('develop')["required_approving_review_count"] + classic_required_approving_review_count = @obj.rules_required_pull_request_reviews('develop').nil? || @obj.rules_required_pull_request_reviews('develop')["required_approving_review_count"] + pull_request_rulesets_rules = @obj.get_branch_ruleset('develop') + rulesets_required_approving_review_count = pull_request_rulesets_rules&.find { |rule| rule['type'] == 'pull_request' }&.[]('parameters')&.[]('required_approving_review_count') expected = 2 - assert_equal(expected, actual, 'We should have 2 approvals before merge to develop branch') + required_approving_review_count = classic_required_approving_review_count == expected || rulesets_required_approving_review_count == expected + assert_true(required_approving_review_count, 'We should have 2 approvals before merge to develop branch') end def test_without_approval_main - actual = @obj.rules_required_pull_request_reviews('main').nil? || @obj.rules_required_pull_request_reviews('main')["required_approving_review_count"] + classic_required_approving_review_count = @obj.rules_required_pull_request_reviews('main').nil? || @obj.rules_required_pull_request_reviews('main')["required_approving_review_count"] + pull_request_rulesets_rules = @obj.get_branch_ruleset('main') + rulesets_required_approving_review_count = pull_request_rulesets_rules&.find { |rule| rule['type'] == 'pull_request' }&.[]('parameters')&.[]('required_approving_review_count') expected = 0 - assert_equal(expected, actual, 'We shouldn\'t have any approvals before merge to main branch') + required_approving_review_count = classic_required_approving_review_count == expected || rulesets_required_approving_review_count == expected + assert_true(required_approving_review_count, 'We shouldn\'t have any approvals before merge to main branch') end def test_approve_from_user user_name = 'online-marathon' - actual = @obj.rules_required_pull_request_reviews('develop').nil? || @obj.rules_required_pull_request_reviews('develop')["require_code_owner_reviews"] - assert_not_nil(actual, "We should not allow merge to main branch without approve from #{user_name}") + classic_require_code_owner_review = @obj.rules_required_pull_request_reviews('main').nil? || @obj.rules_required_pull_request_reviews('develop')["require_code_owner_reviews"] + pull_request_rulesets_rules = @obj.get_branch_ruleset('main') + rulesets_require_code_owner_review = pull_request_rulesets_rules&.find { |rule| rule['type'] == 'pull_request' }&.[]('parameters')&.[]('require_code_owner_review') + assert_not_nil(classic_require_code_owner_review || rulesets_require_code_owner_review, "We should not allow merge to main branch without approve from #{user_name}") end def test_PR_template_present