Blame tests/test_pagure_admin.py

Pierre-Yves Chibon d4c9da
# -*- coding: utf-8 -*-
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
"""
Pierre-Yves Chibon ffbe63
 (c) 2017-2018 - Copyright Red Hat Inc
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
 Authors:
Pierre-Yves Chibon d4c9da
   Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
"""
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 67d1cc
from __future__ import unicode_literals, absolute_import
Aurélien Bompard dcf6f6
Pierre-Yves Chibon 87a6d0
import datetime  # noqa
Pierre-Yves Chibon 600fa7
import os  # noqa
Pierre-Yves Chibon 600fa7
import platform  # noqa
Pierre-Yves Chibon d4c9da
import shutil  # noqa
Pierre-Yves Chibon d4c9da
import subprocess  # noqa
Pierre-Yves Chibon d4c9da
import sys  # noqa
Pierre-Yves Chibon 600fa7
import unittest  # noqa
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon a10996
import pygit2
Pierre-Yves Chibon d4c9da
import munch  # noqa
Pierre-Yves Chibon d4c9da
from mock import patch, MagicMock  # noqa
Fabian Arrotin 0096c9
from six import StringIO  # noqa
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 73d120
sys.path.insert(
Pierre-Yves Chibon 73d120
    0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
Pierre-Yves Chibon 73d120
)
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon b130e5
import pagure.config  # noqa
Aurélien Bompard a29742
import pagure.exceptions  # noqa: E402
Pierre-Yves Chibon d4c9da
import pagure.cli.admin  # noqa
Pierre-Yves Chibon d4c9da
import pagure.lib.model  # noqa
Pierre-Yves Chibon d4c9da
import tests  # noqa
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
class PagureAdminAdminTokenEmptytests(tests.Modeltests):
Pierre-Yves Chibon d4c9da
    """ Tests for pagure-admin admin-token when there is nothing in the DB
Pierre-Yves Chibon d4c9da
    """
Aurélien Bompard e78d79
Aurélien Bompard e78d79
    populate_db = False
Aurélien Bompard e78d79
Pierre-Yves Chibon d4c9da
    def setUp(self):
Pierre-Yves Chibon d4c9da
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon d4c9da
        super(PagureAdminAdminTokenEmptytests, self).setUp()
Aurélien Bompard e78d79
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
    def test_do_create_admin_token_no_user(self):
Pierre-Yves Chibon d4c9da
        """ Test the do_create_admin_token function of pagure-admin without
Pierre-Yves Chibon d4c9da
        user.
Pierre-Yves Chibon d4c9da
        """
Pierre-Yves Chibon 73d120
        args = munch.Munch({"user": "pingou"})
Aurélien Bompard a29742
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Aurélien Bompard a29742
            pagure.cli.admin.do_create_admin_token(args)
Pierre-Yves Chibon 73d120
        self.assertEqual(cm.exception.args[0], 'No user "pingou" found')
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
    def test_do_list_admin_token_empty(self):
Pierre-Yves Chibon d4c9da
        """ Test the do_list_admin_token function of pagure-admin when there
Pierre-Yves Chibon d4c9da
        are not tokens in the db.
Pierre-Yves Chibon d4c9da
        """
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 73d120
        self.assertEqual(output, "No admin tokens found\n")
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon ede948
class PagureAdminAdminRefreshGitolitetests(tests.Modeltests):
Pierre-Yves Chibon ede948
    """ Tests for pagure-admin refresh-gitolite """
Pierre-Yves Chibon ede948
Aurélien Bompard e78d79
    populate_db = False
Aurélien Bompard e78d79
Pierre-Yves Chibon ede948
    def setUp(self):
Pierre-Yves Chibon ede948
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon ede948
        super(PagureAdminAdminRefreshGitolitetests, self).setUp()
Aurélien Bompard e78d79
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon ede948
Pierre-Yves Chibon ede948
        # Create the user pingou
Pierre-Yves Chibon ede948
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="pingou",
Pierre-Yves Chibon 73d120
            fullname="PY C",
Pierre-Yves Chibon 73d120
            password="foo",
Pierre-Yves Chibon 73d120
            default_email="bar@pingou.com",
Pierre-Yves Chibon ede948
        )
Pierre-Yves Chibon ede948
        self.session.add(item)
Pierre-Yves Chibon 73d120
        item = pagure.lib.model.UserEmail(user_id=1, email="bar@pingou.com")
Pierre-Yves Chibon ede948
        self.session.add(item)
Pierre-Yves Chibon ede948
        self.session.commit()
Pierre-Yves Chibon ede948
Pierre-Yves Chibon ede948
        # Create a couple of projects
Pierre-Yves Chibon ede948
        tests.create_projects(self.session)
Pierre-Yves Chibon ede948
Pierre-Yves Chibon ede948
        # Add a group
Pierre-Yves Chibon 930073
        msg = pagure.lib.query.add_group(
Pierre-Yves Chibon ede948
            self.session,
Pierre-Yves Chibon 73d120
            group_name="foo",
Pierre-Yves Chibon 73d120
            display_name="foo group",
Pierre-Yves Chibon ede948
            description=None,
Pierre-Yves Chibon 73d120
            group_type="bar",
Pierre-Yves Chibon 73d120
            user="pingou",
Pierre-Yves Chibon ede948
            is_admin=False,
Pierre-Yves Chibon ede948
            blacklist=[],
Pierre-Yves Chibon ede948
        )
Pierre-Yves Chibon ede948
        self.session.commit()
Pierre-Yves Chibon 73d120
        self.assertEqual(msg, "User `pingou` added to the group `foo`.")
Pierre-Yves Chibon ede948
Pierre-Yves Chibon ede948
        # Make the imported pagure use the correct db session
Pierre-Yves Chibon b130e5
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon ede948
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon 73d120
    @patch("pagure.lib.git_auth.get_git_auth_helper")
Pierre-Yves Chibon ede948
    def test_do_refresh_gitolite_no_args(self, get_helper, conf):
Pierre-Yves Chibon ede948
        """ Test the do_generate_acl function with no special args. """
Pierre-Yves Chibon ede948
        conf.return_value = True
Pierre-Yves Chibon ede948
        helper = MagicMock()
Pierre-Yves Chibon ede948
        get_helper.return_value = helper
Pierre-Yves Chibon ede948
Pierre-Yves Chibon ede948
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"group": None, "project": None, "all_": False, "user": None}
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ede948
        pagure.cli.admin.do_generate_acl(args)
Pierre-Yves Chibon ede948
Patrick Uiterwijk ad0b72
        get_helper.assert_called_with()
Pierre-Yves Chibon ede948
        args = helper.generate_acls.call_args
Pierre-Yves Chibon 73d120
        self.assertIsNone(args[1].get("group"))
Pierre-Yves Chibon 73d120
        self.assertIsNone(args[1].get("project"))
Pierre-Yves Chibon ede948
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon 73d120
    @patch("pagure.lib.git_auth.get_git_auth_helper")
Pierre-Yves Chibon ede948
    def test_do_refresh_gitolite_all_project(self, get_helper, conf):
Pierre-Yves Chibon ede948
        """ Test the do_generate_acl function for all projects. """
Pierre-Yves Chibon ede948
        conf.return_value = True
Pierre-Yves Chibon ede948
        helper = MagicMock()
Pierre-Yves Chibon ede948
        get_helper.return_value = helper
Pierre-Yves Chibon ede948
Pierre-Yves Chibon ede948
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"group": None, "project": None, "all_": True, "user": None}
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ede948
        pagure.cli.admin.do_generate_acl(args)
Pierre-Yves Chibon ede948
Patrick Uiterwijk ad0b72
        get_helper.assert_called_with()
Pierre-Yves Chibon ede948
        args = helper.generate_acls.call_args
Pierre-Yves Chibon 73d120
        self.assertIsNone(args[1].get("group"))
Pierre-Yves Chibon 73d120
        self.assertEqual(args[1].get("project"), -1)
Pierre-Yves Chibon ede948
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon 73d120
    @patch("pagure.lib.git_auth.get_git_auth_helper")
Pierre-Yves Chibon ede948
    def test_do_refresh_gitolite_one_project(self, get_helper, conf):
Pierre-Yves Chibon ede948
        """ Test the do_generate_acl function for a certain project. """
Pierre-Yves Chibon ede948
        conf.return_value = True
Pierre-Yves Chibon ede948
        helper = MagicMock()
Pierre-Yves Chibon ede948
        get_helper.return_value = helper
Pierre-Yves Chibon ede948
Pierre-Yves Chibon ede948
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"group": None, "project": "test", "all_": False, "user": None}
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ede948
        pagure.cli.admin.do_generate_acl(args)
Pierre-Yves Chibon ede948
Patrick Uiterwijk ad0b72
        get_helper.assert_called_with()
Pierre-Yves Chibon ede948
        args = helper.generate_acls.call_args
Pierre-Yves Chibon 73d120
        self.assertIsNone(args[1].get("group"))
Pierre-Yves Chibon 73d120
        self.assertEqual(args[1].get("project").fullname, "test")
Pierre-Yves Chibon ede948
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon 73d120
    @patch("pagure.lib.git_auth.get_git_auth_helper")
Pierre-Yves Chibon ede948
    def test_do_refresh_gitolite_one_project_and_all(self, get_helper, conf):
Pierre-Yves Chibon ede948
        """ Test the do_generate_acl function for a certain project and all.
Pierre-Yves Chibon ede948
        """
Pierre-Yves Chibon ede948
        conf.return_value = True
Pierre-Yves Chibon ede948
        helper = MagicMock()
Pierre-Yves Chibon ede948
        get_helper.return_value = helper
Pierre-Yves Chibon ede948
Pierre-Yves Chibon ede948
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"group": None, "project": "test", "all_": True, "user": None}
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ede948
        pagure.cli.admin.do_generate_acl(args)
Pierre-Yves Chibon ede948
Patrick Uiterwijk ad0b72
        get_helper.assert_called_with()
Pierre-Yves Chibon ede948
        args = helper.generate_acls.call_args
Pierre-Yves Chibon 73d120
        self.assertIsNone(args[1].get("group"))
Pierre-Yves Chibon 73d120
        self.assertEqual(args[1].get("project"), -1)
Pierre-Yves Chibon ede948
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon 73d120
    @patch("pagure.lib.git_auth.get_git_auth_helper")
Pierre-Yves Chibon ede948
    def test_do_refresh_gitolite_one_group(self, get_helper, conf):
Pierre-Yves Chibon ede948
        """ Test the do_generate_acl function for a certain group. """
Pierre-Yves Chibon ede948
        conf.return_value = True
Pierre-Yves Chibon ede948
        helper = MagicMock()
Pierre-Yves Chibon ede948
        get_helper.return_value = helper
Pierre-Yves Chibon ede948
Pierre-Yves Chibon ede948
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"group": "foo", "project": None, "all_": False, "user": None}
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ede948
        pagure.cli.admin.do_generate_acl(args)
Pierre-Yves Chibon ede948
Patrick Uiterwijk ad0b72
        get_helper.assert_called_with()
Pierre-Yves Chibon ede948
        args = helper.generate_acls.call_args
Pierre-Yves Chibon 73d120
        self.assertEqual(args[1].get("group").group_name, "foo")
Pierre-Yves Chibon 73d120
        self.assertIsNone(args[1].get("project"))
Pierre-Yves Chibon ede948
Pierre-Yves Chibon ede948
Pierre-Yves Chibon d4c9da
class PagureAdminAdminTokentests(tests.Modeltests):
Pierre-Yves Chibon d4c9da
    """ Tests for pagure-admin admin-token """
Pierre-Yves Chibon d4c9da
Aurélien Bompard e78d79
    populate_db = False
Aurélien Bompard e78d79
Pierre-Yves Chibon d4c9da
    def setUp(self):
Pierre-Yves Chibon d4c9da
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon d4c9da
        super(PagureAdminAdminTokentests, self).setUp()
Aurélien Bompard e78d79
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
        # Create the user pingou
Pierre-Yves Chibon d4c9da
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="pingou",
Pierre-Yves Chibon 73d120
            fullname="PY C",
Pierre-Yves Chibon 73d120
            password="foo",
Pierre-Yves Chibon 73d120
            default_email="bar@pingou.com",
Pierre-Yves Chibon d4c9da
        )
Pierre-Yves Chibon d4c9da
        self.session.add(item)
Pierre-Yves Chibon 73d120
        item = pagure.lib.model.UserEmail(user_id=1, email="bar@pingou.com")
Pierre-Yves Chibon d4c9da
        self.session.add(item)
Pierre-Yves Chibon d4c9da
        self.session.commit()
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
        # Make the imported pagure use the correct db session
Pierre-Yves Chibon b130e5
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._get_input")
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon d4c9da
    def test_do_create_admin_token(self, conf, rinp):
Pierre-Yves Chibon d4c9da
        """ Test the do_create_admin_token function of pagure-admin. """
Pierre-Yves Chibon d4c9da
        conf.return_value = True
Pierre-Yves Chibon 73d120
        rinp.return_value = "1,2,3"
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 73d120
        args = munch.Munch({"user": "pingou"})
Pierre-Yves Chibon d4c9da
        pagure.cli.admin.do_create_admin_token(args)
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
        # Check the outcome
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon d4c9da
        self.assertNotEqual(output, 'No user "pingou" found\n')
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._get_input")
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon 9a36a4
    def test_do_list_admin_token(self, conf, rinp):
Pierre-Yves Chibon 9a36a4
        """ Test the do_list_admin_token function of pagure-admin. """
Pierre-Yves Chibon 9a36a4
        # Create an admin token to use
Pierre-Yves Chibon 9a36a4
        conf.return_value = True
Pierre-Yves Chibon 73d120
        rinp.return_value = "1,2,3"
Pierre-Yves Chibon 9a36a4
Pierre-Yves Chibon 73d120
        args = munch.Munch({"user": "pingou"})
Pierre-Yves Chibon 9a36a4
        pagure.cli.admin.do_create_admin_token(args)
Pierre-Yves Chibon 9a36a4
Pierre-Yves Chibon 9a36a4
        # Retrieve all tokens
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 9a36a4
        self.assertNotEqual(output, 'No user "pingou" found\n')
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon 9a36a4
Pierre-Yves Chibon 9a36a4
        # Retrieve pfrields's tokens
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": "pfrields",
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 73d120
        self.assertEqual(output, "No admin tokens found\n")
Pierre-Yves Chibon 9a36a4
Pierre-Yves Chibon f3c6b4
    def test_do_list_admin_token_non_admin_acls(self):
Pierre-Yves Chibon f3c6b4
        """ Test the do_list_admin_token function of pagure-admin for a token
Pierre-Yves Chibon f3c6b4
        without any admin ACL. """
Pierre-Yves Chibon 930073
        pagure.lib.query.add_token_to_user(
Pierre-Yves Chibon f3c6b4
            self.session,
Pierre-Yves Chibon f3c6b4
            project=None,
Pierre-Yves Chibon 73d120
            acls=["issue_assign", "pull_request_subscribe"],
Pierre-Yves Chibon 73d120
            username="pingou",
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon f3c6b4
Pierre-Yves Chibon f3c6b4
        # Retrieve all admin tokens
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon f3c6b4
        with tests.capture_output() as output:
Pierre-Yves Chibon f3c6b4
            pagure.cli.admin.do_list_admin_token(list_args)
Pierre-Yves Chibon f3c6b4
        output = output.getvalue()
Pierre-Yves Chibon 73d120
        self.assertEqual(output, "No admin tokens found\n")
Pierre-Yves Chibon f3c6b4
Pierre-Yves Chibon f3c6b4
        # Retrieve all tokens
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": True,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon f3c6b4
        with tests.capture_output() as output:
Pierre-Yves Chibon f3c6b4
            pagure.cli.admin.do_list_admin_token(list_args)
Pierre-Yves Chibon f3c6b4
        output = output.getvalue()
Pierre-Yves Chibon f3c6b4
        self.assertNotEqual(output, 'No user "pingou" found\n')
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon f3c6b4
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._get_input")
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon d4c9da
    def test_do_info_admin_token(self, conf, rinp):
Pierre-Yves Chibon d4c9da
        """ Test the do_info_admin_token function of pagure-admin. """
Pierre-Yves Chibon d4c9da
        # Create an admin token to use
Pierre-Yves Chibon d4c9da
        conf.return_value = True
Pierre-Yves Chibon 73d120
        rinp.return_value = "2,4,5"
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 73d120
        args = munch.Munch({"user": "pingou"})
Pierre-Yves Chibon d4c9da
        pagure.cli.admin.do_create_admin_token(args)
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
        # Retrieve the token
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon d4c9da
        self.assertNotEqual(output, 'No user "pingou" found\n')
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 73d120
        token = output.split(" ", 1)[0]
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 73d120
        args = munch.Munch({"token": token})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_info_admin_token(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output.split("\n", 1)[0])
Pierre-Yves Chibon d4c9da
        self.assertEqual(
Pierre-Yves Chibon 73d120
            output.split("\n", 1)[1],
Pierre-Yves Chibon 73d120
            """ACLs:
Pierre-Yves Chibon d4c9da
  - issue_create
Pierre-Yves Chibon d4c9da
  - pull_request_comment
Pierre-Yves Chibon d4c9da
  - pull_request_flag
Pierre-Yves Chibon 73d120
""",
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon f3c6b4
    def test_do_info_admin_token_non_admin_acl(self):
Pierre-Yves Chibon f3c6b4
        """ Test the do_info_admin_token function of pagure-admin for a
Pierre-Yves Chibon f3c6b4
        token not having any admin ACL. """
Pierre-Yves Chibon 930073
        pagure.lib.query.add_token_to_user(
Pierre-Yves Chibon f3c6b4
            self.session,
Pierre-Yves Chibon f3c6b4
            project=None,
Pierre-Yves Chibon 73d120
            acls=["issue_assign", "pull_request_subscribe"],
Pierre-Yves Chibon 73d120
            username="pingou",
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon f3c6b4
Pierre-Yves Chibon f3c6b4
        # Retrieve the token
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": True,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon f3c6b4
        with tests.capture_output() as output:
Pierre-Yves Chibon f3c6b4
            pagure.cli.admin.do_list_admin_token(list_args)
Pierre-Yves Chibon f3c6b4
        output = output.getvalue()
Pierre-Yves Chibon f3c6b4
        self.assertNotEqual(output, 'No user "pingou" found\n')
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon f3c6b4
Pierre-Yves Chibon 73d120
        token = output.split(" ", 1)[0]
Pierre-Yves Chibon f3c6b4
Pierre-Yves Chibon 73d120
        args = munch.Munch({"token": token})
Pierre-Yves Chibon f3c6b4
        with tests.capture_output() as output:
Pierre-Yves Chibon f3c6b4
            pagure.cli.admin.do_info_admin_token(args)
Pierre-Yves Chibon f3c6b4
        output = output.getvalue()
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output.split("\n", 1)[0])
Pierre-Yves Chibon f3c6b4
        self.assertEqual(
Pierre-Yves Chibon 73d120
            output.split("\n", 1)[1],
Pierre-Yves Chibon 73d120
            """ACLs:
Pierre-Yves Chibon f3c6b4
  - issue_assign
Pierre-Yves Chibon f3c6b4
  - pull_request_subscribe
Pierre-Yves Chibon 73d120
""",
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon f3c6b4
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._get_input")
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon d4c9da
    def test_do_expire_admin_token(self, conf, rinp):
Pierre-Yves Chibon d4c9da
        """ Test the do_expire_admin_token function of pagure-admin. """
Pierre-Yves Chibon 73d120
        if "BUILD_ID" in os.environ:
Pierre-Yves Chibon 73d120
            raise unittest.case.SkipTest("Skipping on jenkins/el7")
Pierre-Yves Chibon d8759f
Pierre-Yves Chibon d4c9da
        # Create an admin token to use
Pierre-Yves Chibon d4c9da
        conf.return_value = True
Pierre-Yves Chibon 73d120
        rinp.return_value = "1,2,3"
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 73d120
        args = munch.Munch({"user": "pingou"})
Pierre-Yves Chibon d4c9da
        pagure.cli.admin.do_create_admin_token(args)
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
        # Retrieve the token
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon d4c9da
        self.assertNotEqual(output, 'No user "pingou" found\n')
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 73d120
        token = output.split(" ", 1)[0]
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
        # Before
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": True,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 73d120
        self.assertNotEqual(output, "No admin tokens found\n")
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
        # Expire the token
Pierre-Yves Chibon 73d120
        args = munch.Munch({"token": token})
Pierre-Yves Chibon d4c9da
        pagure.cli.admin.do_expire_admin_token(args)
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon d4c9da
        # After
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": True,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 73d120
        self.assertEqual(output, "No admin tokens found\n")
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._get_input")
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon 87a6d0
    def test_do_update_admin_token_invalid_date(self, conf, rinp):
Pierre-Yves Chibon 87a6d0
        """ Test the do_update_admin_token function of pagure-admin with
Pierre-Yves Chibon 87a6d0
        an invalid date. """
Pierre-Yves Chibon 73d120
        if "BUILD_ID" in os.environ:
Pierre-Yves Chibon 73d120
            raise unittest.case.SkipTest("Skipping on jenkins/el7")
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Create an admin token to use
Pierre-Yves Chibon 87a6d0
        conf.return_value = True
Pierre-Yves Chibon 73d120
        rinp.return_value = "1,2,3"
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
        args = munch.Munch({"user": "pingou"})
Pierre-Yves Chibon 87a6d0
        pagure.cli.admin.do_create_admin_token(args)
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Retrieve the token
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 87a6d0
        self.assertNotEqual(output, 'No user "pingou" found\n')
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
        token = output.split(" ", 1)[0]
Pierre-Yves Chibon 73d120
        current_expiration = output.split(" ", 1)[1]
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Set the expiration date to the token
Pierre-Yves Chibon 73d120
        args = munch.Munch({"token": token, "date": "aa-bb-cc"})
Pierre-Yves Chibon 87a6d0
        self.assertRaises(
Pierre-Yves Chibon 87a6d0
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 87a6d0
            pagure.cli.admin.do_update_admin_token,
Pierre-Yves Chibon 73d120
            args,
Pierre-Yves Chibon 87a6d0
        )
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._get_input")
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon 87a6d0
    def test_do_update_admin_token_invalid_date2(self, conf, rinp):
Pierre-Yves Chibon 87a6d0
        """ Test the do_update_admin_token function of pagure-admin with
Pierre-Yves Chibon 87a6d0
        an invalid date. """
Pierre-Yves Chibon 73d120
        if "BUILD_ID" in os.environ:
Pierre-Yves Chibon 73d120
            raise unittest.case.SkipTest("Skipping on jenkins/el7")
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Create an admin token to use
Pierre-Yves Chibon 87a6d0
        conf.return_value = True
Pierre-Yves Chibon 73d120
        rinp.return_value = "1,2,3"
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
        args = munch.Munch({"user": "pingou"})
Pierre-Yves Chibon 87a6d0
        pagure.cli.admin.do_create_admin_token(args)
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Retrieve the token
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 87a6d0
        self.assertNotEqual(output, 'No user "pingou" found\n')
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
        token = output.split(" ", 1)[0]
Pierre-Yves Chibon 73d120
        current_expiration = output.split(" ", 1)[1]
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Set the expiration date to the token
Pierre-Yves Chibon 73d120
        args = munch.Munch({"token": token, "date": "2017-18-01"})
Pierre-Yves Chibon 87a6d0
        self.assertRaises(
Pierre-Yves Chibon 87a6d0
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 87a6d0
            pagure.cli.admin.do_update_admin_token,
Pierre-Yves Chibon 73d120
            args,
Pierre-Yves Chibon 87a6d0
        )
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._get_input")
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon 87a6d0
    def test_do_update_admin_token_invalid_date3(self, conf, rinp):
Pierre-Yves Chibon 87a6d0
        """ Test the do_update_admin_token function of pagure-admin with
Pierre-Yves Chibon 87a6d0
        an invalid date (is today). """
Pierre-Yves Chibon 73d120
        if "BUILD_ID" in os.environ:
Pierre-Yves Chibon 73d120
            raise unittest.case.SkipTest("Skipping on jenkins/el7")
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Create an admin token to use
Pierre-Yves Chibon 87a6d0
        conf.return_value = True
Pierre-Yves Chibon 73d120
        rinp.return_value = "1,2,3"
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
        args = munch.Munch({"user": "pingou"})
Pierre-Yves Chibon 87a6d0
        pagure.cli.admin.do_create_admin_token(args)
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Retrieve the token
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 87a6d0
        self.assertNotEqual(output, 'No user "pingou" found\n')
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
        token = output.split(" ", 1)[0]
Pierre-Yves Chibon 73d120
        current_expiration = output.split(" ", 1)[1]
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Set the expiration date to the token
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"token": token, "date": datetime.datetime.utcnow().date()}
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 87a6d0
        self.assertRaises(
Pierre-Yves Chibon 87a6d0
            pagure.exceptions.PagureException,
Pierre-Yves Chibon 87a6d0
            pagure.cli.admin.do_update_admin_token,
Pierre-Yves Chibon 73d120
            args,
Pierre-Yves Chibon 87a6d0
        )
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._get_input")
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon 87a6d0
    def test_do_update_admin_token(self, conf, rinp):
Pierre-Yves Chibon 87a6d0
        """ Test the do_update_admin_token function of pagure-admin. """
Pierre-Yves Chibon 73d120
        if "BUILD_ID" in os.environ:
Pierre-Yves Chibon 73d120
            raise unittest.case.SkipTest("Skipping on jenkins/el7")
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Create an admin token to use
Pierre-Yves Chibon 87a6d0
        conf.return_value = True
Pierre-Yves Chibon 73d120
        rinp.return_value = "1,2,3"
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
        args = munch.Munch({"user": "pingou"})
Pierre-Yves Chibon 87a6d0
        pagure.cli.admin.do_create_admin_token(args)
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Retrieve the token
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": False,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 87a6d0
        self.assertNotEqual(output, 'No user "pingou" found\n')
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
        token = output.split(" ", 1)[0]
Pierre-Yves Chibon 73d120
        current_expiration = output.strip().split(" -- ", 2)[-1]
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Before
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": True,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 73d120
        self.assertNotEqual(output, "No admin tokens found\n")
Pierre-Yves Chibon 73d120
        self.assertEqual(len(output.split("\n")), 2)
Pierre-Yves Chibon 73d120
        self.assertIn(" -- pingou -- ", output)
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 73d120
        deadline = datetime.datetime.utcnow().date() + datetime.timedelta(
Pierre-Yves Chibon 73d120
            days=3
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # Set the expiration date to the token
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"token": token, "date": deadline.strftime("%Y-%m-%d")}
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 87a6d0
        pagure.cli.admin.do_update_admin_token(args)
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon 87a6d0
        # After
Pierre-Yves Chibon 73d120
        list_args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "user": None,
Pierre-Yves Chibon 73d120
                "token": None,
Pierre-Yves Chibon 73d120
                "active": True,
Pierre-Yves Chibon 73d120
                "expired": False,
Pierre-Yves Chibon 73d120
                "all": False,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_list_admin_token(list_args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 73d120
        self.assertEqual(output.split(" ", 1)[0], token)
Pierre-Yves Chibon 87a6d0
        self.assertNotEqual(
Pierre-Yves Chibon 73d120
            output.strip().split(" -- ", 2)[-1], current_expiration
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 87a6d0
Pierre-Yves Chibon d4c9da
Pierre-Yves Chibon 25e586
class PagureAdminGetWatchTests(tests.Modeltests):
Pierre-Yves Chibon 25e586
    """ Tests for pagure-admin get-watch """
Pierre-Yves Chibon 25e586
Aurélien Bompard e78d79
    populate_db = False
Aurélien Bompard e78d79
Pierre-Yves Chibon 25e586
    def setUp(self):
Pierre-Yves Chibon 25e586
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon 25e586
        super(PagureAdminGetWatchTests, self).setUp()
Aurélien Bompard e78d79
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        # Create the user pingou
Pierre-Yves Chibon 25e586
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="pingou",
Pierre-Yves Chibon 73d120
            fullname="PY C",
Pierre-Yves Chibon 73d120
            password="foo",
Pierre-Yves Chibon 73d120
            default_email="bar@pingou.com",
Pierre-Yves Chibon 25e586
        )
Pierre-Yves Chibon 25e586
        self.session.add(item)
Pierre-Yves Chibon 73d120
        item = pagure.lib.model.UserEmail(user_id=1, email="bar@pingou.com")
Pierre-Yves Chibon 25e586
        self.session.add(item)
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        # Create the user foo
Pierre-Yves Chibon 25e586
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 73d120
            fullname="foo B.",
Pierre-Yves Chibon 73d120
            password="foob",
Pierre-Yves Chibon 73d120
            default_email="foo@pingou.com",
Pierre-Yves Chibon 25e586
        )
Pierre-Yves Chibon 25e586
        self.session.add(item)
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        # Create two projects for the user pingou
Pierre-Yves Chibon 25e586
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 25e586
            user_id=1,  # pingou
Pierre-Yves Chibon 73d120
            name="test",
Pierre-Yves Chibon 73d120
            description="namespaced test project",
Pierre-Yves Chibon 73d120
            hook_token="aaabbbeee",
Pierre-Yves Chibon 73d120
            namespace="somenamespace",
Pierre-Yves Chibon 25e586
        )
Pierre-Yves Chibon 25e586
        self.session.add(item)
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 25e586
            user_id=1,  # pingou
Pierre-Yves Chibon 73d120
            name="test",
Pierre-Yves Chibon 73d120
            description="Test project",
Pierre-Yves Chibon 73d120
            hook_token="aaabbbccc",
Pierre-Yves Chibon 25e586
            namespace=None,
Pierre-Yves Chibon 25e586
        )
Pierre-Yves Chibon 25e586
        self.session.add(item)
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        self.session.commit()
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        # Make the imported pagure use the correct db session
Pierre-Yves Chibon b130e5
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_get_project_unknown_project(self):
Pierre-Yves Chibon 25e586
        """ Test the get-watch function of pagure-admin with an unknown
Pierre-Yves Chibon 25e586
        project.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "foobar", "user": "pingou"})
Aurélien Bompard a29742
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Aurélien Bompard a29742
            pagure.cli.admin.do_get_watch_status(args)
Pierre-Yves Chibon 73d120
        self.assertEqual(cm.exception.args[0], "No project found with: foobar")
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_get_project_invalid_project(self):
Pierre-Yves Chibon 25e586
        """ Test the get-watch function of pagure-admin with an invalid
Pierre-Yves Chibon 25e586
        project.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "fo/o/bar", "user": "pingou"})
Aurélien Bompard a29742
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Aurélien Bompard a29742
            pagure.cli.admin.do_get_watch_status(args)
Pierre-Yves Chibon 25e586
        self.assertEqual(
Pierre-Yves Chibon ffbe63
            cm.exception.args[0],
Aurélien Bompard a29742
            'Invalid project name, has more than one "/": fo/o/bar',
Aurélien Bompard a29742
        )
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_get_project_invalid_user(self):
Pierre-Yves Chibon 25e586
        """ Test the get-watch function of pagure-admin on a invalid user.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "test", "user": "beebop"})
Aurélien Bompard a29742
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Aurélien Bompard a29742
            pagure.cli.admin.do_get_watch_status(args)
Pierre-Yves Chibon 73d120
        self.assertEqual(cm.exception.args[0], 'No user "beebop" found')
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_get_project(self):
Pierre-Yves Chibon 25e586
        """ Test the get-watch function of pagure-admin on a regular project.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "test", "user": "pingou"})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_get_watch_status(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 25e586
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "On test user: pingou is watching the following items: "
Pierre-Yves Chibon 73d120
            "issues, pull-requests\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_get_project_not_watching(self):
Pierre-Yves Chibon 25e586
        """ Test the get-watch function of pagure-admin on a regular project.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "test", "user": "foo"})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_get_watch_status(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 25e586
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "On test user: foo is watching the following items: None\n", output
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_get_project_namespaced(self):
Pierre-Yves Chibon 25e586
        """ Test the get-watch function of pagure-admin on a namespaced project.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "somenamespace/test", "user": "pingou"})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_get_watch_status(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 25e586
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "On somenamespace/test user: pingou is watching the following "
Pierre-Yves Chibon 73d120
            "items: issues, pull-requests\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_get_project_namespaced_not_watching(self):
Pierre-Yves Chibon 25e586
        """ Test the get-watch function of pagure-admin on a namespaced project.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "somenamespace/test", "user": "foo"})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_get_watch_status(args)
Aurélien Bompard a29742
        output = output.getvalue()
Aurélien Bompard a29742
        with tests.capture_output() as _discarded:
Aurélien Bompard a29742
            pagure.cli.admin.do_get_watch_status(args)
Pierre-Yves Chibon 25e586
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "On somenamespace/test user: foo is watching the following "
Pierre-Yves Chibon 73d120
            "items: None\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
class PagureAdminUpdateWatchTests(tests.Modeltests):
Pierre-Yves Chibon 25e586
    """ Tests for pagure-admin update-watch """
Pierre-Yves Chibon 25e586
Aurélien Bompard e78d79
    populate_db = False
Aurélien Bompard e78d79
Pierre-Yves Chibon 25e586
    def setUp(self):
Pierre-Yves Chibon 25e586
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon 25e586
        super(PagureAdminUpdateWatchTests, self).setUp()
Aurélien Bompard e78d79
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        # Create the user pingou
Pierre-Yves Chibon 25e586
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="pingou",
Pierre-Yves Chibon 73d120
            fullname="PY C",
Pierre-Yves Chibon 73d120
            password="foo",
Pierre-Yves Chibon 73d120
            default_email="bar@pingou.com",
Pierre-Yves Chibon 25e586
        )
Pierre-Yves Chibon 25e586
        self.session.add(item)
Pierre-Yves Chibon 73d120
        item = pagure.lib.model.UserEmail(user_id=1, email="bar@pingou.com")
Pierre-Yves Chibon 25e586
        self.session.add(item)
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        # Create the user foo
Pierre-Yves Chibon 25e586
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="foo",
Pierre-Yves Chibon 73d120
            fullname="foo B.",
Pierre-Yves Chibon 73d120
            password="foob",
Pierre-Yves Chibon 73d120
            default_email="foo@pingou.com",
Pierre-Yves Chibon 25e586
        )
Pierre-Yves Chibon 25e586
        self.session.add(item)
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        # Create two projects for the user pingou
Pierre-Yves Chibon 25e586
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 25e586
            user_id=1,  # pingou
Pierre-Yves Chibon 73d120
            name="test",
Pierre-Yves Chibon 73d120
            description="namespaced test project",
Pierre-Yves Chibon 73d120
            hook_token="aaabbbeee",
Pierre-Yves Chibon 73d120
            namespace="somenamespace",
Pierre-Yves Chibon 25e586
        )
Pierre-Yves Chibon 25e586
        self.session.add(item)
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 25e586
            user_id=1,  # pingou
Pierre-Yves Chibon 73d120
            name="test",
Pierre-Yves Chibon 73d120
            description="Test project",
Pierre-Yves Chibon 73d120
            hook_token="aaabbbccc",
Pierre-Yves Chibon 25e586
            namespace=None,
Pierre-Yves Chibon 25e586
        )
Pierre-Yves Chibon 25e586
        self.session.add(item)
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        self.session.commit()
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
        # Make the imported pagure use the correct db session
Pierre-Yves Chibon b130e5
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_update_project_unknown_project(self):
Pierre-Yves Chibon 25e586
        """ Test the update-watch function of pagure-admin on an unknown
Pierre-Yves Chibon 25e586
        project.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"project": "foob", "user": "pingou", "status": "1"}
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Aurélien Bompard a29742
            pagure.cli.admin.do_update_watch_status(args)
Pierre-Yves Chibon 73d120
        self.assertEqual(cm.exception.args[0], "No project found with: foob")
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_update_project_invalid_project(self):
Pierre-Yves Chibon 25e586
        """ Test the update-watch function of pagure-admin on an invalid
Pierre-Yves Chibon 25e586
        project.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"project": "fo/o/b", "user": "pingou", "status": "1"}
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Aurélien Bompard a29742
            pagure.cli.admin.do_update_watch_status(args)
Pierre-Yves Chibon 25e586
        self.assertEqual(
Pierre-Yves Chibon ffbe63
            cm.exception.args[0],
Aurélien Bompard a29742
            'Invalid project name, has more than one "/": fo/o/b',
Aurélien Bompard a29742
        )
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_update_project_invalid_user(self):
Pierre-Yves Chibon 25e586
        """ Test the update-watch function of pagure-admin on an invalid user.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "test", "user": "foob", "status": "1"})
Aurélien Bompard a29742
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Aurélien Bompard a29742
            pagure.cli.admin.do_update_watch_status(args)
Pierre-Yves Chibon 73d120
        self.assertEqual(cm.exception.args[0], 'No user "foob" found')
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_update_project_invalid_status(self):
Pierre-Yves Chibon 25e586
        """ Test the update-watch function of pagure-admin with an invalid
Pierre-Yves Chibon 25e586
        status.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"project": "test", "user": "pingou", "status": "10"}
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Aurélien Bompard a29742
            pagure.cli.admin.do_update_watch_status(args)
Pierre-Yves Chibon 25e586
        self.assertEqual(
Pierre-Yves Chibon ffbe63
            cm.exception.args[0],
Pierre-Yves Chibon 73d120
            "Invalid status provided: 10 not in -1, 0, 1, 2, 3",
Aurélien Bompard a29742
        )
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
    def test_get_watch_update_project_no_effect(self):
Pierre-Yves Chibon 25e586
        """ Test the update-watch function of pagure-admin with a regular
Pierre-Yves Chibon 25e586
        project - nothing changed.
Pierre-Yves Chibon 25e586
        """
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "test", "user": "pingou"})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_get_watch_status(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 25e586
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "On test user: pingou is watching the following items: "
Pierre-Yves Chibon 73d120
            "issues, pull-requests\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 73d120
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"project": "test", "user": "pingou", "status": "1"}
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_update_watch_status(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 25e586
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "Updating watch status of pingou to 1 (watch issues and PRs) "
Pierre-Yves Chibon 73d120
            "on test\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "test", "user": "pingou"})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_get_watch_status(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 25e586
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "On test user: pingou is watching the following items: "
Pierre-Yves Chibon 73d120
            "issues, pull-requests\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 25e586
Pierre-Yves Chibon 3a016c
class PagureAdminReadOnlyTests(tests.Modeltests):
Pierre-Yves Chibon 3a016c
    """ Tests for pagure-admin read-only """
Pierre-Yves Chibon 3a016c
Aurélien Bompard e78d79
    populate_db = False
Aurélien Bompard e78d79
Pierre-Yves Chibon 3a016c
    def setUp(self):
Pierre-Yves Chibon 3a016c
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon 3a016c
        super(PagureAdminReadOnlyTests, self).setUp()
Aurélien Bompard e78d79
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
        # Create the user pingou
Pierre-Yves Chibon 3a016c
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="pingou",
Pierre-Yves Chibon 73d120
            fullname="PY C",
Pierre-Yves Chibon 73d120
            password="foo",
Pierre-Yves Chibon 73d120
            default_email="bar@pingou.com",
Pierre-Yves Chibon 3a016c
        )
Pierre-Yves Chibon 3a016c
        self.session.add(item)
Pierre-Yves Chibon 73d120
        item = pagure.lib.model.UserEmail(user_id=1, email="bar@pingou.com")
Pierre-Yves Chibon 3a016c
        self.session.add(item)
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
        # Create two projects for the user pingou
Pierre-Yves Chibon 3a016c
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 3a016c
            user_id=1,  # pingou
Pierre-Yves Chibon 73d120
            name="test",
Pierre-Yves Chibon 73d120
            description="namespaced test project",
Pierre-Yves Chibon 73d120
            hook_token="aaabbbeee",
Pierre-Yves Chibon 73d120
            namespace="somenamespace",
Pierre-Yves Chibon 3a016c
        )
Pierre-Yves Chibon 3a016c
        self.session.add(item)
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 3a016c
            user_id=1,  # pingou
Pierre-Yves Chibon 73d120
            name="test",
Pierre-Yves Chibon 73d120
            description="Test project",
Pierre-Yves Chibon 73d120
            hook_token="aaabbbccc",
Pierre-Yves Chibon 3a016c
            namespace=None,
Pierre-Yves Chibon 3a016c
        )
Pierre-Yves Chibon 3a016c
        self.session.add(item)
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
        self.session.commit()
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
        # Make the imported pagure use the correct db session
Pierre-Yves Chibon b130e5
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
    def test_read_only_unknown_project(self):
Pierre-Yves Chibon 3a016c
        """ Test the read-only function of pagure-admin on an unknown
Pierre-Yves Chibon 3a016c
        project.
Pierre-Yves Chibon 3a016c
        """
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "foob", "user": None, "ro": None})
Aurélien Bompard a29742
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Aurélien Bompard a29742
            pagure.cli.admin.do_read_only(args)
Pierre-Yves Chibon 73d120
        self.assertEqual(cm.exception.args[0], "No project found with: foob")
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
    def test_read_only_invalid_project(self):
Pierre-Yves Chibon 3a016c
        """ Test the read-only function of pagure-admin on an invalid
Pierre-Yves Chibon 3a016c
        project.
Pierre-Yves Chibon 3a016c
        """
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "fo/o/b", "user": None, "ro": None})
Aurélien Bompard a29742
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Aurélien Bompard a29742
            pagure.cli.admin.do_read_only(args)
Pierre-Yves Chibon 3a016c
        self.assertEqual(
Pierre-Yves Chibon ffbe63
            cm.exception.args[0],
Pierre-Yves Chibon 73d120
            'Invalid project name, has more than one "/": fo/o/b',
Aurélien Bompard a29742
        )
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
    def test_read_only(self):
Pierre-Yves Chibon 3a016c
        """ Test the read-only function of pagure-admin to get status of
Pierre-Yves Chibon 3a016c
        a non-namespaced project.
Pierre-Yves Chibon 3a016c
        """
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "test", "user": None, "ro": None})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_read_only(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 3a016c
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "The current read-only flag of the project test is set to True\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
    def test_read_only_namespace(self):
Pierre-Yves Chibon 3a016c
        """ Test the read-only function of pagure-admin to get status of
Pierre-Yves Chibon 3a016c
        a namespaced project.
Pierre-Yves Chibon 3a016c
        """
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"project": "somenamespace/test", "user": None, "ro": None}
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_read_only(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 3a016c
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "The current read-only flag of the project somenamespace/test "
Pierre-Yves Chibon 73d120
            "is set to True\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
    def test_read_only_namespace_changed(self):
Pierre-Yves Chibon 3a016c
        """ Test the read-only function of pagure-admin to set the status of
Pierre-Yves Chibon 3a016c
        a namespaced project.
Pierre-Yves Chibon 3a016c
        """
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
        # Before
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"project": "somenamespace/test", "user": None, "ro": None}
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_read_only(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 3a016c
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "The current read-only flag of the project somenamespace/test "
Pierre-Yves Chibon 73d120
            "is set to True\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 73d120
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"project": "somenamespace/test", "user": None, "ro": "false"}
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_read_only(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 3a016c
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "The read-only flag of the project somenamespace/test has been "
Pierre-Yves Chibon 73d120
            "set to False\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
        # After
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {"project": "somenamespace/test", "user": None, "ro": None}
Pierre-Yves Chibon 73d120
        )
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_read_only(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 3a016c
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "The current read-only flag of the project somenamespace/test "
Pierre-Yves Chibon 73d120
            "is set to False\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
    def test_read_only_no_change(self):
Pierre-Yves Chibon 3a016c
        """ Test the read-only function of pagure-admin to set the status of
Pierre-Yves Chibon 3a016c
        a namespaced project.
Pierre-Yves Chibon 3a016c
        """
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
        # Before
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "test", "user": None, "ro": None})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_read_only(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 3a016c
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "The current read-only flag of the project test "
Pierre-Yves Chibon 73d120
            "is set to True\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 73d120
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "test", "user": None, "ro": "true"})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_read_only(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 3a016c
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "The read-only flag of the project test has been " "set to True\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
        # After
Pierre-Yves Chibon 73d120
        args = munch.Munch({"project": "test", "user": None, "ro": None})
Aurélien Bompard a29742
        with tests.capture_output() as output:
Aurélien Bompard a29742
            pagure.cli.admin.do_read_only(args)
Aurélien Bompard a29742
        output = output.getvalue()
Pierre-Yves Chibon 3a016c
        self.assertEqual(
Pierre-Yves Chibon 73d120
            "The current read-only flag of the project test "
Pierre-Yves Chibon 73d120
            "is set to True\n",
Pierre-Yves Chibon 73d120
            output,
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon 3a016c
Pierre-Yves Chibon ffbe63
class PagureNewGroupTests(tests.Modeltests):
Pierre-Yves Chibon ffbe63
    """ Tests for pagure-admin new-group """
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
    populate_db = False
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
    def setUp(self):
Pierre-Yves Chibon ffbe63
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon ffbe63
        super(PagureNewGroupTests, self).setUp()
Pierre-Yves Chibon ffbe63
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
        # Create the user pingou
Pierre-Yves Chibon ffbe63
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="pingou",
Pierre-Yves Chibon 73d120
            fullname="PY C",
Pierre-Yves Chibon 73d120
            password="foo",
Pierre-Yves Chibon 73d120
            default_email="bar@pingou.com",
Pierre-Yves Chibon ffbe63
        )
Pierre-Yves Chibon ffbe63
        self.session.add(item)
Pierre-Yves Chibon 73d120
        item = pagure.lib.model.UserEmail(user_id=1, email="bar@pingou.com")
Pierre-Yves Chibon ffbe63
        self.session.add(item)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
        self.session.commit()
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
        # Make the imported pagure use the correct db session
Pierre-Yves Chibon ffbe63
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Pierre-Yves Chibon ffbe63
        self.assertEqual(len(groups), 0)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
    def test_missing_display_name(self):
Pierre-Yves Chibon ffbe63
        """ Test the new-group function of pagure-admin when the display name
Pierre-Yves Chibon ffbe63
        is missing from the args.
Pierre-Yves Chibon ffbe63
        """
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "group_name": "foob",
Pierre-Yves Chibon 73d120
                "display": None,
Pierre-Yves Chibon 73d120
                "description": None,
Pierre-Yves Chibon 73d120
                "username": "pingou",
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ffbe63
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon ffbe63
            pagure.cli.admin.do_new_group(args)
Pierre-Yves Chibon ffbe63
        self.assertEqual(
Pierre-Yves Chibon ffbe63
            cm.exception.args[0],
Pierre-Yves Chibon 73d120
            "A display name must be provided for the group",
Pierre-Yves Chibon ffbe63
        )
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Pierre-Yves Chibon ffbe63
        self.assertEqual(len(groups), 0)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
    def test_missing_username(self):
Pierre-Yves Chibon ffbe63
        """ Test the new-group function of pagure-admin when the username
Pierre-Yves Chibon ffbe63
        is missing from the args.
Pierre-Yves Chibon ffbe63
        """
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "group_name": "foob",
Pierre-Yves Chibon 73d120
                "display": "foo group",
Pierre-Yves Chibon 73d120
                "description": None,
Pierre-Yves Chibon 73d120
                "username": None,
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon ffbe63
            pagure.cli.admin.do_new_group(args)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
        self.assertEqual(
Pierre-Yves Chibon ffbe63
            cm.exception.args[0],
Pierre-Yves Chibon 73d120
            "An username must be provided to associate with the group",
Pierre-Yves Chibon ffbe63
        )
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Pierre-Yves Chibon ffbe63
        self.assertEqual(len(groups), 0)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
    def test_new_group(self):
Pierre-Yves Chibon ffbe63
        """ Test the new-group function of pagure-admin when all arguments
Pierre-Yves Chibon ffbe63
        are provided.
Pierre-Yves Chibon ffbe63
        """
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "group_name": "foob",
Pierre-Yves Chibon 73d120
                "display": "foo group",
Pierre-Yves Chibon 73d120
                "description": None,
Pierre-Yves Chibon 73d120
                "username": "pingou",
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
        pagure.cli.admin.do_new_group(args)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Pierre-Yves Chibon ffbe63
        self.assertEqual(len(groups), 1)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"ENABLE_GROUP_MNGT": False})
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon ffbe63
    def test_new_group_grp_mngt_off_no(self, conf):
Pierre-Yves Chibon ffbe63
        """ Test the new-group function of pagure-admin when all arguments
Pierre-Yves Chibon ffbe63
        are provided and ENABLE_GROUP_MNGT if off in the config and the user
Pierre-Yves Chibon ffbe63
        replies no to the question.
Pierre-Yves Chibon ffbe63
        """
Pierre-Yves Chibon ffbe63
        conf.return_value = False
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "group_name": "foob",
Pierre-Yves Chibon 73d120
                "display": "foo group",
Pierre-Yves Chibon 73d120
                "description": None,
Pierre-Yves Chibon 73d120
                "username": "pingou",
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
        pagure.cli.admin.do_new_group(args)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Pierre-Yves Chibon ffbe63
        self.assertEqual(len(groups), 0)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"ENABLE_GROUP_MNGT": False})
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation")
Pierre-Yves Chibon ffbe63
    def test_new_group_grp_mngt_off_yes(self, conf):
Pierre-Yves Chibon ffbe63
        """ Test the new-group function of pagure-admin when all arguments
Pierre-Yves Chibon ffbe63
        are provided and ENABLE_GROUP_MNGT if off in the config and the user
Pierre-Yves Chibon ffbe63
        replies yes to the question.
Pierre-Yves Chibon ffbe63
        """
Pierre-Yves Chibon ffbe63
        conf.return_value = True
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "group_name": "foob",
Pierre-Yves Chibon 73d120
                "display": "foo group",
Pierre-Yves Chibon 73d120
                "description": None,
Pierre-Yves Chibon 73d120
                "username": "pingou",
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
        pagure.cli.admin.do_new_group(args)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Pierre-Yves Chibon ffbe63
        self.assertEqual(len(groups), 1)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 73d120
    @patch.dict("pagure.config.config", {"BLACKLISTED_GROUPS": ["foob"]})
Pierre-Yves Chibon ffbe63
    def test_new_group_grp_mngt_off_yes(self):
Pierre-Yves Chibon ffbe63
        """ Test the new-group function of pagure-admin when all arguments
Pierre-Yves Chibon ffbe63
        are provided but the group is black listed.
Pierre-Yves Chibon ffbe63
        """
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 73d120
        args = munch.Munch(
Pierre-Yves Chibon 73d120
            {
Pierre-Yves Chibon 73d120
                "group_name": "foob",
Pierre-Yves Chibon 73d120
                "display": "foo group",
Pierre-Yves Chibon 73d120
                "description": None,
Pierre-Yves Chibon 73d120
                "username": "pingou",
Pierre-Yves Chibon 73d120
            }
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon ffbe63
            pagure.cli.admin.do_new_group(args)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon ffbe63
        self.assertEqual(
Pierre-Yves Chibon ffbe63
            cm.exception.args[0],
Pierre-Yves Chibon 73d120
            "This group name has been blacklisted, please choose another one",
Pierre-Yves Chibon ffbe63
        )
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Pierre-Yves Chibon ffbe63
        self.assertEqual(len(groups), 0)
Pierre-Yves Chibon ffbe63
Pierre-Yves Chibon bee78a
Fabian Arrotin 0096c9
class PagureListGroupEmptyTests(tests.Modeltests):
Fabian Arrotin 0096c9
    """ Tests for pagure-admin list-groups """
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
    populate_db = False
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
    def setUp(self):
Fabian Arrotin 0096c9
        """ Set up the environnment, ran before every tests. """
Fabian Arrotin 0096c9
        super(PagureListGroupEmptyTests, self).setUp()
Fabian Arrotin 0096c9
        pagure.cli.admin.session = self.session
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        # Create the user pingou
Fabian Arrotin 0096c9
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="pingou",
Pierre-Yves Chibon 73d120
            fullname="PY C",
Pierre-Yves Chibon 73d120
            password="foo",
Pierre-Yves Chibon 73d120
            default_email="bar@pingou.com",
Fabian Arrotin 0096c9
        )
Fabian Arrotin 0096c9
        self.session.add(item)
Pierre-Yves Chibon 73d120
        item = pagure.lib.model.UserEmail(user_id=1, email="bar@pingou.com")
Fabian Arrotin 0096c9
        self.session.add(item)
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        self.session.commit()
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        # Make the imported pagure use the correct db session
Fabian Arrotin 0096c9
        pagure.cli.admin.session = self.session
Fabian Arrotin 0096c9
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Fabian Arrotin 0096c9
        self.assertEqual(len(groups), 0)
Fabian Arrotin 0096c9
Pierre-Yves Chibon 73d120
    @patch("sys.stdout", new_callable=StringIO)
Fabian Arrotin 0096c9
    def test_no_groups(self, mock_stdout):
Fabian Arrotin 0096c9
        """ Test the list-groups function of pagure-admin when there are no
Fabian Arrotin 0096c9
        groups in the database
Fabian Arrotin 0096c9
        """
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        args = munch.Munch()
Fabian Arrotin 0096c9
        pagure.cli.admin.do_list_groups(args)
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        self.assertEqual(
Fabian Arrotin 0096c9
            mock_stdout.getvalue(),
Pierre-Yves Chibon 73d120
            "No groups found in this pagure instance.\n",
Fabian Arrotin 0096c9
        )
Fabian Arrotin 0096c9
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Fabian Arrotin 0096c9
        self.assertEqual(len(groups), 0)
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
class PagureListGroupTests(tests.Modeltests):
Fabian Arrotin 0096c9
    """ Tests for pagure-admin list-groups """
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
    populate_db = False
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
    def setUp(self):
Fabian Arrotin 0096c9
        """ Set up the environnment, ran before every tests. """
Fabian Arrotin 0096c9
        super(PagureListGroupTests, self).setUp()
Fabian Arrotin 0096c9
        pagure.cli.admin.session = self.session
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        # Create the user pingou
Fabian Arrotin 0096c9
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="pingou",
Pierre-Yves Chibon 73d120
            fullname="PY C",
Pierre-Yves Chibon 73d120
            password="foo",
Pierre-Yves Chibon 73d120
            default_email="bar@pingou.com",
Fabian Arrotin 0096c9
        )
Fabian Arrotin 0096c9
        self.session.add(item)
Pierre-Yves Chibon 73d120
        item = pagure.lib.model.UserEmail(user_id=1, email="bar@pingou.com")
Fabian Arrotin 0096c9
        self.session.add(item)
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        # Create a group
Pierre-Yves Chibon 930073
        pagure.lib.query.add_group(
Fabian Arrotin 0096c9
            self.session,
Pierre-Yves Chibon 73d120
            group_name="JL",
Pierre-Yves Chibon 73d120
            display_name="Justice League",
Pierre-Yves Chibon 73d120
            description="Nope, it's not JLA anymore",
Pierre-Yves Chibon 73d120
            group_type="user",
Pierre-Yves Chibon 73d120
            user="pingou",
Fabian Arrotin 0096c9
            is_admin=False,
Pierre-Yves Chibon 73d120
            blacklist=[],
Fabian Arrotin 0096c9
        )
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        self.session.commit()
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        # Make the imported pagure use the correct db session
Fabian Arrotin 0096c9
        pagure.cli.admin.session = self.session
Fabian Arrotin 0096c9
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Fabian Arrotin 0096c9
        self.assertEqual(len(groups), 1)
Fabian Arrotin 0096c9
Pierre-Yves Chibon 73d120
    @patch("sys.stdout", new_callable=StringIO)
Fabian Arrotin 0096c9
    def test_list_groups(self, mock_stdout):
Fabian Arrotin 0096c9
        """ Test the list-groups function of pagure-admin when there is one
Fabian Arrotin 0096c9
        group in the database
Fabian Arrotin 0096c9
        """
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        args = munch.Munch()
Fabian Arrotin 0096c9
        pagure.cli.admin.do_list_groups(args)
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
        self.assertEqual(
Fabian Arrotin 0096c9
            mock_stdout.getvalue(),
Pierre-Yves Chibon 73d120
            "List of groups on this Pagure instance:\n" "Group: 1 - name JL\n",
Fabian Arrotin 0096c9
        )
Fabian Arrotin 0096c9
Pierre-Yves Chibon 930073
        groups = pagure.lib.query.search_groups(self.session)
Fabian Arrotin 0096c9
        self.assertEqual(len(groups), 1)
Fabian Arrotin 0096c9
Fabian Arrotin 0096c9
Pierre-Yves Chibon bee78a
class PagureBlockUserTests(tests.Modeltests):
Pierre-Yves Chibon bee78a
    """ Tests for pagure-admin block-user """
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
    populate_db = False
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
    def setUp(self):
Pierre-Yves Chibon bee78a
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon bee78a
        super(PagureBlockUserTests, self).setUp()
Pierre-Yves Chibon bee78a
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
        # Create the user pingou
Pierre-Yves Chibon bee78a
        item = pagure.lib.model.User(
Pierre-Yves Chibon 73d120
            user="pingou",
Pierre-Yves Chibon 73d120
            fullname="PY C",
Pierre-Yves Chibon 73d120
            password="foo",
Pierre-Yves Chibon 73d120
            default_email="bar@pingou.com",
Pierre-Yves Chibon bee78a
        )
Pierre-Yves Chibon bee78a
        self.session.add(item)
Pierre-Yves Chibon 73d120
        item = pagure.lib.model.UserEmail(user_id=1, email="bar@pingou.com")
Pierre-Yves Chibon bee78a
        self.session.add(item)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
        self.session.commit()
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
        # Make the imported pagure use the correct db session
Pierre-Yves Chibon bee78a
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 73d120
        user = pagure.lib.query.get_user(self.session, "pingou")
Pierre-Yves Chibon bee78a
        self.assertIsNone(user.refuse_sessions_before)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
    def test_missing_date(self):
Pierre-Yves Chibon bee78a
        """ Test the block-user function of pagure-admin when the no date is
Pierre-Yves Chibon bee78a
        provided.
Pierre-Yves Chibon bee78a
        """
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 6e0576
        args = munch.Munch({"username": "pingou", "date": None, "list": False})
Pierre-Yves Chibon bee78a
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon bee78a
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon bee78a
        self.assertEqual(
Pierre-Yves Chibon bee78a
            cm.exception.args[0],
Pierre-Yves Chibon 73d120
            "Invalid date submitted: None, not of the format YYYY-MM-DD",
Pierre-Yves Chibon bee78a
        )
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 73d120
        user = pagure.lib.query.get_user(self.session, "pingou")
Pierre-Yves Chibon bee78a
        self.assertIsNone(user.refuse_sessions_before)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
    def test_missing_username(self):
Pierre-Yves Chibon bee78a
        """ Test the block-user function of pagure-admin when the username
Pierre-Yves Chibon bee78a
        is missing from the args.
Pierre-Yves Chibon bee78a
        """
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 6e0576
        args = munch.Munch(
Pierre-Yves Chibon 6e0576
            {"date": "2018-06-11", "username": None, "list": False}
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon bee78a
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 73d120
        self.assertEqual(cm.exception.args[0], "An username must be specified")
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 73d120
        user = pagure.lib.query.get_user(self.session, "pingou")
Pierre-Yves Chibon bee78a
        self.assertIsNone(user.refuse_sessions_before)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
    def test_invalid_username(self):
Pierre-Yves Chibon bee78a
        """ Test the block-user function of pagure-admin when the username
Pierre-Yves Chibon bee78a
        provided does correspond to any user in the DB.
Pierre-Yves Chibon bee78a
        """
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 6e0576
        args = munch.Munch(
Pierre-Yves Chibon 6e0576
            {"date": "2018-06-11", "username": "invalid", "list": False}
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon bee78a
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 73d120
        self.assertEqual(cm.exception.args[0], 'No user "invalid" found')
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 73d120
        user = pagure.lib.query.get_user(self.session, "pingou")
Pierre-Yves Chibon bee78a
        self.assertIsNone(user.refuse_sessions_before)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
    def test_invalide_date(self):
Pierre-Yves Chibon bee78a
        """ Test the block-user function of pagure-admin when the provided
Pierre-Yves Chibon bee78a
        date is incorrect.
Pierre-Yves Chibon bee78a
        """
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 6e0576
        args = munch.Munch(
Pierre-Yves Chibon 6e0576
            {"date": "2018-14-05", "username": "pingou", "list": False}
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon bee78a
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
        self.assertEqual(
Pierre-Yves Chibon bee78a
            cm.exception.args[0],
Pierre-Yves Chibon 73d120
            "Invalid date submitted: 2018-14-05, not of the format YYYY-MM-DD",
Pierre-Yves Chibon bee78a
        )
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 73d120
        user = pagure.lib.query.get_user(self.session, "pingou")
Pierre-Yves Chibon bee78a
        self.assertIsNone(user.refuse_sessions_before)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 73d120
    @patch("pagure.cli.admin._ask_confirmation", MagicMock(return_value=True))
Pierre-Yves Chibon bee78a
    def test_block_user(self):
Pierre-Yves Chibon bee78a
        """ Test the block-user function of pagure-admin when all arguments
Pierre-Yves Chibon bee78a
        are provided correctly.
Pierre-Yves Chibon bee78a
        """
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 6e0576
        args = munch.Munch(
Pierre-Yves Chibon 6e0576
            {"date": "2050-12-31", "username": "pingou", "list": False}
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon bee78a
        pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 73d120
        user = pagure.lib.query.get_user(self.session, "pingou")
Pierre-Yves Chibon 4c9301
        self.assertIsNotNone(user.refuse_sessions_before)
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 6e0576
    def test_list_blocked_user(self):
Pierre-Yves Chibon 6e0576
        """ Test the block-user function of pagure-admin when all arguments
Pierre-Yves Chibon 6e0576
        are provided correctly.
Pierre-Yves Chibon 6e0576
        """
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        args = munch.Munch({"list": True, "username": None, "date": None})
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        with tests.capture_output() as output:
Pierre-Yves Chibon 6e0576
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        output = output.getvalue()
Pierre-Yves Chibon 6e0576
        self.assertEqual("No users are currently blocked\n", output)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
    @patch("pagure.cli.admin._ask_confirmation", MagicMock(return_value=True))
Pierre-Yves Chibon 6e0576
    def test_list_blocked_user_with_data(self):
Pierre-Yves Chibon 6e0576
        """ Test the block-user function of pagure-admin when all arguments
Pierre-Yves Chibon 6e0576
        are provided correctly.
Pierre-Yves Chibon 6e0576
        """
Pierre-Yves Chibon 6e0576
        args = munch.Munch(
Pierre-Yves Chibon 6e0576
            {"date": "2050-12-31", "username": "pingou", "list": False}
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon 6e0576
        pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        args = munch.Munch({"list": True, "username": None, "date": None})
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        with tests.capture_output() as output:
Pierre-Yves Chibon 6e0576
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        output = output.getvalue()
Pierre-Yves Chibon 6e0576
        self.assertEqual(
Pierre-Yves Chibon 6e0576
            "Users blocked:\n"
Pierre-Yves Chibon 6e0576
            " pingou                -  2050-12-31T00:00:00\n",
Pierre-Yves Chibon 6e0576
            output,
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
    @patch("pagure.cli.admin._ask_confirmation", MagicMock(return_value=True))
Pierre-Yves Chibon 6e0576
    def test_list_blocked_user_with_username_data(self):
Pierre-Yves Chibon 6e0576
        """ Test the block-user function of pagure-admin when all arguments
Pierre-Yves Chibon 6e0576
        are provided correctly.
Pierre-Yves Chibon 6e0576
        """
Pierre-Yves Chibon 6e0576
        args = munch.Munch(
Pierre-Yves Chibon 6e0576
            {"date": "2050-12-31", "username": "pingou", "list": False}
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon 6e0576
        pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        args = munch.Munch({"list": True, "username": "ralph", "date": None})
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        with tests.capture_output() as output:
Pierre-Yves Chibon 6e0576
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        output = output.getvalue()
Pierre-Yves Chibon 6e0576
        self.assertEqual("No users are currently blocked\n", output)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        args = munch.Munch({"list": True, "username": "pin*", "date": None})
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        with tests.capture_output() as output:
Pierre-Yves Chibon 6e0576
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon 6e0576
        output = output.getvalue()
Pierre-Yves Chibon 6e0576
        self.assertEqual(
Pierre-Yves Chibon 6e0576
            "Users blocked:\n"
Pierre-Yves Chibon 6e0576
            " pingou                -  2050-12-31T00:00:00\n",
Pierre-Yves Chibon 6e0576
            output,
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
    @patch("pagure.cli.admin._ask_confirmation", MagicMock(return_value=True))
Pierre-Yves Chibon 6e0576
    def test_list_blocked_user_with_date(self):
Pierre-Yves Chibon 6e0576
        """ Test the block-user function of pagure-admin when all arguments
Pierre-Yves Chibon 6e0576
        are provided correctly.
Pierre-Yves Chibon 6e0576
        """
Pierre-Yves Chibon 6e0576
        args = munch.Munch(
Pierre-Yves Chibon 6e0576
            {"list": True, "username": None, "date": "2050-12-31"}
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        with tests.capture_output() as output:
Pierre-Yves Chibon 6e0576
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        output = output.getvalue()
Pierre-Yves Chibon 6e0576
        self.assertEqual("No users are currently blocked\n", output)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
    @patch("pagure.cli.admin._ask_confirmation", MagicMock(return_value=True))
Pierre-Yves Chibon 6e0576
    def test_list_blocked_user_with_date_and_data(self):
Pierre-Yves Chibon 6e0576
        """ Test the block-user function of pagure-admin when all arguments
Pierre-Yves Chibon 6e0576
        are provided correctly.
Pierre-Yves Chibon 6e0576
        """
Pierre-Yves Chibon 6e0576
        args = munch.Munch(
Pierre-Yves Chibon 6e0576
            {"date": "2050-12-31", "username": "pingou", "list": False}
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon 6e0576
        pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        args = munch.Munch(
Pierre-Yves Chibon 6e0576
            {"list": True, "username": None, "date": "2050-12-31"}
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        with tests.capture_output() as output:
Pierre-Yves Chibon 6e0576
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        output = output.getvalue()
Pierre-Yves Chibon 6e0576
        self.assertEqual(
Pierre-Yves Chibon 6e0576
            "Users blocked:\n"
Pierre-Yves Chibon 6e0576
            " pingou                -  2050-12-31T00:00:00\n",
Pierre-Yves Chibon 6e0576
            output,
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        args = munch.Munch(
Pierre-Yves Chibon 6e0576
            {"list": True, "username": None, "date": "2051-01-01"}
Pierre-Yves Chibon 6e0576
        )
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        with tests.capture_output() as output:
Pierre-Yves Chibon 6e0576
            pagure.cli.admin.do_block_user(args)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon 6e0576
        output = output.getvalue()
Pierre-Yves Chibon 6e0576
        self.assertEqual("No users are currently blocked\n", output)
Pierre-Yves Chibon 6e0576
Pierre-Yves Chibon bee78a
Pierre-Yves Chibon 74b8f8
class PagureAdminDeleteProjectTests(tests.Modeltests):
Pierre-Yves Chibon 74b8f8
    """ Tests for pagure-admin delete-project """
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
    populate_db = False
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
    def setUp(self):
Pierre-Yves Chibon 74b8f8
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon 74b8f8
        super(PagureAdminDeleteProjectTests, self).setUp()
Pierre-Yves Chibon 74b8f8
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        # Create the user pingou
Pierre-Yves Chibon 74b8f8
        item = pagure.lib.model.User(
Pierre-Yves Chibon 74b8f8
            user="pingou",
Pierre-Yves Chibon 74b8f8
            fullname="PY C",
Pierre-Yves Chibon 74b8f8
            password="foo",
Pierre-Yves Chibon 74b8f8
            default_email="bar@pingou.com",
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
        self.session.add(item)
Pierre-Yves Chibon 74b8f8
        item = pagure.lib.model.UserEmail(user_id=1, email="bar@pingou.com")
Pierre-Yves Chibon 74b8f8
        self.session.add(item)
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        # Create two projects for the user pingou
Pierre-Yves Chibon 74b8f8
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 74b8f8
            user_id=1,  # pingou
Pierre-Yves Chibon 74b8f8
            name="test",
Pierre-Yves Chibon 74b8f8
            description="namespaced test project",
Pierre-Yves Chibon 74b8f8
            hook_token="aaabbbeee",
Pierre-Yves Chibon 74b8f8
            namespace="somenamespace",
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
        self.session.add(item)
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        item = pagure.lib.model.Project(
Pierre-Yves Chibon 74b8f8
            user_id=1,  # pingou
Pierre-Yves Chibon 74b8f8
            name="test",
Pierre-Yves Chibon 74b8f8
            description="Test project",
Pierre-Yves Chibon 74b8f8
            hook_token="aaabbbccc",
Pierre-Yves Chibon 74b8f8
            namespace=None,
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
        self.session.add(item)
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        self.session.commit()
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        # Make the imported pagure use the correct db session
Pierre-Yves Chibon 74b8f8
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
    def test_delete_project_unknown_project(self):
Pierre-Yves Chibon 74b8f8
        """ Test the read-only function of pagure-admin on an unknown
Pierre-Yves Chibon 74b8f8
        project.
Pierre-Yves Chibon 74b8f8
        """
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        args = munch.Munch(
Pierre-Yves Chibon 74b8f8
            {"project": "foob", "user": None, "action_user": "pingou"}
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon 74b8f8
            pagure.cli.admin.do_delete_project(args)
Pierre-Yves Chibon 74b8f8
        self.assertEqual(cm.exception.args[0], "No project found with: foob")
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
    def test_delete_project_invalid_project(self):
Pierre-Yves Chibon 74b8f8
        """ Test the read-only function of pagure-admin on an invalid
Pierre-Yves Chibon 74b8f8
        project.
Pierre-Yves Chibon 74b8f8
        """
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        args = munch.Munch(
Pierre-Yves Chibon 74b8f8
            {"project": "fo/o/b", "user": None, "action_user": "pingou"}
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon 74b8f8
            pagure.cli.admin.do_delete_project(args)
Pierre-Yves Chibon 74b8f8
        self.assertEqual(
Pierre-Yves Chibon 74b8f8
            cm.exception.args[0],
Pierre-Yves Chibon 74b8f8
            'Invalid project name, has more than one "/": fo/o/b',
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
    @patch("pagure.cli.admin._ask_confirmation", MagicMock(return_value=True))
Pierre-Yves Chibon 74b8f8
    def test_delete_project(self):
Pierre-Yves Chibon 74b8f8
        """ Test the read-only function of pagure-admin to get status of
Pierre-Yves Chibon 74b8f8
        a non-namespaced project.
Pierre-Yves Chibon 74b8f8
        """
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        args = munch.Munch(
Pierre-Yves Chibon 74b8f8
            {"project": "test", "user": None, "action_user": "pingou"}
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
        with tests.capture_output() as output:
Pierre-Yves Chibon 74b8f8
            pagure.cli.admin.do_delete_project(args)
Pierre-Yves Chibon 74b8f8
        output = output.getvalue()
Pierre-Yves Chibon 74b8f8
        self.assertEqual(
Pierre-Yves Chibon 74b8f8
            "Are you sure you want to delete: test?\n"
Pierre-Yves Chibon 74b8f8
            "  This cannot be undone!\n"
Pierre-Yves Chibon 74b8f8
            "Project deleted\n",
Pierre-Yves Chibon 74b8f8
            output,
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
    @patch("pagure.cli.admin._ask_confirmation", MagicMock(return_value=True))
Pierre-Yves Chibon 74b8f8
    def test_delete_project_namespace(self):
Pierre-Yves Chibon 74b8f8
        """ Test the read-only function of pagure-admin to get status of
Pierre-Yves Chibon 74b8f8
        a namespaced project.
Pierre-Yves Chibon 74b8f8
        """
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        args = munch.Munch(
Pierre-Yves Chibon 74b8f8
            {
Pierre-Yves Chibon 74b8f8
                "project": "somenamespace/test",
Pierre-Yves Chibon 74b8f8
                "user": None,
Pierre-Yves Chibon 74b8f8
                "action_user": "pingou",
Pierre-Yves Chibon 74b8f8
            }
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
        with tests.capture_output() as output:
Pierre-Yves Chibon 74b8f8
            pagure.cli.admin.do_delete_project(args)
Pierre-Yves Chibon 74b8f8
        output = output.getvalue()
Pierre-Yves Chibon 74b8f8
        self.assertEqual(
Pierre-Yves Chibon 74b8f8
            "Are you sure you want to delete: somenamespace/test?\n"
Pierre-Yves Chibon 74b8f8
            "  This cannot be undone!\n"
Pierre-Yves Chibon 74b8f8
            "Project deleted\n",
Pierre-Yves Chibon 74b8f8
            output,
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
    @patch("pagure.cli.admin._ask_confirmation", MagicMock(return_value=True))
Pierre-Yves Chibon 74b8f8
    def test_delete_project_namespace_changed(self):
Pierre-Yves Chibon 74b8f8
        """ Test the read-only function of pagure-admin to set the status of
Pierre-Yves Chibon 74b8f8
        a namespaced project.
Pierre-Yves Chibon 74b8f8
        """
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        # Before
Pierre-Yves Chibon 74b8f8
        projects = pagure.lib.query.search_projects(self.session)
Pierre-Yves Chibon 74b8f8
        self.assertEqual(len(projects), 2)
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        args = munch.Munch(
Pierre-Yves Chibon 74b8f8
            {
Pierre-Yves Chibon 74b8f8
                "project": "somenamespace/test",
Pierre-Yves Chibon 74b8f8
                "user": None,
Pierre-Yves Chibon 74b8f8
                "action_user": "pingou",
Pierre-Yves Chibon 74b8f8
            }
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
        with tests.capture_output() as output:
Pierre-Yves Chibon 74b8f8
            pagure.cli.admin.do_delete_project(args)
Pierre-Yves Chibon 74b8f8
        output = output.getvalue()
Pierre-Yves Chibon 74b8f8
        self.assertEqual(
Pierre-Yves Chibon 74b8f8
            "Are you sure you want to delete: somenamespace/test?\n"
Pierre-Yves Chibon 74b8f8
            "  This cannot be undone!\n"
Pierre-Yves Chibon 74b8f8
            "Project deleted\n",
Pierre-Yves Chibon 74b8f8
            output,
Pierre-Yves Chibon 74b8f8
        )
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
        # After
Pierre-Yves Chibon 74b8f8
        projects = pagure.lib.query.search_projects(self.session)
Pierre-Yves Chibon 74b8f8
        self.assertEqual(len(projects), 1)
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon 74b8f8
Pierre-Yves Chibon a10996
class PagureCreateBranchTests(tests.Modeltests):
Pierre-Yves Chibon a10996
    """ Tests for pagure-admin create-branch """
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
    populate_db = True
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
    def setUp(self):
Pierre-Yves Chibon a10996
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon a10996
        super(PagureCreateBranchTests, self).setUp()
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        # Create a couple of projects
Pierre-Yves Chibon a10996
        tests.create_projects(self.session)
Pierre-Yves Chibon a10996
        # Create their git repo
Pierre-Yves Chibon a10996
        tests.create_projects_git(os.path.join(self.path, "repos"), bare=True)
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        # Make the imported pagure use the correct db session
Pierre-Yves Chibon a10996
        pagure.cli.admin.session = self.session
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
    def test_create_branch_unknown_project(self):
Pierre-Yves Chibon a10996
        """ Test the read-only function of pagure-admin on an unknown
Pierre-Yves Chibon a10996
        project.
Pierre-Yves Chibon a10996
        """
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        args = munch.Munch(
Pierre-Yves Chibon a10996
            {
Pierre-Yves Chibon a10996
                "project": "foob",
Pierre-Yves Chibon a10996
                "user": None,
Pierre-Yves Chibon a10996
                "new_branch": "new_branch",
Pierre-Yves Chibon a10996
                "from_branch": "master",
Pierre-Yves Chibon a10996
                "from_commit": None,
Pierre-Yves Chibon a10996
                "action_user": "pingou",
Pierre-Yves Chibon a10996
            }
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon a10996
            pagure.cli.admin.do_create_branch(args)
Pierre-Yves Chibon a10996
        self.assertEqual(
Pierre-Yves Chibon a10996
            cm.exception.args[0], "No project found with: foob, user: None"
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
    def test_create_branch_invalid_project(self):
Pierre-Yves Chibon a10996
        """ Test the read-only function of pagure-admin on an invalid
Pierre-Yves Chibon a10996
        project.
Pierre-Yves Chibon a10996
        """
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        args = munch.Munch(
Pierre-Yves Chibon a10996
            {
Pierre-Yves Chibon a10996
                "project": "f/o/o/b",
Pierre-Yves Chibon a10996
                "user": None,
Pierre-Yves Chibon a10996
                "new_branch": "new_branch",
Pierre-Yves Chibon a10996
                "from_branch": "master",
Pierre-Yves Chibon a10996
                "from_commit": None,
Pierre-Yves Chibon a10996
                "action_user": "pingou",
Pierre-Yves Chibon a10996
            }
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon a10996
            pagure.cli.admin.do_create_branch(args)
Pierre-Yves Chibon a10996
        self.assertEqual(
Pierre-Yves Chibon a10996
            cm.exception.args[0],
Pierre-Yves Chibon a10996
            'Invalid project name, has more than one "/": f/o/o/b',
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
    def test_create_branch_commit_and_branch_from(self):
Pierre-Yves Chibon a10996
        """ Test the read-only function of pagure-admin to get status of
Pierre-Yves Chibon a10996
        a non-namespaced project.
Pierre-Yves Chibon a10996
        """
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        args = munch.Munch(
Pierre-Yves Chibon a10996
            {
Pierre-Yves Chibon a10996
                "project": "test",
Pierre-Yves Chibon a10996
                "user": None,
Pierre-Yves Chibon a10996
                "new_branch": "new_branch",
Pierre-Yves Chibon a10996
                "from_branch": "master",
Pierre-Yves Chibon a10996
                "from_commit": "foobar",
Pierre-Yves Chibon a10996
                "action_user": "pingou",
Pierre-Yves Chibon a10996
            }
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon a10996
            pagure.cli.admin.do_create_branch(args)
Pierre-Yves Chibon a10996
        self.assertEqual(
Pierre-Yves Chibon a10996
            cm.exception.args[0],
Pierre-Yves Chibon a10996
            "You must create the branch from something, either a commit "
Pierre-Yves Chibon a10996
            "or another branch, not from both",
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
    def test_create_branch_no_branch_from(self):
Pierre-Yves Chibon a10996
        """ Test the read-only function of pagure-admin to get status of
Pierre-Yves Chibon a10996
        a non-namespaced project.
Pierre-Yves Chibon a10996
        """
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        args = munch.Munch(
Pierre-Yves Chibon a10996
            {
Pierre-Yves Chibon a10996
                "project": "test",
Pierre-Yves Chibon a10996
                "user": None,
Pierre-Yves Chibon a10996
                "new_branch": "new_branch",
Pierre-Yves Chibon a10996
                "from_branch": "master",
Pierre-Yves Chibon a10996
                "from_commit": None,
Pierre-Yves Chibon a10996
                "action_user": "pingou",
Pierre-Yves Chibon a10996
            }
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon a10996
            pagure.cli.admin.do_create_branch(args)
Pierre-Yves Chibon a10996
        self.assertEqual(
Pierre-Yves Chibon a10996
            cm.exception.args[0], 'The "master" branch does not exist'
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
    def test_create_branch_no_commit_from(self):
Pierre-Yves Chibon a10996
        """ Test the read-only function of pagure-admin to get status of
Pierre-Yves Chibon a10996
        a non-namespaced project.
Pierre-Yves Chibon a10996
        """
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        args = munch.Munch(
Pierre-Yves Chibon a10996
            {
Pierre-Yves Chibon a10996
                "project": "test",
Pierre-Yves Chibon a10996
                "user": None,
Pierre-Yves Chibon a10996
                "new_branch": "new_branch",
Pierre-Yves Chibon a10996
                "from_branch": None,
Pierre-Yves Chibon a10996
                "from_commit": "foobar",
Pierre-Yves Chibon a10996
                "action_user": "pingou",
Pierre-Yves Chibon a10996
            }
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
        with self.assertRaises(pagure.exceptions.PagureException) as cm:
Pierre-Yves Chibon a10996
            pagure.cli.admin.do_create_branch(args)
Pierre-Yves Chibon a10996
        self.assertEqual(
Pierre-Yves Chibon a10996
            cm.exception.args[0], "No commit foobar found from which to branch"
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
    def test_create_branch_from_branch(self):
Pierre-Yves Chibon a10996
        """ Test the do_create_admin_token function of pagure-admin. """
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        gitrepo_path = os.path.join(self.path, "repos", "test.git")
Pierre-Yves Chibon a10996
        tests.add_content_git_repo(gitrepo_path)
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        # Check branch before:
Pierre-Yves Chibon a10996
        gitrepo = pygit2.Repository(gitrepo_path)
Pierre-Yves Chibon a10996
        self.assertEqual(gitrepo.listall_branches(), ["master"])
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        args = munch.Munch(
Pierre-Yves Chibon a10996
            {
Pierre-Yves Chibon a10996
                "project": "test",
Pierre-Yves Chibon a10996
                "user": None,
Pierre-Yves Chibon a10996
                "new_branch": "new_branch",
Pierre-Yves Chibon a10996
                "from_branch": "master",
Pierre-Yves Chibon a10996
                "from_commit": None,
Pierre-Yves Chibon a10996
                "action_user": "pingou",
Pierre-Yves Chibon a10996
            }
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        with tests.capture_output() as output:
Pierre-Yves Chibon a10996
            pagure.cli.admin.do_create_branch(args)
Pierre-Yves Chibon a10996
        output = output.getvalue()
Pierre-Yves Chibon a10996
        self.assertEqual("Branch created\n", output)
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
        # Check branch after:
Pierre-Yves Chibon a10996
        gitrepo = pygit2.Repository(gitrepo_path)
Pierre-Yves Chibon a10996
        self.assertEqual(
Pierre-Yves Chibon a10996
            sorted(gitrepo.listall_branches()), ["master", "new_branch"]
Pierre-Yves Chibon a10996
        )
Pierre-Yves Chibon a10996
Pierre-Yves Chibon a10996
Pierre-Yves Chibon 73d120
if __name__ == "__main__":
Pierre-Yves Chibon d4c9da
    unittest.main(verbosity=2)