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
1+ classic_require_code_owner_review = @obj . rules_required_pull_request_reviews ( 'main' ) &.[]( "require_code_owner_reviews" )
0 commit comments