Exemplo n.º 1
0
    def test__set_schedule_variables(self, gitlab):
        gf = GitLabForm(
            config_string=add_schedule_with_variables,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        schedule = self.__find_pipeline_schedule_by_description_and_get_first(
            gitlab, "New schedule with variables")
        assert schedule is not None
        assert schedule["description"] == "New schedule with variables"
        assert schedule["ref"] == "master"
        assert schedule["cron"] == "30 1 * * *"
        assert schedule["cron_timezone"] == "UTC"
        assert schedule["active"] is True
        assert schedule["variables"] is not None
        assert len(schedule["variables"]) == 2

        assert schedule["variables"][0]["variable_type"] == "env_var"
        assert schedule["variables"][0]["key"] == "var1"
        assert schedule["variables"][0]["value"] == "value123"

        assert schedule["variables"][1]["variable_type"] == "file"
        assert schedule["variables"][1]["key"] == "var2"
        assert schedule["variables"][1]["value"] == "value987"
Exemplo n.º 2
0
    def test__set_file_protected_branches(self, gitlab):
        gf = GitLabForm(
            config_string=set_file_protected_branches,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        # main branch is protected by default
        for branch in [
                "main",
                "protected_branch1",
                "protected_branch2",
                "protected_branch3",
        ]:
            file_content = gitlab.get_file(GROUP_AND_PROJECT_NAME, branch,
                                           "README.md")
            assert file_content == "Content for protected branches only"

        for branch in ["regular_branch1", "regular_branch2"]:
            file_content = gitlab.get_file(GROUP_AND_PROJECT_NAME, branch,
                                           "README.md")
            assert not file_content == "Content for protected branches only"

        branch = gitlab.get_branch_access_levels(GROUP_AND_PROJECT_NAME,
                                                 "protected_branch3")
        assert branch["push_access_levels"][0]["access_level"] is 30
        assert branch["merge_access_levels"][0]["access_level"] is 30
        assert branch["unprotect_access_levels"][0]["access_level"] is 40
    def test__more_than_one_user_and_more_than_one_group(self, gitlab):
        gf = GitLabForm(
            config_string=
            config__approvers_more_than_one_user_and_more_than_one_group,
            project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        rules = gitlab.get_approvals_rules(GROUP_AND_PROJECT_NAME)
        assert len(rules) == 1

        rule = rules[0]
        assert len(rule['users']) == 2
        usernames_in_rule = set([user['username'] for user in rule['users']])
        assert usernames_in_rule == {
            'merge_requests_user1', 'merge_requests_user2'
        }

        assert len(rule['groups']) == 2
        groupnames_in_rule = set([group['name'] for group in rule['groups']])
        assert groupnames_in_rule == {
            'gitlabform_tests_group_with_user3',
            'gitlabform_tests_group_with_user4'
        }

        print(str(rule['eligible_approvers']))
        assert len(rule['eligible_approvers']) == 4
        eligibleapprovers_in_rule = set(
            [user['username'] for user in rule['eligible_approvers']])
        assert eligibleapprovers_in_rule == {
            'merge_requests_user1', 'merge_requests_user2',
            'merge_requests_user3', 'merge_requests_user4'
        }
    def test__single_secret_variable(self, gitlab):
        gf = GitLabForm(config_string=config_single_secret_variable,
                        project_or_group=GROUP_NAME)
        gf.main()

        secret_variables = gitlab.get_group_secret_variables(GROUP_NAME)
        assert len(secret_variables) == 1
Exemplo n.º 5
0
    def test__removing_preexisting_approvals(self, gitlab):
        # add some preexisting approval rules
        gitlab.create_approval_rule(
            GROUP_AND_PROJECT_NAME,
            "additional approval rule",
            1,
            ["merge_requests_user2"],
            [GROUP_WITH_USER4],
        )

        gf = GitLabForm(
            config_string=config__approvers_removing_preexisting_approvals,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        rules = gitlab.get_approvals_rules(GROUP_AND_PROJECT_NAME)
        assert len(rules) == 1
        rule = rules[0]
        assert len(rule["users"]) == 1
        usernames_in_rule = set([user["username"] for user in rule["users"]])
        assert usernames_in_rule == {"merge_requests_user1"}

        assert len(rule["groups"]) == 1
        groupnames_in_rule = set([group["name"] for group in rule["groups"]])
        assert groupnames_in_rule == {
            "gitlabform_tests_group_with_user3",
        }
    def test__more_than_one_user_and_more_than_one_group(self, gitlab):
        gf = GitLabForm(
            config_string=config__approvers_more_than_one_user_and_more_than_one_group,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        rules = gitlab.get_approvals_rules(GROUP_AND_PROJECT_NAME)
        assert len(rules) == 1

        rule = rules[0]
        assert len(rule["users"]) == 2
        usernames_in_rule = set([user["username"] for user in rule["users"]])
        assert usernames_in_rule == {"merge_requests_user1", "merge_requests_user2"}

        assert len(rule["groups"]) == 2
        groupnames_in_rule = set([group["name"] for group in rule["groups"]])
        assert groupnames_in_rule == {
            "gitlabform_tests_group_with_user3",
            "gitlabform_tests_group_with_user4",
        }

        print(str(rule["eligible_approvers"]))
        assert len(rule["eligible_approvers"]) == 4
        eligibleapprovers_in_rule = set(
            [user["username"] for user in rule["eligible_approvers"]]
        )
        assert eligibleapprovers_in_rule == {
            "merge_requests_user1",
            "merge_requests_user2",
            "merge_requests_user3",
            "merge_requests_user4",
        }
Exemplo n.º 7
0
    def test__if_jira_commit_events_false_works(self, gitlab: GitLab):
        gf = GitLabForm(config_string=config_service_jira_commit_events_false,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        service = gitlab.get_service(GROUP_AND_PROJECT_NAME, 'jira')
        assert service['active'] is True
        assert service['commit_events'] is False
Exemplo n.º 8
0
    def test__mattermost_confidential_issues_events(self, gitlab: GitLab):
        gf = GitLabForm(
            config_string=config_service_mattermost_confidential_issues_events,
            project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        service = gitlab.get_service(GROUP_AND_PROJECT_NAME, 'mattermost')
        assert service['confidential_issues_events'] is False
    def test__protected_secret_variables(self, gitlab):
        gf = GitLabForm(config_string=config_protected_secret_variables,
                        project_or_group=GROUP_NAME)
        gf.main()

        secret_variable = gitlab.get_group_secret_variable_object(
            GROUP_NAME, "FOO")
        assert secret_variable["value"] == "123"
        assert secret_variable["protected"]
Exemplo n.º 10
0
    def test__builds_for_private_projects(self, gitlab):
        gf = GitLabForm(
            config_string=config_builds_for_private_projects,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        settings = gitlab.get_project_settings(GROUP_AND_PROJECT_NAME)
        assert settings["visibility"] == "private"
Exemplo n.º 11
0
    def test__protect_branch_and_disallow_all(self, gitlab):
        gf = GitLabForm(config_string=protect_branch_and_disallow_all,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME,
                                   'protect_branch_and_disallow_all')
        assert branch['protected'] is True
        assert branch['developers_can_push'] is False
        assert branch['developers_can_merge'] is False
Exemplo n.º 12
0
    def test__archive_project(self, gitlab):
        gf = GitLabForm(
            config_string=archive_project,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        project = gitlab.get_project(GROUP_AND_PROJECT_NAME)

        assert project["archived"] is True
Exemplo n.º 13
0
    def test__if_jira_commit_events_true_works(self, gitlab: GitLab):
        gf = GitLabForm(
            config_string=config_service_jira_commit_events_true,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        service = gitlab.get_service(GROUP_AND_PROJECT_NAME, "jira")
        assert service["active"] is True
        assert service["commit_events"] is True
Exemplo n.º 14
0
    def test__builds_disabled(self, gitlab):
        gf = GitLabForm(
            config_string=config_builds_not_enabled,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        with pytest.raises(UnexpectedResponseException):
            # secret variables will NOT be available without builds_access_level in ['private', 'enabled']
            gitlab.get_secret_variables(GROUP_AND_PROJECT_NAME)
Exemplo n.º 15
0
    def test__delete_schedule(self, gitlab):
        gf = GitLabForm(
            config_string=delete_schedule,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        schedule = self.__find_pipeline_schedule_by_description_and_get_first(
            gitlab, "Redundant schedule")
        assert schedule is None
    def test__more_secret_variables(self, gitlab):
        gf = GitLabForm(config_string=config_more_secret_variables,
                        project_or_group=GROUP_NAME)
        gf.main()

        secret_variables = gitlab.get_group_secret_variables(GROUP_NAME)
        secret_variables_keys = set(
            [secret["key"] for secret in secret_variables])
        assert len(secret_variables) == 2
        assert secret_variables_keys == {"FOO", "BAR"}
    def test__if_it_works__single_user(self, gitlab):
        gf = GitLabForm(config_string=config__approvers_single_user,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        rules = gitlab.get_approvals_rules(GROUP_AND_PROJECT_NAME)
        assert len(rules) == 1
        assert len(rules[0]['users']) == 1
        assert rules[0]['users'][0]['username'] == 'merge_requests_user1'
        assert len(rules[0]['groups']) == 0
Exemplo n.º 18
0
    def setup_some_users(gitlab):
        gf = GitLabForm(config_string=some_users, project_or_group=GROUP_NAME)
        gf.main()

        members = gitlab.get_group_members(GROUP_NAME)
        assert len(members) == 3
        members_usernames = [member['username'] for member in members]
        assert members_usernames.count('root') == 1
        assert members_usernames.count('group_member_user2') == 1
        assert members_usernames.count('group_member_user3') == 1
    def test__if_it_works__single_group(self, gitlab):
        gf = GitLabForm(config_string=config__approvers_single_group,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        rules = gitlab.get_approvals_rules(GROUP_AND_PROJECT_NAME)
        assert len(rules) == 1
        assert len(rules[0]['groups']) == 1
        assert rules[0]['groups'][0][
            'name'] == 'gitlabform_tests_group_with_user1_and_user2'
        assert len(rules[0]['users']) == 0
Exemplo n.º 20
0
    def test__protect_branch_but_allow_all(self, gitlab):
        gf = GitLabForm(
            config_string=protect_branch_but_allow_all,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME,
                                   "protect_branch_but_allow_all")
        assert branch["protected"] is True
        assert branch["developers_can_push"] is True
        assert branch["developers_can_merge"] is True
Exemplo n.º 21
0
def run_gitlabform(config, group_and_project):
    # f-strings with """ used as configs have the disadvantage of having indentation in them - let's remove it here
    config = textwrap.dedent(config)

    # we don't want to repeat ourselves in the tests, so prefix the configs with this mandatory part here
    config = CONFIG + config

    gf = GitLabForm(
        config_string=config,
        project_or_group=group_and_project,
    )
    gf.main()
Exemplo n.º 22
0
    def test__set_file_all_branches(self, gitlab):
        gf = GitLabForm(config_string=set_file_all_branches,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        for branch in [
                'master', 'protected_branch1', 'protected_branch2',
                'regular_branch1', 'regular_branch2'
        ]:
            file_content = gitlab.get_file(GROUP_AND_PROJECT_NAME, branch,
                                           'README.md')
            assert file_content == 'Content for all branches'
Exemplo n.º 23
0
    def test__remove_users(self, gitlab):
        Helpers.setup_some_users(gitlab)

        gf = GitLabForm(config_string=remove_users,
                        project_or_group=GROUP_NAME)
        gf.main()

        members = gitlab.get_group_members(GROUP_NAME)
        assert len(members) == 2
        members_usernames = [member['username'] for member in members]
        assert members_usernames.count('group_member_user1') == 1
        assert members_usernames.count('group_member_user3') == 1
Exemplo n.º 24
0
    def test__if_push_events_false_works(self, gitlab: GitLab):
        gf = GitLabForm(config_string=config_service_push_events_false,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        services = []
        for service_name in ['asana', 'hipchat', 'redmine']:
            service = gitlab.get_service(GROUP_AND_PROJECT_NAME, service_name)
            services.append(service)

        assert all([service['active'] for service in services]) is True
        assert all([service['push_events'] for service in services]) is False
    def test__if_it_works__single_user_and_single_group(self, gitlab):
        gf = GitLabForm(
            config_string=config__approvers_single_user_and_single_group,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        rules = gitlab.get_approvals_rules(GROUP_AND_PROJECT_NAME)
        assert len(rules) == 1
        assert len(rules[0]["users"]) == 1
        assert rules[0]["users"][0]["username"] == "merge_requests_user1"
        assert len(rules[0]["groups"]) == 1
        assert rules[0]["groups"][0]["name"] == "gitlabform_tests_group_with_user4"
Exemplo n.º 26
0
    def test__not_remove_users_without_enforce(self, gitlab):
        Helpers.setup_some_users(gitlab)

        gf = GitLabForm(config_string=not_remove_users_without_enforce,
                        project_or_group=GROUP_NAME)
        gf.main()

        members = gitlab.get_group_members(GROUP_NAME)
        assert len(members) == 3
        members_usernames = [member['username'] for member in members]
        assert members_usernames.count('root') == 1
        assert members_usernames.count('group_member_user2') == 1
        assert members_usernames.count('group_member_user3') == 1
Exemplo n.º 27
0
    def test__set_file_specific_branch(self, gitlab):
        gf = GitLabForm(config_string=set_file_specific_branch,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        file_content = gitlab.get_file(GROUP_AND_PROJECT_NAME, 'master',
                                       'README.md')
        assert file_content == 'Content for master only'

        other_branch_file_content = gitlab.get_file(GROUP_AND_PROJECT_NAME,
                                                    'protected_branch1',
                                                    'README.md')
        assert other_branch_file_content == 'Hello World!'
Exemplo n.º 28
0
    def test__mixed_config(self, gitlab):
        gf = GitLabForm(config_string=mixed_config,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME,
                                   "protect_branch_and_allow_merges")
        assert branch["protected"] is True
        assert branch["developers_can_push"] is False
        assert branch["developers_can_merge"] is True

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME,
                                   "protect_branch_and_allow_pushes")
        assert branch["protected"] is True
        assert branch["developers_can_push"] is True
        assert branch["developers_can_merge"] is False

        gf = GitLabForm(config_string=unprotect_branches,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME,
                                   "protect_branch_and_allow_merges")
        assert branch["protected"] is False

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME,
                                   "protect_branch_and_allow_pushes")
        assert branch["protected"] is False
Exemplo n.º 29
0
    def test__if_push_events_change_works(self, gitlab: GitLab):
        gf = GitLabForm(
            config_string=config_service_push_events_true,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        services = []
        for service_name in ["asana", "hipchat", "redmine"]:
            service = gitlab.get_service(GROUP_AND_PROJECT_NAME, service_name)
            services.append(service)

        assert all([service["active"] for service in services]) is True
        assert all([service["push_events"] for service in services]) is True

        gf = GitLabForm(
            config_string=config_service_push_events_false,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        services = []
        for service_name in ["asana", "hipchat", "redmine"]:
            service = gitlab.get_service(GROUP_AND_PROJECT_NAME, service_name)
            services.append(service)

        assert all([service["active"] for service in services]) is True
        assert all([service["push_events"] for service in services]) is False
Exemplo n.º 30
0
    def test__set_file_specific_branch(self, gitlab):
        gf = GitLabForm(
            config_string=set_file_specific_branch,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        file_content = gitlab.get_file(GROUP_AND_PROJECT_NAME, "main",
                                       "README.md")
        assert file_content == "Content for main only"

        other_branch_file_content = gitlab.get_file(GROUP_AND_PROJECT_NAME,
                                                    "protected_branch1",
                                                    "README.md")
        assert other_branch_file_content == "Hello World!"