Blame tests/test_commands.py

Packit 6f3914
# -*- coding: utf-8 -*-
Packit 6f3914
Packit 6f3914
# Copyright (C) 2012-2018 Red Hat, Inc.
Packit 6f3914
#
Packit 6f3914
# This copyrighted material is made available to anyone wishing to use,
Packit 6f3914
# modify, copy, or redistribute it subject to the terms and conditions of
Packit 6f3914
# the GNU General Public License v.2, or (at your option) any later version.
Packit 6f3914
# This program is distributed in the hope that it will be useful, but WITHOUT
Packit 6f3914
# ANY WARRANTY expressed or implied, including the implied warranties of
Packit 6f3914
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
Packit 6f3914
# Public License for more details.  You should have received a copy of the
Packit 6f3914
# GNU General Public License along with this program; if not, write to the
Packit 6f3914
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
Packit 6f3914
# 02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
Packit 6f3914
# source code or documentation are not subject to the GNU General Public
Packit 6f3914
# License and may only be used or replicated with the express permission of
Packit 6f3914
# Red Hat, Inc.
Packit 6f3914
#
Packit 6f3914
Packit 6f3914
from __future__ import absolute_import
Packit 6f3914
from __future__ import unicode_literals
Packit 6f3914
Packit 6f3914
import itertools
Packit 6f3914
import logging
Packit 6f3914
import tempfile
Packit 6f3914
Packit 6f3914
import libdnf.transaction
Packit 6f3914
Packit 6f3914
import dnf.cli.commands
Packit 6f3914
import dnf.cli.commands.group
Packit 6f3914
import dnf.cli.commands.install
Packit 6f3914
import dnf.cli.commands.reinstall
Packit 6f3914
import dnf.cli.commands.upgrade
Packit 6f3914
import dnf.pycomp
Packit 6f3914
import dnf.repo
Packit 6f3914
Packit 6f3914
import tests.support
Packit 6f3914
from tests.support import mock
Packit 6f3914
Packit 6f3914
Packit 6f3914
class CommandsCliTest(tests.support.DnfBaseTestCase):
Packit 6f3914
Packit 6f3914
    REPOS = []
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        super(CommandsCliTest, self).setUp()
Packit 6f3914
        self.base.conf.persistdir = tempfile.mkdtemp()
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.commands._', dnf.pycomp.NullTranslations().ugettext)
Packit 6f3914
    def test_history_get_error_output_rollback_transactioncheckerror(self):
Packit 6f3914
        """Test get_error_output with the history rollback and a TransactionCheckError."""
Packit 6f3914
        cmd = dnf.cli.commands.HistoryCommand(self.cli)
Packit 6f3914
        tests.support.command_configure(cmd, ['rollback', '1'])
Packit 6f3914
Packit 6f3914
        lines = cmd.get_error_output(dnf.exceptions.TransactionCheckError())
Packit 6f3914
Packit 6f3914
        self.assertEqual(
Packit 6f3914
            lines,
Packit 6f3914
            ('Cannot rollback transaction 1, doing so would result in an '
Packit 6f3914
             'inconsistent package database.',))
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.commands._', dnf.pycomp.NullTranslations().ugettext)
Packit 6f3914
    def test_history_get_error_output_undo_transactioncheckerror(self):
Packit 6f3914
        """Test get_error_output with the history undo and a TransactionCheckError."""
Packit 6f3914
        cmd = dnf.cli.commands.HistoryCommand(self.cli)
Packit 6f3914
        tests.support.command_configure(cmd, ['undo', '1'])
Packit 6f3914
Packit 6f3914
        lines = cmd.get_error_output(dnf.exceptions.TransactionCheckError())
Packit 6f3914
Packit 6f3914
        self.assertEqual(
Packit 6f3914
            lines,
Packit 6f3914
            ('Cannot undo transaction 1, doing so would result in an '
Packit 6f3914
             'inconsistent package database.',))
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.commands._', dnf.pycomp.NullTranslations().ugettext)
Packit 6f3914
    def test_history_convert_tids(self):
Packit 6f3914
        """Test history _convert_tids()."""
Packit 6f3914
        cmd = dnf.cli.commands.HistoryCommand(self.cli)
Packit 6f3914
        cmd.cli.base.output = mock.MagicMock()
Packit 6f3914
        cmd.cli.base.output.history.last().tid = 123
Packit 6f3914
        cmd.cli.base.output.history.search = mock.MagicMock(return_value=[99])
Packit 6f3914
        tests.support.command_configure(cmd, ['list', '1..5', 'last', 'last-10', 'kernel'])
Packit 6f3914
        self.assertEqual(cmd._args2transaction_ids(), [123, 113, 99, 5, 4, 3, 2, 1])
Packit 6f3914
Packit 6f3914
Packit 6f3914
class CommandTest(tests.support.DnfBaseTestCase):
Packit 6f3914
Packit 6f3914
    REPOS = ["main"]
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
Packit 6f3914
    def test_canonical(self):
Packit 6f3914
        cmd = dnf.cli.commands.upgrade.UpgradeCommand(self.base.mock_cli())
Packit 6f3914
Packit 6f3914
        try:
Packit 6f3914
            tests.support.command_run(cmd, ['cracker', 'filling'])
Packit 6f3914
        except dnf.exceptions.Error as e:
Packit 6f3914
            if e.value != 'No packages marked for upgrade.':
Packit 6f3914
                raise
Packit 6f3914
        self.assertEqual(cmd._basecmd, 'upgrade')
Packit 6f3914
        self.assertEqual(cmd.opts.pkg_specs, ['cracker', 'filling'])
Packit 6f3914
Packit 6f3914
Packit 6f3914
class InstallCommandTest(tests.support.ResultTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.install.InstallCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ["main"]
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        """Prepare the test fixture."""
Packit 6f3914
        super(InstallCommandTest, self).setUp()
Packit 6f3914
        self._cmd = dnf.cli.commands.install.InstallCommand(self.cli)
Packit 6f3914
Packit 6f3914
    def test_configure(self):
Packit 6f3914
        tests.support.command_configure(self._cmd, ['pkg'])
Packit 6f3914
        self.assertFalse(self.cli.demands.allow_erasing)
Packit 6f3914
        self.assertTrue(self.cli.demands.sack_activation)
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.commands.install._',
Packit 6f3914
                dnf.pycomp.NullTranslations().ugettext)
Packit 6f3914
    def test_run_group_notfound(self):
Packit 6f3914
        """Test whether it fails if the group cannot be found."""
Packit 6f3914
        stdout = dnf.pycomp.StringIO()
Packit 6f3914
Packit 6f3914
        with tests.support.wiretap_logs('dnf', logging.INFO, stdout):
Packit 6f3914
            self.assertRaises(dnf.exceptions.Error,
Packit 6f3914
                              tests.support.command_run, self._cmd, ['@non-existent'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(stdout.getvalue(), "Module or Group 'non-existent' is not available.\n")
Packit 6f3914
        self.assertResult(self._cmd.cli.base,
Packit 6f3914
                          self._cmd.cli.base.sack.query().installed())
Packit 6f3914
Packit 6f3914
    def test_run_package(self):
Packit 6f3914
        """Test whether a package is installed."""
Packit 6f3914
        tests.support.command_run(self._cmd, ['lotus'])
Packit 6f3914
Packit 6f3914
        self.assertResult(self.base, itertools.chain(
Packit 6f3914
            self.base.sack.query().installed(),
Packit 6f3914
            dnf.subject.Subject('lotus.x86_64').get_best_query(self.base.sack))
Packit 6f3914
        )
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.commands.install._',
Packit 6f3914
                dnf.pycomp.NullTranslations().ugettext)
Packit 6f3914
    def test_run_package_notfound(self):
Packit 6f3914
        """Test whether it fails if the package cannot be found."""
Packit 6f3914
        stdout = dnf.pycomp.StringIO()
Packit 6f3914
Packit 6f3914
        with tests.support.wiretap_logs('dnf', logging.INFO, stdout):
Packit 6f3914
            self.assertRaises(dnf.exceptions.Error,
Packit 6f3914
                              tests.support.command_run, self._cmd, ['non-existent', 'lotus'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(stdout.getvalue(),
Packit 6f3914
                         'No match for argument: non-existent\n')
Packit 6f3914
        self.assertResult(self.base, itertools.chain(
Packit 6f3914
            self.base.sack.query().installed(),
Packit 6f3914
            dnf.subject.Subject('lotus.x86_64').get_best_query(self.base.sack))
Packit 6f3914
        )
Packit 6f3914
Packit 6f3914
Packit 6f3914
class ReinstallCommandTest(tests.support.ResultTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.ReinstallCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ["main"]
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        """Prepare the test fixture."""
Packit 6f3914
        super(ReinstallCommandTest, self).setUp()
Packit 6f3914
        self._cmd = dnf.cli.commands.reinstall.ReinstallCommand(self.cli)
Packit 6f3914
Packit 6f3914
    def test_run(self):
Packit 6f3914
        """Test whether the package is installed."""
Packit 6f3914
        tests.support.command_run(self._cmd, ['pepper'])
Packit 6f3914
        self.assertResult(self.base, itertools.chain(
Packit 6f3914
            self.base.sack.query().installed().filter(name__neq='pepper'),
Packit 6f3914
            dnf.subject.Subject('pepper.x86_64').get_best_query(self.base.sack)
Packit 6f3914
            .available()))
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.commands.reinstall._',
Packit 6f3914
                dnf.pycomp.NullTranslations().ugettext)
Packit 6f3914
    def test_run_notinstalled(self):
Packit 6f3914
        """Test whether it fails if the package is not installed."""
Packit 6f3914
        stdout = dnf.pycomp.StringIO()
Packit 6f3914
Packit 6f3914
        with tests.support.wiretap_logs('dnf', logging.INFO, stdout):
Packit 6f3914
            self.assertRaises(dnf.exceptions.Error, tests.support.command_run, self._cmd, ['lotus'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(stdout.getvalue(), 'Package lotus available, but not installed.\n'
Packit 6f3914
                                            'No match for argument: lotus\n')
Packit 6f3914
        self.assertResult(self._cmd.cli.base,
Packit 6f3914
                          self._cmd.cli.base.sack.query().installed())
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.commands.reinstall._', dnf.pycomp.NullTranslations().ugettext)
Packit 6f3914
    def test_run_notavailable(self):
Packit 6f3914
        """ Test whether it fails if the package is not available. """
Packit 6f3914
        holes_query = dnf.subject.Subject('hole').get_best_query(self.base.sack)
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in holes_query.installed():
Packit 6f3914
            pkg._force_swdb_repoid = "unknown"
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        stdout = dnf.pycomp.StringIO()
Packit 6f3914
Packit 6f3914
        with tests.support.wiretap_logs('dnf', logging.INFO, stdout):
Packit 6f3914
            self.assertRaises(dnf.exceptions.Error, tests.support.command_run, self._cmd, ['hole'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(
Packit 6f3914
            stdout.getvalue(),
Packit 6f3914
            'Installed package hole-1-1.x86_64 (from unknown) not available.\n')
Packit 6f3914
        self.assertResult(self.base, self.base.sack.query().installed())
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsCommandTest(tests.support.DnfBaseTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.RepoPkgsCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = []
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        """Prepare the test fixture."""
Packit 6f3914
        super(RepoPkgsCommandTest, self).setUp()
Packit 6f3914
        self.cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
Packit 6f3914
    def test_configure_badargs(self):
Packit 6f3914
        """Test whether the command fail in case of wrong args."""
Packit 6f3914
        with self.assertRaises(SystemExit) as exit, \
Packit 6f3914
                tests.support.patch_std_streams() as (stdout, stderr), \
Packit 6f3914
                mock.patch('logging.Logger.critical'):
Packit 6f3914
            tests.support.command_configure(self.cmd, [])
Packit 6f3914
        self.assertEqual(exit.exception.code, 2)
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsCheckUpdateSubCommandTest(tests.support.DnfBaseTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.RepoPkgsCommand.CheckUpdateSubCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ['main', 'updates', 'third_party']
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.term._real_term_width', return_value=80)
Packit 6f3914
    def test(self, _real_term_width):
Packit 6f3914
        """ Test whether only upgrades in the repository are listed. """
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed().filter(name='tour'):
Packit 6f3914
            pkg._force_swdb_repoid = "updates"
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        with tests.support.patch_std_streams() as (stdout, _):
Packit 6f3914
            tests.support.command_run(cmd, ['updates', 'check-update'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(
Packit 6f3914
            stdout.getvalue(),
Packit 6f3914
            u'\n'
Packit 6f3914
            u'hole.x86_64                              2-1'
Packit 6f3914
            u'                            updates \n'
Packit 6f3914
            u'pepper.x86_64                            20-1'
Packit 6f3914
            u'                           updates \n'
Packit 6f3914
            u'Obsoleting Packages\n'
Packit 6f3914
            u'hole.i686                                2-1'
Packit 6f3914
            u'                            updates \n'
Packit 6f3914
            u'    tour.noarch                          5-0'
Packit 6f3914
            u'                            @updates\n'
Packit 6f3914
            u'hole.x86_64                              2-1'
Packit 6f3914
            u'                            updates \n'
Packit 6f3914
            u'    tour.noarch                          5-0'
Packit 6f3914
            u'                            @updates\n')
Packit 6f3914
        self.assertEqual(self.cli.demands.success_exit_status, 100)
Packit 6f3914
Packit 6f3914
    def test_not_found(self):
Packit 6f3914
        """Test whether exit code differs if updates are not found."""
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['main', 'check-update'])
Packit 6f3914
#        self.assertNotEqual(self.cli.demands.success_exit_status, 100)
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsInfoSubCommandTest(tests.support.DnfBaseTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.RepoPkgsCommand.InfoSubCommand`` class."""
Packit 6f3914
Packit 6f3914
    AVAILABLE_TITLE = u'Available Packages\n'
Packit 6f3914
Packit 6f3914
    HOLE_I686_INFO = (u'Name         : hole\n'
Packit 6f3914
                      u'Version      : 2\n'
Packit 6f3914
                      u'Release      : 1\n'
Packit 6f3914
                      u'Architecture : i686\n'
Packit 6f3914
                      u'Size         : 0.0  \n'
Packit 6f3914
                      u'Source       : None\n'
Packit 6f3914
                      u'Repository   : updates\n'
Packit 6f3914
                      u'Summary      : \n'
Packit 6f3914
                      u'License      : \n'
Packit 6f3914
                      u'Description  : \n'
Packit 6f3914
                      u'\n')
Packit 6f3914
Packit 6f3914
    HOLE_X86_64_INFO = (u'Name         : hole\n'
Packit 6f3914
                        u'Version      : 2\n'
Packit 6f3914
                        u'Release      : 1\n'
Packit 6f3914
                        u'Architecture : x86_64\n'
Packit 6f3914
                        u'Size         : 0.0  \n'
Packit 6f3914
                        u'Source       : None\n'
Packit 6f3914
                        u'Repository   : updates\n'
Packit 6f3914
                        u'Summary      : \n'
Packit 6f3914
                        u'License      : \n'
Packit 6f3914
                        u'Description  : \n\n')
Packit 6f3914
Packit 6f3914
    INSTALLED_TITLE = u'Installed Packages\n'
Packit 6f3914
Packit 6f3914
    PEPPER_SYSTEM_INFO = (u'Name         : pepper\n'
Packit 6f3914
                          u'Version      : 20\n'
Packit 6f3914
                          u'Release      : 0\n'
Packit 6f3914
                          u'Architecture : x86_64\n'
Packit 6f3914
                          u'Size         : 0.0  \n'
Packit 6f3914
                          u'Source       : None\n'
Packit 6f3914
                          u'Repository   : @System\n'
Packit 6f3914
                          u'From repo    : main\n'
Packit 6f3914
                          u'Summary      : \n'
Packit 6f3914
                          u'License      : \n'
Packit 6f3914
                          u'Description  : \n\n')
Packit 6f3914
Packit 6f3914
    PEPPER_UPDATES_INFO = (u'Name         : pepper\n'
Packit 6f3914
                           u'Version      : 20\n'
Packit 6f3914
                           u'Release      : 1\n'
Packit 6f3914
                           u'Architecture : x86_64\n'
Packit 6f3914
                           u'Size         : 0.0  \n'
Packit 6f3914
                           u'Source       : None\n'
Packit 6f3914
                           u'Repository   : updates\n'
Packit 6f3914
                           u'Summary      : \n'
Packit 6f3914
                           u'License      : \n'
Packit 6f3914
                           u'Description  : \n\n')
Packit 6f3914
Packit 6f3914
    REPOS = ['main', 'updates', 'third_party']
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        """Prepare the test fixture."""
Packit 6f3914
        super(RepoPkgsInfoSubCommandTest, self).setUp()
Packit 6f3914
        self.base.conf.recent = 7
Packit 6f3914
Packit 6f3914
    def test_info_all(self):
Packit 6f3914
        """Test whether only packages related to the repository are listed."""
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed().filter(name='pepper'):
Packit 6f3914
            pkg._force_swdb_repoid = "main"
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        with tests.support.patch_std_streams() as (stdout, _):
Packit 6f3914
            tests.support.command_run(cmd, ['main', 'info', 'all', '*p*'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(
Packit 6f3914
            stdout.getvalue(),
Packit 6f3914
            ''.join((
Packit 6f3914
                self.INSTALLED_TITLE,
Packit 6f3914
                self.PEPPER_SYSTEM_INFO,
Packit 6f3914
                self.AVAILABLE_TITLE,
Packit 6f3914
                u'Name         : pepper\n'
Packit 6f3914
                u'Version      : 20\n'
Packit 6f3914
                u'Release      : 0\n'
Packit 6f3914
                u'Architecture : src\n'
Packit 6f3914
                u'Size         : 0.0  \n'
Packit 6f3914
                u'Source       : None\n'
Packit 6f3914
                u'Repository   : main\n'
Packit 6f3914
                u'Summary      : \n'
Packit 6f3914
                u'License      : \n'
Packit 6f3914
                u'Description  : \n'
Packit 6f3914
                u'\n',
Packit 6f3914
                u'Name         : trampoline\n'
Packit 6f3914
                u'Version      : 2.1\n'
Packit 6f3914
                u'Release      : 1\n'
Packit 6f3914
                u'Architecture : noarch\n'
Packit 6f3914
                u'Size         : 0.0  \n'
Packit 6f3914
                u'Source       : None\n'
Packit 6f3914
                u'Repository   : main\n'
Packit 6f3914
                u'Summary      : \n'
Packit 6f3914
                u'License      : \n'
Packit 6f3914
                u'Description  : \n'
Packit 6f3914
                u'\n')))
Packit 6f3914
Packit 6f3914
    def test_info_available(self):
Packit 6f3914
        """Test whether only packages in the repository are listed."""
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        with tests.support.patch_std_streams() as (stdout, _):
Packit 6f3914
            tests.support.command_run(cmd, ['updates', 'info', 'available'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(
Packit 6f3914
            stdout.getvalue(),
Packit 6f3914
            ''.join((
Packit 6f3914
                self.AVAILABLE_TITLE,
Packit 6f3914
                self.HOLE_I686_INFO,
Packit 6f3914
                self.HOLE_X86_64_INFO,
Packit 6f3914
                self.PEPPER_UPDATES_INFO)))
Packit 6f3914
Packit 6f3914
    def test_info_extras(self):
Packit 6f3914
        """Test whether only extras installed from the repository are listed."""
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed().filter(name='test'):
Packit 6f3914
            pkg._force_swdb_repoid = "main"
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        with tests.support.patch_std_streams() as (stdout, _):
Packit 6f3914
            tests.support.command_run(cmd, ['main', 'info', 'extras'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(
Packit 6f3914
            stdout.getvalue(),
Packit 6f3914
            u'Extra Packages\n'
Packit 6f3914
            u'Name         : test\n'
Packit 6f3914
            u'Version      : 1\n'
Packit 6f3914
            u'Release      : 0\n'
Packit 6f3914
            u'Architecture : noarch\n'
Packit 6f3914
            u'Size         : 0.0  \n'
Packit 6f3914
            u'Source       : None\n'
Packit 6f3914
            u'Repository   : @System\n'
Packit 6f3914
            u'From repo    : main\n'
Packit 6f3914
            u'Summary      : \n'
Packit 6f3914
            u'License      : \n'
Packit 6f3914
            u'Description  : \n\n')
Packit 6f3914
Packit 6f3914
    def test_info_installed(self):
Packit 6f3914
        """Test whether only packages installed from the repository are listed."""
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed().filter(name='pepper'):
Packit 6f3914
            pkg._force_swdb_repoid = "main"
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        with tests.support.patch_std_streams() as (stdout, _):
Packit 6f3914
            tests.support.command_run(cmd, ['main', 'info', 'installed'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(
Packit 6f3914
            stdout.getvalue(),
Packit 6f3914
            ''.join((self.INSTALLED_TITLE, self.PEPPER_SYSTEM_INFO)))
Packit 6f3914
Packit 6f3914
    def test_info_obsoletes(self):
Packit 6f3914
        """Test whether only obsoletes in the repository are listed."""
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        with tests.support.patch_std_streams() as (stdout, _):
Packit 6f3914
            tests.support.command_run(cmd, ['updates', 'info', 'obsoletes'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(
Packit 6f3914
            stdout.getvalue(),
Packit 6f3914
            ''.join((
Packit 6f3914
                u'Obsoleting Packages\n',
Packit 6f3914
                self.HOLE_I686_INFO,
Packit 6f3914
                self.HOLE_X86_64_INFO)))
Packit 6f3914
Packit 6f3914
    def test_info_upgrades(self):
Packit 6f3914
        """Test whether only upgrades in the repository are listed."""
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        with tests.support.patch_std_streams() as (stdout, _):
Packit 6f3914
            tests.support.command_run(cmd, ['updates', 'info', 'upgrades'])
Packit 6f3914
        self.assertEqual(stdout.getvalue(), ''.join((
Packit 6f3914
            u'Available Upgrades\n', self.HOLE_X86_64_INFO, self.PEPPER_UPDATES_INFO)))
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsInstallSubCommandTest(tests.support.ResultTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.RepoPkgsCommand.InstallSubCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ['main', 'third_party']
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def test_all(self):
Packit 6f3914
        """Test whether all packages from the repository are installed."""
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['third_party', 'install'])
Packit 6f3914
Packit 6f3914
        q = self.base.sack.query()
Packit 6f3914
        self.assertResult(self.base, itertools.chain(
Packit 6f3914
            q.installed(),
Packit 6f3914
            q.available().filter(reponame='third_party', arch='x86_64', name__neq='hole'))
Packit 6f3914
        )
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsMoveToSubCommandTest(tests.support.ResultTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.RepoPkgsCommand.MoveToSubCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ['distro', 'main']
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def test_all(self):
Packit 6f3914
        """Test whether only packages in the repository are installed."""
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['distro', 'move-to'])
Packit 6f3914
Packit 6f3914
        self.assertResult(self.base, itertools.chain(
Packit 6f3914
            self.base.sack.query().installed().filter(name__neq='tour'),
Packit 6f3914
            dnf.subject.Subject('tour-5-0').get_best_query(self.base.sack)
Packit 6f3914
            .available()))
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsReinstallOldSubCommandTest(tests.support.ResultTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.RepoPkgsCommand.ReinstallOldSubCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ["main"]
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def test_all(self):
Packit 6f3914
        """Test whether all packages from the repository are reinstalled."""
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed():
Packit 6f3914
            reponame = 'main' if pkg.name != 'pepper' else 'non-main'
Packit 6f3914
            pkg._force_swdb_repoid = reponame
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['main', 'reinstall-old'])
Packit 6f3914
Packit 6f3914
        self.assertResult(self.base, itertools.chain(
Packit 6f3914
            self.base.sack.query().installed().filter(name__neq='librita'),
Packit 6f3914
            dnf.subject.Subject('librita.i686').get_best_query(self.base.sack).installed(),
Packit 6f3914
            dnf.subject.Subject('librita').get_best_query(self.base.sack).available())
Packit 6f3914
        )
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsReinstallSubCommandTest(tests.support.DnfBaseTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.RepoPkgsCommand.ReinstallSubCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ["main"]
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        """Prepare the test fixture."""
Packit 6f3914
        super(RepoPkgsReinstallSubCommandTest, self).setUp()
Packit 6f3914
Packit 6f3914
        self.mock = mock.Mock()
Packit 6f3914
        old_run_patcher = mock.patch(
Packit 6f3914
            'dnf.cli.commands.RepoPkgsCommand.ReinstallOldSubCommand.run_on_repo',
Packit 6f3914
            self.mock.reinstall_old_run)
Packit 6f3914
        move_run_patcher = mock.patch(
Packit 6f3914
            'dnf.cli.commands.RepoPkgsCommand.MoveToSubCommand.run_on_repo',
Packit 6f3914
            self.mock.move_to_run)
Packit 6f3914
Packit 6f3914
        old_run_patcher.start()
Packit 6f3914
        self.addCleanup(old_run_patcher.stop)
Packit 6f3914
        move_run_patcher.start()
Packit 6f3914
        self.addCleanup(move_run_patcher.stop)
Packit 6f3914
Packit 6f3914
    def test_all_fails(self):
Packit 6f3914
        """Test whether it fails if everything fails."""
Packit 6f3914
        self.mock.reinstall_old_run.side_effect = dnf.exceptions.Error('test')
Packit 6f3914
        self.mock.move_to_run.side_effect = dnf.exceptions.Error('test')
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        self.assertRaises(
Packit 6f3914
            dnf.exceptions.Error,
Packit 6f3914
            tests.support.command_run,
Packit 6f3914
            cmd,
Packit 6f3914
            ['main', 'reinstall']
Packit 6f3914
        )
Packit 6f3914
Packit 6f3914
        self.assertEqual(self.mock.mock_calls,
Packit 6f3914
                         [mock.call.reinstall_old_run(),
Packit 6f3914
                          mock.call.move_to_run()])
Packit 6f3914
Packit 6f3914
    def test_all_moveto(self):
Packit 6f3914
        """Test whether reinstall-old is called first and move-to next."""
Packit 6f3914
        self.mock.reinstall_old_run.side_effect = dnf.exceptions.Error('test')
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['main', 'reinstall'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(self.mock.mock_calls,
Packit 6f3914
                         [mock.call.reinstall_old_run(),
Packit 6f3914
                          mock.call.move_to_run()])
Packit 6f3914
Packit 6f3914
    def test_all_reinstallold(self):
Packit 6f3914
        """Test whether only reinstall-old is called."""
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['main', 'reinstall'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(self.mock.mock_calls,
Packit 6f3914
                         [mock.call.reinstall_old_run()])
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsRemoveOrDistroSyncSubCommandTest(tests.support.ResultTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``RemoveOrDistroSyncSubCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ["distro"]
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def test_run_on_repo_spec_sync(self):
Packit 6f3914
        """Test running with a package which can be synchronized."""
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed():
Packit 6f3914
            reponame = 'non-distro' if pkg.name == 'pepper' else 'distro'
Packit 6f3914
            pkg._force_swdb_repoid = reponame
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['non-distro', 'remove-or-distro-sync', 'pepper'])
Packit 6f3914
Packit 6f3914
        self.assertResult(self.base, itertools.chain(
Packit 6f3914
            self.base.sack.query().installed().filter(name__neq='pepper'),
Packit 6f3914
            dnf.subject.Subject('pepper').get_best_query(self.base.sack)
Packit 6f3914
            .available()))
Packit 6f3914
Packit 6f3914
    def test_run_on_repo_spec_remove(self):
Packit 6f3914
        """Test running with a package which must be removed."""
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed():
Packit 6f3914
            reponame = 'non-distro' if pkg.name == 'hole' else 'distro'
Packit 6f3914
            pkg._force_swdb_repoid = reponame
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['non-distro', 'remove-or-distro-sync', 'hole'])
Packit 6f3914
Packit 6f3914
        self.assertResult(
Packit 6f3914
            self.base,
Packit 6f3914
            self.base.sack.query().installed().filter(name__neq='hole'))
Packit 6f3914
Packit 6f3914
    def test_run_on_repo_all(self):
Packit 6f3914
        """Test running without a package specification."""
Packit 6f3914
        nondist = {'pepper', 'hole'}
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed():
Packit 6f3914
            reponame = 'non-distro' if pkg.name in nondist else 'distro'
Packit 6f3914
            pkg._force_swdb_repoid = reponame
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['non-distro', 'remove-or-distro-sync'])
Packit 6f3914
Packit 6f3914
        self.assertResult(self.base, itertools.chain(
Packit 6f3914
            self.base.sack.query().installed().filter(name__neq='pepper')
Packit 6f3914
            .filter(name__neq='hole'),
Packit 6f3914
            dnf.subject.Subject('pepper').get_best_query(self.base.sack)
Packit 6f3914
            .available()))
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.commands._', dnf.pycomp.NullTranslations().ugettext)
Packit 6f3914
    def test_run_on_repo_spec_notinstalled(self):
Packit 6f3914
        """Test running with a package which is not installed."""
Packit 6f3914
        stdout = dnf.pycomp.StringIO()
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        with tests.support.wiretap_logs('dnf', logging.INFO, stdout):
Packit 6f3914
            self.assertRaises(dnf.exceptions.Error,
Packit 6f3914
                              tests.support.command_run, cmd,
Packit 6f3914
                              ['non-distro', 'remove-or-distro-sync', 'not-installed'])
Packit 6f3914
Packit 6f3914
        self.assertIn('No match for argument: not-installed\n', stdout.getvalue(),
Packit 6f3914
                      'mismatch not logged')
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.commands._', dnf.pycomp.NullTranslations().ugettext)
Packit 6f3914
    def test_run_on_repo_all_notinstalled(self):
Packit 6f3914
        """Test running with a repository from which nothing is installed."""
Packit 6f3914
        stdout = dnf.pycomp.StringIO()
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        with tests.support.wiretap_logs('dnf', logging.INFO, stdout):
Packit 6f3914
            self.assertRaises(dnf.exceptions.Error,
Packit 6f3914
                              tests.support.command_run, cmd,
Packit 6f3914
                              ['non-distro', 'remove-or-distro-sync'])
Packit 6f3914
Packit 6f3914
        self.assertIn('No package installed from the repository.\n',
Packit 6f3914
                      stdout.getvalue(), 'mismatch not logged')
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsRemoveOrReinstallSubCommandTest(tests.support.ResultTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.RepoPkgsCommand.RemoveOrReinstallSubCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ["distro"]
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        """Prepare the test fixture."""
Packit 6f3914
        super(RepoPkgsRemoveOrReinstallSubCommandTest, self).setUp()
Packit 6f3914
        self.cli = self.base.mock_cli()
Packit 6f3914
Packit 6f3914
    def test_all_not_installed(self):
Packit 6f3914
        """Test whether it fails if no package is installed from the repository."""
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        self.assertRaises(dnf.exceptions.Error,
Packit 6f3914
                          tests.support.command_run, cmd,
Packit 6f3914
                          ['non-distro', 'remove-or-distro-sync'])
Packit 6f3914
Packit 6f3914
        self.assertResult(self.base, self.base.sack.query().installed())
Packit 6f3914
Packit 6f3914
    def test_all_reinstall(self):
Packit 6f3914
        """Test whether all packages from the repository are reinstalled."""
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed():
Packit 6f3914
            reponame = 'distro' if pkg.name != 'tour' else 'non-distro'
Packit 6f3914
            pkg._force_swdb_repoid = reponame
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['non-distro', 'remove-or-reinstall'])
Packit 6f3914
Packit 6f3914
        self.assertResult(self.base, itertools.chain(
Packit 6f3914
            self.base.sack.query().installed().filter(name__neq='tour'),
Packit 6f3914
            dnf.subject.Subject('tour').get_best_query(self.base.sack).available())
Packit 6f3914
        )
Packit 6f3914
Packit 6f3914
    def test_all_remove(self):
Packit 6f3914
        """Test whether all packages from the repository are removed."""
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed():
Packit 6f3914
            reponame = 'distro' if pkg.name != 'hole' else 'non-distro'
Packit 6f3914
            pkg._force_swdb_repoid = reponame
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['non-distro', 'remove-or-reinstall'])
Packit 6f3914
Packit 6f3914
        self.assertResult(
Packit 6f3914
            self.base,
Packit 6f3914
            self.base.sack.query().installed().filter(name__neq='hole'))
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsRemoveSubCommandTest(tests.support.ResultTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.RepoPkgsCommand.RemoveSubCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ["main"]
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def test_all(self):
Packit 6f3914
        """Test whether only packages from the repository are removed."""
Packit 6f3914
        tsis = []
Packit 6f3914
        for pkg in self.base.sack.query().installed():
Packit 6f3914
            reponame = 'main' if pkg.name == 'pepper' else 'non-main'
Packit 6f3914
            pkg._force_swdb_repoid = reponame
Packit 6f3914
            self.history.rpm.add_install(pkg)
Packit 6f3914
#            tsi = dnf.transaction.TransactionItem(
Packit 6f3914
#                dnf.transaction.INSTALL,
Packit 6f3914
#                installed=pkg,
Packit 6f3914
#                reason=libdnf.transaction.TransactionItemReason_USER
Packit 6f3914
#            )
Packit 6f3914
#            tsis.append(tsi)
Packit 6f3914
        self._swdb_commit(tsis)
Packit 6f3914
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['main', 'remove'])
Packit 6f3914
Packit 6f3914
        self.assertResult(
Packit 6f3914
            self.base,
Packit 6f3914
            self.base.sack.query().installed().filter(name__neq='pepper')
Packit 6f3914
        )
Packit 6f3914
Packit 6f3914
Packit 6f3914
class RepoPkgsUpgradeSubCommandTest(tests.support.ResultTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.RepoPkgsCommand.UpgradeSubCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ["updates", "third_party"]
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def test_all(self):
Packit 6f3914
        """Test whether all packages from the repository are installed."""
Packit 6f3914
        cmd = dnf.cli.commands.RepoPkgsCommand(self.cli)
Packit 6f3914
        tests.support.command_run(cmd, ['third_party', 'upgrade'])
Packit 6f3914
Packit 6f3914
        q = self.base.sack.query()
Packit 6f3914
        self.assertResult(self.base, itertools.chain(
Packit 6f3914
            q.installed().filter(name__neq='hole'),
Packit 6f3914
            q.upgrades().filter(reponame='third_party', arch='x86_64'))
Packit 6f3914
        )
Packit 6f3914
Packit 6f3914
Packit 6f3914
class UpgradeCommandTest(tests.support.ResultTestCase):
Packit 6f3914
Packit 6f3914
    """Tests of ``dnf.cli.commands.upgrade.UpgradeCommand`` class."""
Packit 6f3914
Packit 6f3914
    REPOS = ["updates"]
Packit 6f3914
    BASE_CLI = True
Packit 6f3914
    CLI = "mock"
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        super(UpgradeCommandTest, self).setUp()
Packit 6f3914
        self.cmd = dnf.cli.commands.upgrade.UpgradeCommand(self.cli)
Packit 6f3914
Packit 6f3914
    def test_run(self):
Packit 6f3914
        """Test whether a package is updated."""
Packit 6f3914
        tests.support.command_run(self.cmd, ['pepper'])
Packit 6f3914
Packit 6f3914
        self.assertResult(self.cmd.base, itertools.chain(
Packit 6f3914
            self.cmd.base.sack.query().installed().filter(name__neq='pepper'),
Packit 6f3914
            self.cmd.base.sack.query().upgrades().filter(name='pepper')))
Packit 6f3914
Packit 6f3914
    @mock.patch('dnf.cli.commands.upgrade._',
Packit 6f3914
                dnf.pycomp.NullTranslations().ugettext)
Packit 6f3914
    def test_updatePkgs_notfound(self):
Packit 6f3914
        """Test whether it fails if the package cannot be found."""
Packit 6f3914
        stdout = dnf.pycomp.StringIO()
Packit 6f3914
Packit 6f3914
        with tests.support.wiretap_logs('dnf', logging.INFO, stdout):
Packit 6f3914
            self.assertRaises(dnf.exceptions.Error,
Packit 6f3914
                              tests.support.command_run, self.cmd, ['non-existent'])
Packit 6f3914
Packit 6f3914
        self.assertEqual(stdout.getvalue(),
Packit 6f3914
                         'No match for argument: non-existent\n')
Packit 6f3914
        self.assertResult(self.cmd.base, self.cmd.base.sack.query().installed())