def test__if_change_works__single_user_and_single_group_change(
            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'

        gf = GitLabForm(
            config_string=config__approvers_single_user_and_single_group_change,
            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_user2'
        assert len(rules[0]['groups']) == 1
        assert rules[0]['groups'][0][
            'name'] == 'gitlabform_tests_group_with_user1_and_user2'
Exemplo n.º 2
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.º 3
0
    def test_protect_branch_with_new_api_next_update_with_old_api_and_unprotect(
            self, gitlab):
        gf = GitLabForm(config_string=config_protect_branch_with_new_api,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        branch = gitlab.get_branch_access_levels(GROUP_AND_PROJECT_NAME,
                                                 'protect_branch')
        assert branch['push_access_levels'][0]['access_level'] is 0
        assert branch['merge_access_levels'][0]['access_level'] is 40
        assert branch['unprotect_access_levels'][0]['access_level'] is 40

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

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME, 'protect_branch')
        assert branch['protected'] is True
        assert branch['developers_can_push'] is True
        assert branch['developers_can_merge'] is True

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

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME, 'protect_branch')
        assert branch['protected'] is False
Exemplo n.º 4
0
    def test_protect_branch_with_new_api_next_update_with_old_api_and_unprotect(
            self, gitlab):
        gf = GitLabForm(
            config_string=config_protect_branch_with_new_api,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        branch = gitlab.get_branch_access_levels(GROUP_AND_PROJECT_NAME,
                                                 "protect_branch")
        assert branch["push_access_levels"][0]["access_level"] is 0
        assert branch["merge_access_levels"][0]["access_level"] is 40
        assert branch["unprotect_access_levels"][0]["access_level"] is 40

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

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

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

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME, "protect_branch")
        assert branch["protected"] is False
Exemplo n.º 5
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
    def test__if_change_works__single_user_and_single_group_change(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"

        gf = GitLabForm(
            config_string=config__approvers_single_user_and_single_group_change,
            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_user2"
        assert len(rules[0]["groups"]) == 1
        assert (
            rules[0]["groups"][0]["name"]
            == "gitlabform_tests_group_with_user1_and_user2"
        )
Exemplo n.º 7
0
    def test__mixed_config_with_new_api(self, gitlab):
        gf = GitLabForm(
            config_string=mixed_config_with_access_levels,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        branch = gitlab.get_branch_access_levels(
            GROUP_AND_PROJECT_NAME,
            "protect_branch_and_allow_merges_access_levels")
        assert branch["push_access_levels"][0]["access_level"] is 0
        assert branch["merge_access_levels"][0]["access_level"] is 30
        assert branch["unprotect_access_levels"][0]["access_level"] is 40

        branch = gitlab.get_branch_access_levels(
            GROUP_AND_PROJECT_NAME, "*_allow_pushes_access_levels")
        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

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

        branch = gitlab.get_branch_access_levels(
            GROUP_AND_PROJECT_NAME,
            "protect_branch_and_allow_merges_access_levels")
        assert branch["push_access_levels"][0]["access_level"] is 0
        assert branch["merge_access_levels"][0]["access_level"] is 40
        assert branch["unprotect_access_levels"][0]["access_level"] is 40

        branch = gitlab.get_branch_access_levels(
            GROUP_AND_PROJECT_NAME, "*_allow_pushes_access_levels")
        assert branch["push_access_levels"][0]["access_level"] is 40
        assert branch["merge_access_levels"][0]["access_level"] is 40
        assert branch["unprotect_access_levels"][0]["access_level"] is 40

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

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

        branch = gitlab.get_branch(
            GROUP_AND_PROJECT_NAME,
            "protect_branch_and_allow_pushes_access_levels")
        assert branch["protected"] is False
    def test__if_change_works__only_groups(self, gitlab):
        gf = GitLabForm(config_string=config__approvers_only_groups, project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        approvers = gitlab.get_approvers(GROUP_AND_PROJECT_NAME)
        assert len(approvers['approver_groups']) == 1

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

        approvers = gitlab.get_approvers(GROUP_AND_PROJECT_NAME)
        assert len(approvers['approver_groups']) == 2
Exemplo n.º 9
0
    def test__more_than_one_user_and_more_than_one_group__change(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",
        }

        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",
        }

        gf = GitLabForm(
            config_string=config__approvers_more_than_one_user,
            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"]) == 0
    def test__delete_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
        assert secret_variables[0]["value"] == "123"

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

        secret_variables = gitlab.get_group_secret_variables(GROUP_NAME)
        assert len(secret_variables) == 0
Exemplo n.º 11
0
    def test__if_delete_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

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

        service = gitlab.get_service(GROUP_AND_PROJECT_NAME, 'jira')
        assert service['active'] is False
Exemplo n.º 12
0
    def test__dont_edit_archived_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

        gf = GitLabForm(
            config_string=edit_archived_project,
            project_or_group=GROUP_NAME,
        )
        gf.main()
Exemplo n.º 13
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",
        }
Exemplo n.º 14
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.º 15
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'
        }
Exemplo n.º 17
0
    def test__change_owner(self, gitlab):
        gf = GitLabForm(config_string=one_owner, project_or_group=GROUP_NAME)
        gf.main()

        members = gitlab.get_group_members(GROUP_NAME)
        assert len(members) == 1
        assert members[0]['access_level'] == 50
        assert members[0]['username'] == 'root'

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

        members = gitlab.get_group_members(GROUP_NAME)
        assert len(members) == 1
        assert members[0]['access_level'] == 50
        assert members[0]['username'] == 'group_member_user3'
Exemplo n.º 18
0
    def test_unprotect_when_the_rest_of_the_parameters_are_still_specified_old_api(
            self, gitlab):
        gf = GitLabForm(config_string=config_protect_branch_with_old_api,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME, 'protect_branch')
        assert branch['protected'] is True
        assert branch['developers_can_push'] is True
        assert branch['developers_can_merge'] is True

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

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME, 'protect_branch')
        assert branch['protected'] is False
Exemplo n.º 19
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
Exemplo n.º 20
0
    def test__single_secret_variable(self, gitlab):
        gf = GitLabForm(
            config_string=config_single_secret_variable,
            project_or_group=GROUP_AND_PROJECT_NAME,
        )
        gf.main()

        secret_variables = gitlab.get_secret_variables(GROUP_AND_PROJECT_NAME)
        assert len(secret_variables) == 1
    def test__protected_change_secret_variables(self, gitlab):
        gf = GitLabForm(config_string=config_single_secret_variable,
                        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"] is False

        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"] is True
    def test__masked_secret_variables(self, gitlab):
        gf = GitLabForm(config_string=config_masked_secret_variables,
                        project_or_group=GROUP_NAME)
        gf.main()

        secret_variable = gitlab.get_group_secret_variable_object(
            GROUP_NAME, "FOO")
        assert secret_variable["value"] == "12345678"
        assert secret_variable["masked"]
Exemplo n.º 23
0
    def test_unprotect_when_the_rest_of_the_parameters_are_still_specified_new_api(
            self, gitlab):
        gf = GitLabForm(config_string=config_protect_branch_with_new_api,
                        project_or_group=GROUP_AND_PROJECT_NAME)
        gf.main()

        branch = gitlab.get_branch_access_levels(GROUP_AND_PROJECT_NAME,
                                                 'protect_branch')
        assert branch['push_access_levels'][0]['access_level'] is 0
        assert branch['merge_access_levels'][0]['access_level'] is 40
        assert branch['unprotect_access_levels'][0]['access_level'] is 40

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

        branch = gitlab.get_branch(GROUP_AND_PROJECT_NAME, 'protect_branch')
        assert branch['protected'] is False
Exemplo n.º 24
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.º 25
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
Exemplo n.º 26
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
Exemplo n.º 27
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
    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"}
Exemplo n.º 29
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
    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