1- classic_require_code_owner_review = @obj . rules_required_pull_request_reviews ( 'main' ) &.[]( "require_code_owner_reviews" )
1+ require 'test/unit'
2+ require_relative '../src/script'
3+
4+ class ScriptTest < Test ::Unit ::TestCase
5+
6+ def setup
7+ url = ENV [ 'URL' ] . nil? ? '' : ENV [ "URL" ]
8+ token = ENV [ 'TOKEN' ] . nil? ? '' : ENV [ "TOKEN" ]
9+ @secrets_token = ENV [ 'SECRETS_TOKEN' ]
10+ @obj = GithubApi . new ( url , token )
11+ end
12+
13+ def test_health_check
14+ assert_not_nil ( @obj . instance_variable_get ( '@repo_uri' ) , 'Url alive' )
15+ assert_not_nil ( @obj . instance_variable_get ( '@token' ) , 'Token alive' )
16+ end
17+
18+ def test_token_present
19+ actual = @secrets_token =~ /^ghp_\w {36}$/
20+ assert_not_nil ( actual , "Secret with name 'PAT' with valid personal access token doesn't exist" )
21+ end
22+
23+ def test_deploy_key_present
24+ response = @obj . deploy_keys
25+ assert_not_nil ( response , "Access denied" )
26+ deploy_key = response . find { |element | element [ 'title' ] == 'DEPLOY_KEY' }
27+ assert_not_nil ( deploy_key , "The deploy key with name 'DEPLOY_KEY' doesn't exist" )
28+ end
29+
30+ def test_main_present
31+ actual = @obj . branch_exist? ( 'main' )
32+ assert ( actual , 'Branch main is not present' )
33+ end
34+
35+ def test_main_protected
36+ actual = @obj . branch_protected? ( 'main' )
37+ assert ( actual , 'Branch main is not protected' )
38+ end
39+
40+ def test_develop_present
41+ actual = @obj . branch_exist? ( 'develop' )
42+ assert ( actual , 'Branch develop is not present' )
43+ end
44+
45+ def test_develop_protected
46+ actual = @obj . branch_protected? ( 'develop' )
47+ assert ( actual , 'Branch develop is not protected' )
48+ end
49+
50+ def test_develop_default
51+ actual = @obj . default_branch
52+ expected = 'develop'
53+ assert_equal ( expected , actual , 'Default branch isn\'t develop' )
54+ end
55+
56+ def test_codeowners_contains_user
57+ user_name = 'softservedata'
58+ content = @obj . file_branch ( 'CODEOWNERS' , 'main' ) || @obj . file_branch ( '.github/CODEOWNERS' , 'main' ) || @obj . file_branch ( 'docs/CODEOWNERS' , 'main' )
59+ assert_not_nil ( content , 'File CODEOWNERS doesn\'t exist on main branch' )
60+ assert ( content . include? ( user_name ) , "User #{ user_name } doesn't present in CODEOWNERS" )
61+ end
62+
63+ def test_codeowners_not_present_develop
64+ content = @obj . file_branch ( 'CODEOWNERS' , 'develop' )
65+ assert_nil ( content , 'File CODEOWNERS exist on develop branch' )
66+ end
67+
68+ def test_deny_merge_main
69+ classic_rules = @obj . rules_required_pull_request_reviews ( 'main' )
70+ rulesets = @obj . get_branch_ruleset ( 'main' )
71+ rulesets_rules = rulesets &.find { |rule | rule [ 'type' ] == 'pull_request' }
72+ assert_not_nil ( classic_rules || rulesets_rules , 'We should not allow merge to main branch without PR' )
73+ end
74+
75+ def test_deny_merge_develop
76+ classic_rules = @obj . rules_required_pull_request_reviews ( 'develop' )
77+ rulesets = @obj . get_branch_ruleset ( 'develop' )
78+ rulesets_rules = rulesets &.find { |rule | rule [ 'type' ] == 'pull_request' }
79+ assert_not_nil ( classic_rules || rulesets_rules , 'We should not allow merge to develop branch without PR ' )
80+ end
81+
82+ def test_2_approvals_develop
83+ classic_required_approving_review_count = @obj . rules_required_pull_request_reviews ( 'develop' ) . nil? || @obj . rules_required_pull_request_reviews ( 'develop' ) [ "required_approving_review_count" ]
84+ pull_request_rulesets_rules = @obj . get_branch_ruleset ( 'develop' )
85+ rulesets_required_approving_review_count = pull_request_rulesets_rules &.find { |rule | rule [ 'type' ] == 'pull_request' } &.[]( 'parameters' ) &.[]( 'required_approving_review_count' )
86+ expected = 2
87+ required_approving_review_count = classic_required_approving_review_count == expected || rulesets_required_approving_review_count == expected
88+ assert_true ( required_approving_review_count , 'We should have 2 approvals before merge to develop branch' )
89+ end
90+
91+ def test_without_approval_main
92+ classic_required_approving_review_count = @obj . rules_required_pull_request_reviews ( 'main' ) . nil? || @obj . rules_required_pull_request_reviews ( 'main' ) [ "required_approving_review_count" ]
93+ pull_request_rulesets_rules = @obj . get_branch_ruleset ( 'main' )
94+ rulesets_required_approving_review_count = pull_request_rulesets_rules &.find { |rule | rule [ 'type' ] == 'pull_request' } &.[]( 'parameters' ) &.[]( 'required_approving_review_count' )
95+ expected = 0
96+ required_approving_review_count = classic_required_approving_review_count == expected || rulesets_required_approving_review_count == expected
97+ assert_true ( required_approving_review_count , 'We shouldn\'t have any approvals before merge to main branch' )
98+ end
99+
100+ def test_approve_from_user
101+ user_name = 'softservedata'
102+ classic_require_code_owner_review = @obj . rules_required_pull_request_reviews ( 'main' ) [ "require_code_owner_reviews" ]
103+ pull_request_rulesets_rules = @obj . get_branch_ruleset ( 'main' )
104+ rulesets_require_code_owner_review = pull_request_rulesets_rules &.find { |rule | rule [ 'type' ] == 'pull_request' } &.[]( 'parameters' ) &.[]( 'require_code_owner_review' )
105+ assert ( classic_require_code_owner_review || rulesets_require_code_owner_review , "We should not allow merge to main branch without approve from #{ user_name } " )
106+ end
107+
108+ def test_PR_template_present
109+ actual = @obj . file_branch ( '.github/pull_request_template.md' , 'main' )
110+ assert_not_nil ( actual , 'Pull request template is absent' )
111+ end
112+
113+ end
0 commit comments