Blame tests/test_history.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 libdnf.transaction
Packit 6f3914
Packit 6f3914
import dnf.history
Packit 6f3914
Packit 6f3914
import tests.support
Packit 6f3914
from tests.support import mock
Packit 6f3914
Packit 6f3914
'''
Packit 6f3914
class NEVRAOperationsTest(tests.support.TestCase):
Packit 6f3914
    """Unit tests of dnf.history.NEVRAOperations."""
Packit 6f3914
Packit 6f3914
    def test_add_erase_installed(self):
Packit 6f3914
        """Test add with an erasure of NEVRA which was installed before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Install', 'tour-0:4.6-1.noarch', obsoleted_nevras=('lotus-0:3-16.x86_64',))
Packit 6f3914
        ops.add('Erase', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (('Erase', 'lotus-0:3-16.x86_64', None, set()),))
Packit 6f3914
Packit 6f3914
    def test_add_erase_removed(self):
Packit 6f3914
        """Test add with an erasure of NEVRA which was removed before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Erase', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertRaises(
Packit 6f3914
            ValueError,
Packit 6f3914
            ops.add, 'Erase', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
    def test_add_install_installed(self):
Packit 6f3914
        """Test add with two installs of the same NEVRA."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Install', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertRaises(
Packit 6f3914
            ValueError,
Packit 6f3914
            ops.add, 'Install', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
    def test_add_install_removed(self):
Packit 6f3914
        """Test add with an install of NEVRA which was removed before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Erase', 'tour-0:4.6-1.noarch')
Packit 6f3914
        ops.add('Install', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (('Reinstall', 'tour-0:4.6-1.noarch', 'tour-0:4.6-1.noarch', set()),))
Packit 6f3914
Packit 6f3914
    def test_add_obsoleted_installed(self):
Packit 6f3914
        """Test add with an obsoleted NEVRA which was installed before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Install', 'lotus-0:3-16.x86_64')
Packit 6f3914
        ops.add('Install', 'tour-0:4.6-1.noarch', obsoleted_nevras=('lotus-0:3-16.x86_64',))
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (('Install', 'tour-0:4.6-1.noarch', None, set()),))
Packit 6f3914
Packit 6f3914
    def test_add_obsoleted_obsoleted(self):
Packit 6f3914
        """Test add with an obsoleted NEVRA which was obsoleted before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add(
Packit 6f3914
            'Install',
Packit 6f3914
            'tour-0:4.6-1.noarch',
Packit 6f3914
            obsoleted_nevras=('lotus-0:3-16.x86_64', 'mrkite-0:2-0.x86_64')
Packit 6f3914
        )
Packit 6f3914
        ops.add(
Packit 6f3914
            'Install',
Packit 6f3914
            'pepper-0:20-0.x86_64',
Packit 6f3914
            obsoleted_nevras=('lotus-0:3-16.x86_64', 'librita-0:1-1.x86_64')
Packit 6f3914
        )
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (
Packit 6f3914
                (
Packit 6f3914
                    'Install',
Packit 6f3914
                    'tour-0:4.6-1.noarch',
Packit 6f3914
                    None,
Packit 6f3914
                    {'lotus-0:3-16.x86_64', 'mrkite-0:2-0.x86_64'}
Packit 6f3914
                ),
Packit 6f3914
                (
Packit 6f3914
                    'Install',
Packit 6f3914
                    'pepper-0:20-0.x86_64',
Packit 6f3914
                    None,
Packit 6f3914
                    {'lotus-0:3-16.x86_64', 'librita-0:1-1.x86_64'}
Packit 6f3914
                )
Packit 6f3914
            )
Packit 6f3914
        )
Packit 6f3914
Packit 6f3914
    def test_add_obsoleted_removed(self):
Packit 6f3914
        """Test add with an obsoleted NEVRA which was removed before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Erase', 'lotus-0:3-16.x86_64')
Packit 6f3914
Packit 6f3914
        self.assertRaises(
Packit 6f3914
            ValueError,
Packit 6f3914
            ops.add, 'Install', 'tour-0:4.6-1.noarch', obsoleted_nevras=('lotus-0:3-16.x86_64',))
Packit 6f3914
Packit 6f3914
    def test_add_reinstall_installed(self):
Packit 6f3914
        """Test add with a reinstall of NEVRA which was installed before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Install', 'tour-0:4.6-1.noarch')
Packit 6f3914
        ops.add('Reinstall', 'tour-0:4.6-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (('Install', 'tour-0:4.6-1.noarch', None, set()),))
Packit 6f3914
Packit 6f3914
    def test_add_replace_installed(self):
Packit 6f3914
        """Test add with a replacing NEVRA which was installed before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Install', 'tour-0:4.8-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertRaises(
Packit 6f3914
            ValueError,
Packit 6f3914
            ops.add, 'Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
    def test_add_replace_opposite(self):
Packit 6f3914
        """Test add with a replacement which was done before, but swapped."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Downgrade', 'tour-0:4.6-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (('Reinstall', 'tour-0:4.8-1.noarch', 'tour-0:4.8-1.noarch', set()),))
Packit 6f3914
Packit 6f3914
    def test_add_replace_opposite_manual(self):
Packit 6f3914
        """Test add with a manual replacement which was done before, but swapped."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Erase', 'tour-0:4.8-1.noarch')
Packit 6f3914
        ops.add('Install', 'tour-0:4.6-1.noarch')
Packit 6f3914
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (('Reinstall', 'tour-0:4.8-1.noarch', 'tour-0:4.8-1.noarch', set()),))
Packit 6f3914
Packit 6f3914
    def test_add_replace_removed(self):
Packit 6f3914
        """Test add with a replacing NEVRA which was removed before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Erase', 'tour-0:4.8-1.noarch')
Packit 6f3914
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (('Reinstall', 'tour-0:4.8-1.noarch', 'tour-0:4.8-1.noarch', set()),
Packit 6f3914
             ('Erase', 'tour-0:4.6-1.noarch', None, set())))
Packit 6f3914
Packit 6f3914
    def test_add_replaced_opposite(self):
Packit 6f3914
        """Test add with a replaced NEVRA which replaced a NEVRA before in the opposite direction."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Downgrade', 'tour-0:4.6-1.noarch', 'tour-0:4.9-1.noarch')
Packit 6f3914
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (('Erase', 'tour-0:4.9-1.noarch', None, set()),
Packit 6f3914
             ('Install', 'tour-0:4.8-1.noarch', None, set())))
Packit 6f3914
Packit 6f3914
    def test_add_replaced_removed(self):
Packit 6f3914
        """Test add with a replaced NEVRA which was removed before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Erase', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertRaises(
Packit 6f3914
            ValueError,
Packit 6f3914
            ops.add, 'Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
    def test_add_replaced_reinstall(self):
Packit 6f3914
        """Test add with a replaced NEVRA which was reinstalled before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Reinstall', 'tour-0:4.6-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch', set()),))
Packit 6f3914
Packit 6f3914
    def test_add_replaced_replacement(self):
Packit 6f3914
        """Test add with a replaced NEVRA which replaced a NEVRA before."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
Packit 6f3914
        self.assertCountEqual(
Packit 6f3914
            ops,
Packit 6f3914
            (('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.6-1.noarch', set()),))
Packit 6f3914
Packit 6f3914
    def test_addition(self):
Packit 6f3914
        """Test addition of two instances."""
Packit 6f3914
        left_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        left_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
        right_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        right_ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
        expected_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        expected_ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        result_ops = left_ops + right_ops
Packit 6f3914
Packit 6f3914
        self.assertEqual(result_ops, expected_ops)
Packit 6f3914
Packit 6f3914
    def test_addition_inplace(self):
Packit 6f3914
        """Test in-place addition of two instances."""
Packit 6f3914
        left_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        left_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
        right_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        right_ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
        expected_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        expected_ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        left_ops += right_ops
Packit 6f3914
Packit 6f3914
        self.assertEqual(left_ops, expected_ops)
Packit 6f3914
Packit 6f3914
    def test_equality(self):
Packit 6f3914
        """Test equality of two equal instances."""
Packit 6f3914
        left_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        left_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
        right_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        right_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        is_equal = left_ops == right_ops
Packit 6f3914
Packit 6f3914
        self.assertTrue(is_equal)
Packit 6f3914
Packit 6f3914
    def test_equality_differentcontent(self):
Packit 6f3914
        """Test equality of two instances with different contents."""
Packit 6f3914
        left_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        left_ops.add('Downgrade', 'tour-0:4.6-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
        right_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        right_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        is_equal = left_ops == right_ops
Packit 6f3914
Packit 6f3914
        self.assertFalse(is_equal)
Packit 6f3914
Packit 6f3914
    def test_equality_differentlength(self):
Packit 6f3914
        """Test equality of two instances with different lengths."""
Packit 6f3914
        left_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        right_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        right_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        is_equal = left_ops == right_ops
Packit 6f3914
Packit 6f3914
        self.assertFalse(is_equal)
Packit 6f3914
Packit 6f3914
    def test_equality_differenttype(self):
Packit 6f3914
        """Test equality of an instance and an object of a different type."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        is_equal = ops == 'tour-0:4.8-1.noarch'
Packit 6f3914
Packit 6f3914
        self.assertFalse(is_equal)
Packit 6f3914
Packit 6f3914
    def test_equality_identity(self):
Packit 6f3914
        """Test equality of the same instance."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        is_equal = ops == ops
Packit 6f3914
Packit 6f3914
        self.assertTrue(is_equal)
Packit 6f3914
Packit 6f3914
    def test_inequality(self):
Packit 6f3914
        """Test inequality of two different instances."""
Packit 6f3914
        left_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        left_ops.add('Downgrade', 'tour-0:4.6-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
        right_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        right_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        is_inequal = left_ops != right_ops
Packit 6f3914
Packit 6f3914
        self.assertTrue(is_inequal)
Packit 6f3914
Packit 6f3914
    def test_inequality_equal(self):
Packit 6f3914
        """Test inequality of two equal instances."""
Packit 6f3914
        left_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        left_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
        right_ops = dnf.history.NEVRAOperations()
Packit 6f3914
        right_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        is_inequal = left_ops != right_ops
Packit 6f3914
Packit 6f3914
        self.assertFalse(is_inequal)
Packit 6f3914
Packit 6f3914
    def test_iterator(self):
Packit 6f3914
        """Test iterator of an instance."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        iterator = iter(ops)
Packit 6f3914
Packit 6f3914
        self.assertEqual(
Packit 6f3914
            next(iterator),
Packit 6f3914
            ('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch', set()))
Packit 6f3914
        self.assertRaises(StopIteration, next, iterator)
Packit 6f3914
Packit 6f3914
    def test_length(self):
Packit 6f3914
        """Test length of an instance."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit 6f3914
Packit 6f3914
        length = len(ops)
Packit 6f3914
Packit 6f3914
        self.assertEqual(length, 1)
Packit 6f3914
Packit 6f3914
    def test_membership(self):
Packit 6f3914
        """Test membership of a contained operation."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
Packit 6f3914
        is_in = ('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch', ()) in ops
Packit 6f3914
Packit 6f3914
        self.assertTrue(is_in)
Packit 6f3914
Packit 6f3914
    def test_membership_differentnevra(self):
Packit 6f3914
        """Test membership of an operation with different (replacing) NEVRA."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
Packit 6f3914
        is_in = ('Update', 'pepper-0:20-0.x86_64', 'tour-0:4.8-1.noarch', ()) in ops
Packit 6f3914
Packit 6f3914
        self.assertFalse(is_in)
Packit 6f3914
Packit 6f3914
    def test_membership_differentobsoleted(self):
Packit 6f3914
        """Test membership of an operation with different obsoleted NEVRAs."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
        op = (
Packit 6f3914
            'Update',
Packit 6f3914
            'tour-0:4.9-1.noarch',
Packit 6f3914
            'tour-0:4.8-1.noarch',
Packit 6f3914
            ('pepper-0:20-0.x86_64',)
Packit 6f3914
        )
Packit 6f3914
        self.assertFalse(op in ops)
Packit 6f3914
Packit 6f3914
    def test_membership_differentreplaced(self):
Packit 6f3914
        """Test membership of an operation with different replaced NEVRA."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
Packit 6f3914
        is_in = ('Update', 'tour-0:4.9-1.noarch', 'pepper-0:20-0.x86_64', ()) in ops
Packit 6f3914
Packit 6f3914
        self.assertFalse(is_in)
Packit 6f3914
Packit 6f3914
    def test_membership_differentstate(self):
Packit 6f3914
        """Test membership of an operation with different state."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
Packit 6f3914
        is_in = ('Downgrade', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch', ()) in ops
Packit 6f3914
Packit 6f3914
        self.assertFalse(is_in)
Packit 6f3914
Packit 6f3914
    def test_membership_differenttype(self):
Packit 6f3914
        """Test membership of an object of a different type."""
Packit 6f3914
        ops = dnf.history.NEVRAOperations()
Packit 6f3914
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit 6f3914
Packit 6f3914
        is_in = 'tour-0:4.9-1.noarch' in ops
Packit 6f3914
Packit 6f3914
        self.assertFalse(is_in)
Packit 6f3914
Packit 6f3914
Packit 6f3914
class TransactionConverterTest(tests.support.TestCase):
Packit 6f3914
    """Unit tests of dnf.history.TransactionConverter."""
Packit 6f3914
Packit 6f3914
    def assert_transaction_equal(self, actual, expected):
Packit 6f3914
        """Assert that two transactions are equal."""
Packit 6f3914
        self.assertCountEqual(self.transaction2tuples(actual),
Packit 6f3914
                              self.transaction2tuples(expected))
Packit 6f3914
Packit 6f3914
    def test_find_available_na(self):
Packit 6f3914
        """Test finding with an unavailable NEVRA."""
Packit 6f3914
        sack = tests.support.mock_sack('main')
Packit 6f3914
        converter = dnf.history.TransactionConverter(sack)
Packit 6f3914
        with self.assertRaises(dnf.exceptions.PackagesNotAvailableError) as ctx:
Packit 6f3914
            converter._find_available('none-1-0.noarch')
Packit 6f3914
Packit 6f3914
        self.assertEqual(ctx.exception.pkg_spec, 'none-1-0.noarch')
Packit 6f3914
Packit 6f3914
    def test_find_installed_ni(self):
Packit 6f3914
        """Test finding with an unistalled NEVRA."""
Packit 6f3914
        sack = tests.support.mock_sack('main')
Packit 6f3914
        converter = dnf.history.TransactionConverter(sack)
Packit 6f3914
        with self.assertRaises(dnf.exceptions.PackagesNotInstalledError) as ctx:
Packit 6f3914
            converter._find_installed('none-1-0.noarch')
Packit 6f3914
Packit 6f3914
        self.assertEqual(ctx.exception.pkg_spec, 'none-1-0.noarch')
Packit 6f3914
Packit 6f3914
    def test_convert_downgrade(self):
Packit 6f3914
        """Test conversion with a downgrade."""
Packit 6f3914
        operations = dnf.history.NEVRAOperations()
Packit 6f3914
        operations.add('Downgrade', 'tour-4.6-1.noarch', 'tour-5-0.noarch',
Packit 6f3914
                       ['hole-1-1.x86_64'])
Packit 6f3914
Packit 6f3914
        sack = tests.support.mock_sack('main')
Packit 6f3914
        converter = dnf.history.TransactionConverter(sack)
Packit 6f3914
        actual = converter.convert(operations)
Packit 6f3914
Packit 6f3914
        expected = dnf.transaction.Transaction()
Packit 6f3914
        expected.add_downgrade(
Packit 6f3914
            next(iter(sack.query().available()._nevra('tour-4.6-1.noarch'))),
Packit 6f3914
            next(iter(sack.query().installed()._nevra('tour-5-0.noarch'))),
Packit 6f3914
            [next(iter(sack.query().installed()._nevra('hole-1-1.x86_64')))])
Packit 6f3914
        self.assert_transaction_equal(actual, expected)
Packit 6f3914
Packit 6f3914
    def test_convert_erase(self):
Packit 6f3914
        """Test conversion with an erasure."""
Packit 6f3914
        operations = dnf.history.NEVRAOperations()
Packit 6f3914
        operations.add('Erase', 'pepper-20-0.x86_64')
Packit 6f3914
Packit 6f3914
        sack = tests.support.mock_sack()
Packit 6f3914
        converter = dnf.history.TransactionConverter(sack)
Packit 6f3914
        actual = converter.convert(operations)
Packit 6f3914
Packit 6f3914
        expected = dnf.transaction.Transaction()
Packit 6f3914
        expected.add_erase(
Packit 6f3914
            next(iter(sack.query().installed()._nevra('pepper-20-0.x86_64'))))
Packit 6f3914
        self.assert_transaction_equal(actual, expected)
Packit 6f3914
Packit 6f3914
    def test_convert_install(self):
Packit 6f3914
        """Test conversion with an installation."""
Packit 6f3914
        operations = dnf.history.NEVRAOperations()
Packit 6f3914
        operations.add('Install', 'lotus-3-16.x86_64',
Packit 6f3914
                       obsoleted_nevras=['hole-1-1.x86_64'])
Packit 6f3914
Packit 6f3914
        sack = tests.support.mock_sack('main')
Packit 6f3914
        converter = dnf.history.TransactionConverter(sack)
Packit 6f3914
        actual = converter.convert(operations, libdnf.transaction.TransactionItemReason_USER)
Packit 6f3914
Packit 6f3914
        expected = dnf.transaction.Transaction()
Packit 6f3914
        expected.add_install(
Packit 6f3914
            next(iter(sack.query().available()._nevra('lotus-3-16.x86_64'))),
Packit 6f3914
            [next(iter(sack.query().installed()._nevra('hole-1-1.x86_64')))],
Packit 6f3914
            libdnf.transaction.TransactionItemReason_USER)
Packit 6f3914
        self.assert_transaction_equal(actual, expected)
Packit 6f3914
Packit 6f3914
    def test_convert_reinstall(self):
Packit 6f3914
        """Test conversion with a reinstallation."""
Packit 6f3914
        operations = dnf.history.NEVRAOperations()
Packit 6f3914
        operations.add('Reinstall', 'pepper-20-0.x86_64', 'pepper-20-0.x86_64',
Packit 6f3914
                       ['hole-1-1.x86_64'])
Packit 6f3914
Packit 6f3914
        sack = tests.support.mock_sack('main')
Packit 6f3914
        converter = dnf.history.TransactionConverter(sack)
Packit 6f3914
        actual = converter.convert(operations)
Packit 6f3914
Packit 6f3914
        expected = dnf.transaction.Transaction()
Packit 6f3914
        expected.add_reinstall(
Packit 6f3914
            next(iter(sack.query().available()._nevra('pepper-20-0.x86_64'))),
Packit 6f3914
            next(iter(sack.query().installed()._nevra('pepper-20-0.x86_64'))),
Packit 6f3914
            [next(iter(sack.query().installed()._nevra('hole-1-1.x86_64')))])
Packit 6f3914
        self.assert_transaction_equal(actual, expected)
Packit 6f3914
Packit 6f3914
    def test_upgrade(self):
Packit 6f3914
        """Test repeating with an upgrade."""
Packit 6f3914
        operations = dnf.history.NEVRAOperations()
Packit 6f3914
        operations.add('Update', 'pepper-20-1.x86_64', 'pepper-20-0.x86_64',
Packit 6f3914
                       ['hole-1-1.x86_64'])
Packit 6f3914
Packit 6f3914
        sack = tests.support.mock_sack('updates')
Packit 6f3914
        converter = dnf.history.TransactionConverter(sack)
Packit 6f3914
        actual = converter.convert(operations)
Packit 6f3914
Packit 6f3914
        expected = dnf.transaction.Transaction()
Packit 6f3914
        expected.add_upgrade(
Packit 6f3914
            next(iter(sack.query().available()._nevra('pepper-20-1.x86_64'))),
Packit 6f3914
            next(iter(sack.query().installed()._nevra('pepper-20-0.x86_64'))),
Packit 6f3914
            [next(iter(sack.query().installed()._nevra('hole-1-1.x86_64')))])
Packit 6f3914
        self.assert_transaction_equal(actual, expected)
Packit 6f3914
Packit 6f3914
    @staticmethod
Packit 6f3914
    def transaction2tuples(transaction):
Packit 6f3914
        """Convert a transaction to the iterable of tuples."""
Packit 6f3914
        for item in transaction:
Packit 6f3914
            yield (item.op_type, item.installed, item.erased, item.obsoleted,
Packit 6f3914
                   item.reason)
Packit 6f3914
'''