Blame tests/test_history.py

Packit Service 21c75c
# -*- coding: utf-8 -*-
Packit Service 21c75c
Packit Service 21c75c
# Copyright (C) 2012-2018 Red Hat, Inc.
Packit Service 21c75c
#
Packit Service 21c75c
# This copyrighted material is made available to anyone wishing to use,
Packit Service 21c75c
# modify, copy, or redistribute it subject to the terms and conditions of
Packit Service 21c75c
# the GNU General Public License v.2, or (at your option) any later version.
Packit Service 21c75c
# This program is distributed in the hope that it will be useful, but WITHOUT
Packit Service 21c75c
# ANY WARRANTY expressed or implied, including the implied warranties of
Packit Service 21c75c
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
Packit Service 21c75c
# Public License for more details.  You should have received a copy of the
Packit Service 21c75c
# GNU General Public License along with this program; if not, write to the
Packit Service 21c75c
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
Packit Service 21c75c
# 02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
Packit Service 21c75c
# source code or documentation are not subject to the GNU General Public
Packit Service 21c75c
# License and may only be used or replicated with the express permission of
Packit Service 21c75c
# Red Hat, Inc.
Packit Service 21c75c
#
Packit Service 21c75c
Packit Service 21c75c
from __future__ import absolute_import
Packit Service 21c75c
from __future__ import unicode_literals
Packit Service 21c75c
Packit Service 21c75c
import libdnf.transaction
Packit Service 21c75c
Packit Service 21c75c
import dnf.history
Packit Service 21c75c
Packit Service 21c75c
import tests.support
Packit Service 21c75c
from tests.support import mock
Packit Service 21c75c
Packit Service 21c75c
'''
Packit Service 21c75c
class NEVRAOperationsTest(tests.support.TestCase):
Packit Service 21c75c
    """Unit tests of dnf.history.NEVRAOperations."""
Packit Service 21c75c
Packit Service 21c75c
    def test_add_erase_installed(self):
Packit Service 21c75c
        """Test add with an erasure of NEVRA which was installed before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Install', 'tour-0:4.6-1.noarch', obsoleted_nevras=('lotus-0:3-16.x86_64',))
Packit Service 21c75c
        ops.add('Erase', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (('Erase', 'lotus-0:3-16.x86_64', None, set()),))
Packit Service 21c75c
Packit Service 21c75c
    def test_add_erase_removed(self):
Packit Service 21c75c
        """Test add with an erasure of NEVRA which was removed before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Erase', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertRaises(
Packit Service 21c75c
            ValueError,
Packit Service 21c75c
            ops.add, 'Erase', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
    def test_add_install_installed(self):
Packit Service 21c75c
        """Test add with two installs of the same NEVRA."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Install', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertRaises(
Packit Service 21c75c
            ValueError,
Packit Service 21c75c
            ops.add, 'Install', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
    def test_add_install_removed(self):
Packit Service 21c75c
        """Test add with an install of NEVRA which was removed before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Erase', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
        ops.add('Install', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (('Reinstall', 'tour-0:4.6-1.noarch', 'tour-0:4.6-1.noarch', set()),))
Packit Service 21c75c
Packit Service 21c75c
    def test_add_obsoleted_installed(self):
Packit Service 21c75c
        """Test add with an obsoleted NEVRA which was installed before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Install', 'lotus-0:3-16.x86_64')
Packit Service 21c75c
        ops.add('Install', 'tour-0:4.6-1.noarch', obsoleted_nevras=('lotus-0:3-16.x86_64',))
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (('Install', 'tour-0:4.6-1.noarch', None, set()),))
Packit Service 21c75c
Packit Service 21c75c
    def test_add_obsoleted_obsoleted(self):
Packit Service 21c75c
        """Test add with an obsoleted NEVRA which was obsoleted before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add(
Packit Service 21c75c
            'Install',
Packit Service 21c75c
            'tour-0:4.6-1.noarch',
Packit Service 21c75c
            obsoleted_nevras=('lotus-0:3-16.x86_64', 'mrkite-0:2-0.x86_64')
Packit Service 21c75c
        )
Packit Service 21c75c
        ops.add(
Packit Service 21c75c
            'Install',
Packit Service 21c75c
            'pepper-0:20-0.x86_64',
Packit Service 21c75c
            obsoleted_nevras=('lotus-0:3-16.x86_64', 'librita-0:1-1.x86_64')
Packit Service 21c75c
        )
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (
Packit Service 21c75c
                (
Packit Service 21c75c
                    'Install',
Packit Service 21c75c
                    'tour-0:4.6-1.noarch',
Packit Service 21c75c
                    None,
Packit Service 21c75c
                    {'lotus-0:3-16.x86_64', 'mrkite-0:2-0.x86_64'}
Packit Service 21c75c
                ),
Packit Service 21c75c
                (
Packit Service 21c75c
                    'Install',
Packit Service 21c75c
                    'pepper-0:20-0.x86_64',
Packit Service 21c75c
                    None,
Packit Service 21c75c
                    {'lotus-0:3-16.x86_64', 'librita-0:1-1.x86_64'}
Packit Service 21c75c
                )
Packit Service 21c75c
            )
Packit Service 21c75c
        )
Packit Service 21c75c
Packit Service 21c75c
    def test_add_obsoleted_removed(self):
Packit Service 21c75c
        """Test add with an obsoleted NEVRA which was removed before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Erase', 'lotus-0:3-16.x86_64')
Packit Service 21c75c
Packit Service 21c75c
        self.assertRaises(
Packit Service 21c75c
            ValueError,
Packit Service 21c75c
            ops.add, 'Install', 'tour-0:4.6-1.noarch', obsoleted_nevras=('lotus-0:3-16.x86_64',))
Packit Service 21c75c
Packit Service 21c75c
    def test_add_reinstall_installed(self):
Packit Service 21c75c
        """Test add with a reinstall of NEVRA which was installed before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Install', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
        ops.add('Reinstall', 'tour-0:4.6-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (('Install', 'tour-0:4.6-1.noarch', None, set()),))
Packit Service 21c75c
Packit Service 21c75c
    def test_add_replace_installed(self):
Packit Service 21c75c
        """Test add with a replacing NEVRA which was installed before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Install', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertRaises(
Packit Service 21c75c
            ValueError,
Packit Service 21c75c
            ops.add, 'Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
    def test_add_replace_opposite(self):
Packit Service 21c75c
        """Test add with a replacement which was done before, but swapped."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Downgrade', 'tour-0:4.6-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (('Reinstall', 'tour-0:4.8-1.noarch', 'tour-0:4.8-1.noarch', set()),))
Packit Service 21c75c
Packit Service 21c75c
    def test_add_replace_opposite_manual(self):
Packit Service 21c75c
        """Test add with a manual replacement which was done before, but swapped."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Erase', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
        ops.add('Install', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (('Reinstall', 'tour-0:4.8-1.noarch', 'tour-0:4.8-1.noarch', set()),))
Packit Service 21c75c
Packit Service 21c75c
    def test_add_replace_removed(self):
Packit Service 21c75c
        """Test add with a replacing NEVRA which was removed before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Erase', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (('Reinstall', 'tour-0:4.8-1.noarch', 'tour-0:4.8-1.noarch', set()),
Packit Service 21c75c
             ('Erase', 'tour-0:4.6-1.noarch', None, set())))
Packit Service 21c75c
Packit Service 21c75c
    def test_add_replaced_opposite(self):
Packit Service 21c75c
        """Test add with a replaced NEVRA which replaced a NEVRA before in the opposite direction."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Downgrade', 'tour-0:4.6-1.noarch', 'tour-0:4.9-1.noarch')
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (('Erase', 'tour-0:4.9-1.noarch', None, set()),
Packit Service 21c75c
             ('Install', 'tour-0:4.8-1.noarch', None, set())))
Packit Service 21c75c
Packit Service 21c75c
    def test_add_replaced_removed(self):
Packit Service 21c75c
        """Test add with a replaced NEVRA which was removed before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Erase', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertRaises(
Packit Service 21c75c
            ValueError,
Packit Service 21c75c
            ops.add, 'Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
    def test_add_replaced_reinstall(self):
Packit Service 21c75c
        """Test add with a replaced NEVRA which was reinstalled before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Reinstall', 'tour-0:4.6-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch', set()),))
Packit Service 21c75c
Packit Service 21c75c
    def test_add_replaced_replacement(self):
Packit Service 21c75c
        """Test add with a replaced NEVRA which replaced a NEVRA before."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertCountEqual(
Packit Service 21c75c
            ops,
Packit Service 21c75c
            (('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.6-1.noarch', set()),))
Packit Service 21c75c
Packit Service 21c75c
    def test_addition(self):
Packit Service 21c75c
        """Test addition of two instances."""
Packit Service 21c75c
        left_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        left_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
        right_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        right_ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
        expected_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        expected_ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        result_ops = left_ops + right_ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertEqual(result_ops, expected_ops)
Packit Service 21c75c
Packit Service 21c75c
    def test_addition_inplace(self):
Packit Service 21c75c
        """Test in-place addition of two instances."""
Packit Service 21c75c
        left_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        left_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
        right_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        right_ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
        expected_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        expected_ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        left_ops += right_ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertEqual(left_ops, expected_ops)
Packit Service 21c75c
Packit Service 21c75c
    def test_equality(self):
Packit Service 21c75c
        """Test equality of two equal instances."""
Packit Service 21c75c
        left_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        left_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
        right_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        right_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_equal = left_ops == right_ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertTrue(is_equal)
Packit Service 21c75c
Packit Service 21c75c
    def test_equality_differentcontent(self):
Packit Service 21c75c
        """Test equality of two instances with different contents."""
Packit Service 21c75c
        left_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        left_ops.add('Downgrade', 'tour-0:4.6-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
        right_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        right_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_equal = left_ops == right_ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertFalse(is_equal)
Packit Service 21c75c
Packit Service 21c75c
    def test_equality_differentlength(self):
Packit Service 21c75c
        """Test equality of two instances with different lengths."""
Packit Service 21c75c
        left_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        right_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        right_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_equal = left_ops == right_ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertFalse(is_equal)
Packit Service 21c75c
Packit Service 21c75c
    def test_equality_differenttype(self):
Packit Service 21c75c
        """Test equality of an instance and an object of a different type."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_equal = ops == 'tour-0:4.8-1.noarch'
Packit Service 21c75c
Packit Service 21c75c
        self.assertFalse(is_equal)
Packit Service 21c75c
Packit Service 21c75c
    def test_equality_identity(self):
Packit Service 21c75c
        """Test equality of the same instance."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_equal = ops == ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertTrue(is_equal)
Packit Service 21c75c
Packit Service 21c75c
    def test_inequality(self):
Packit Service 21c75c
        """Test inequality of two different instances."""
Packit Service 21c75c
        left_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        left_ops.add('Downgrade', 'tour-0:4.6-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
        right_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        right_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_inequal = left_ops != right_ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertTrue(is_inequal)
Packit Service 21c75c
Packit Service 21c75c
    def test_inequality_equal(self):
Packit Service 21c75c
        """Test inequality of two equal instances."""
Packit Service 21c75c
        left_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        left_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
        right_ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        right_ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_inequal = left_ops != right_ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertFalse(is_inequal)
Packit Service 21c75c
Packit Service 21c75c
    def test_iterator(self):
Packit Service 21c75c
        """Test iterator of an instance."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        iterator = iter(ops)
Packit Service 21c75c
Packit Service 21c75c
        self.assertEqual(
Packit Service 21c75c
            next(iterator),
Packit Service 21c75c
            ('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch', set()))
Packit Service 21c75c
        self.assertRaises(StopIteration, next, iterator)
Packit Service 21c75c
Packit Service 21c75c
    def test_length(self):
Packit Service 21c75c
        """Test length of an instance."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.8-1.noarch', 'tour-0:4.6-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        length = len(ops)
Packit Service 21c75c
Packit Service 21c75c
        self.assertEqual(length, 1)
Packit Service 21c75c
Packit Service 21c75c
    def test_membership(self):
Packit Service 21c75c
        """Test membership of a contained operation."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_in = ('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch', ()) in ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertTrue(is_in)
Packit Service 21c75c
Packit Service 21c75c
    def test_membership_differentnevra(self):
Packit Service 21c75c
        """Test membership of an operation with different (replacing) NEVRA."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_in = ('Update', 'pepper-0:20-0.x86_64', 'tour-0:4.8-1.noarch', ()) in ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertFalse(is_in)
Packit Service 21c75c
Packit Service 21c75c
    def test_membership_differentobsoleted(self):
Packit Service 21c75c
        """Test membership of an operation with different obsoleted NEVRAs."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
        op = (
Packit Service 21c75c
            'Update',
Packit Service 21c75c
            'tour-0:4.9-1.noarch',
Packit Service 21c75c
            'tour-0:4.8-1.noarch',
Packit Service 21c75c
            ('pepper-0:20-0.x86_64',)
Packit Service 21c75c
        )
Packit Service 21c75c
        self.assertFalse(op in ops)
Packit Service 21c75c
Packit Service 21c75c
    def test_membership_differentreplaced(self):
Packit Service 21c75c
        """Test membership of an operation with different replaced NEVRA."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_in = ('Update', 'tour-0:4.9-1.noarch', 'pepper-0:20-0.x86_64', ()) in ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertFalse(is_in)
Packit Service 21c75c
Packit Service 21c75c
    def test_membership_differentstate(self):
Packit Service 21c75c
        """Test membership of an operation with different state."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_in = ('Downgrade', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch', ()) in ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertFalse(is_in)
Packit Service 21c75c
Packit Service 21c75c
    def test_membership_differenttype(self):
Packit Service 21c75c
        """Test membership of an object of a different type."""
Packit Service 21c75c
        ops = dnf.history.NEVRAOperations()
Packit Service 21c75c
        ops.add('Update', 'tour-0:4.9-1.noarch', 'tour-0:4.8-1.noarch')
Packit Service 21c75c
Packit Service 21c75c
        is_in = 'tour-0:4.9-1.noarch' in ops
Packit Service 21c75c
Packit Service 21c75c
        self.assertFalse(is_in)
Packit Service 21c75c
Packit Service 21c75c
Packit Service 21c75c
class TransactionConverterTest(tests.support.TestCase):
Packit Service 21c75c
    """Unit tests of dnf.history.TransactionConverter."""
Packit Service 21c75c
Packit Service 21c75c
    def assert_transaction_equal(self, actual, expected):
Packit Service 21c75c
        """Assert that two transactions are equal."""
Packit Service 21c75c
        self.assertCountEqual(self.transaction2tuples(actual),
Packit Service 21c75c
                              self.transaction2tuples(expected))
Packit Service 21c75c
Packit Service 21c75c
    def test_find_available_na(self):
Packit Service 21c75c
        """Test finding with an unavailable NEVRA."""
Packit Service 21c75c
        sack = tests.support.mock_sack('main')
Packit Service 21c75c
        converter = dnf.history.TransactionConverter(sack)
Packit Service 21c75c
        with self.assertRaises(dnf.exceptions.PackagesNotAvailableError) as ctx:
Packit Service 21c75c
            converter._find_available('none-1-0.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertEqual(ctx.exception.pkg_spec, 'none-1-0.noarch')
Packit Service 21c75c
Packit Service 21c75c
    def test_find_installed_ni(self):
Packit Service 21c75c
        """Test finding with an unistalled NEVRA."""
Packit Service 21c75c
        sack = tests.support.mock_sack('main')
Packit Service 21c75c
        converter = dnf.history.TransactionConverter(sack)
Packit Service 21c75c
        with self.assertRaises(dnf.exceptions.PackagesNotInstalledError) as ctx:
Packit Service 21c75c
            converter._find_installed('none-1-0.noarch')
Packit Service 21c75c
Packit Service 21c75c
        self.assertEqual(ctx.exception.pkg_spec, 'none-1-0.noarch')
Packit Service 21c75c
Packit Service 21c75c
    def test_convert_downgrade(self):
Packit Service 21c75c
        """Test conversion with a downgrade."""
Packit Service 21c75c
        operations = dnf.history.NEVRAOperations()
Packit Service 21c75c
        operations.add('Downgrade', 'tour-4.6-1.noarch', 'tour-5-0.noarch',
Packit Service 21c75c
                       ['hole-1-1.x86_64'])
Packit Service 21c75c
Packit Service 21c75c
        sack = tests.support.mock_sack('main')
Packit Service 21c75c
        converter = dnf.history.TransactionConverter(sack)
Packit Service 21c75c
        actual = converter.convert(operations)
Packit Service 21c75c
Packit Service 21c75c
        expected = dnf.transaction.Transaction()
Packit Service 21c75c
        expected.add_downgrade(
Packit Service 21c75c
            next(iter(sack.query().available()._nevra('tour-4.6-1.noarch'))),
Packit Service 21c75c
            next(iter(sack.query().installed()._nevra('tour-5-0.noarch'))),
Packit Service 21c75c
            [next(iter(sack.query().installed()._nevra('hole-1-1.x86_64')))])
Packit Service 21c75c
        self.assert_transaction_equal(actual, expected)
Packit Service 21c75c
Packit Service 21c75c
    def test_convert_erase(self):
Packit Service 21c75c
        """Test conversion with an erasure."""
Packit Service 21c75c
        operations = dnf.history.NEVRAOperations()
Packit Service 21c75c
        operations.add('Erase', 'pepper-20-0.x86_64')
Packit Service 21c75c
Packit Service 21c75c
        sack = tests.support.mock_sack()
Packit Service 21c75c
        converter = dnf.history.TransactionConverter(sack)
Packit Service 21c75c
        actual = converter.convert(operations)
Packit Service 21c75c
Packit Service 21c75c
        expected = dnf.transaction.Transaction()
Packit Service 21c75c
        expected.add_erase(
Packit Service 21c75c
            next(iter(sack.query().installed()._nevra('pepper-20-0.x86_64'))))
Packit Service 21c75c
        self.assert_transaction_equal(actual, expected)
Packit Service 21c75c
Packit Service 21c75c
    def test_convert_install(self):
Packit Service 21c75c
        """Test conversion with an installation."""
Packit Service 21c75c
        operations = dnf.history.NEVRAOperations()
Packit Service 21c75c
        operations.add('Install', 'lotus-3-16.x86_64',
Packit Service 21c75c
                       obsoleted_nevras=['hole-1-1.x86_64'])
Packit Service 21c75c
Packit Service 21c75c
        sack = tests.support.mock_sack('main')
Packit Service 21c75c
        converter = dnf.history.TransactionConverter(sack)
Packit Service 21c75c
        actual = converter.convert(operations, libdnf.transaction.TransactionItemReason_USER)
Packit Service 21c75c
Packit Service 21c75c
        expected = dnf.transaction.Transaction()
Packit Service 21c75c
        expected.add_install(
Packit Service 21c75c
            next(iter(sack.query().available()._nevra('lotus-3-16.x86_64'))),
Packit Service 21c75c
            [next(iter(sack.query().installed()._nevra('hole-1-1.x86_64')))],
Packit Service 21c75c
            libdnf.transaction.TransactionItemReason_USER)
Packit Service 21c75c
        self.assert_transaction_equal(actual, expected)
Packit Service 21c75c
Packit Service 21c75c
    def test_convert_reinstall(self):
Packit Service 21c75c
        """Test conversion with a reinstallation."""
Packit Service 21c75c
        operations = dnf.history.NEVRAOperations()
Packit Service 21c75c
        operations.add('Reinstall', 'pepper-20-0.x86_64', 'pepper-20-0.x86_64',
Packit Service 21c75c
                       ['hole-1-1.x86_64'])
Packit Service 21c75c
Packit Service 21c75c
        sack = tests.support.mock_sack('main')
Packit Service 21c75c
        converter = dnf.history.TransactionConverter(sack)
Packit Service 21c75c
        actual = converter.convert(operations)
Packit Service 21c75c
Packit Service 21c75c
        expected = dnf.transaction.Transaction()
Packit Service 21c75c
        expected.add_reinstall(
Packit Service 21c75c
            next(iter(sack.query().available()._nevra('pepper-20-0.x86_64'))),
Packit Service 21c75c
            next(iter(sack.query().installed()._nevra('pepper-20-0.x86_64'))),
Packit Service 21c75c
            [next(iter(sack.query().installed()._nevra('hole-1-1.x86_64')))])
Packit Service 21c75c
        self.assert_transaction_equal(actual, expected)
Packit Service 21c75c
Packit Service 21c75c
    def test_upgrade(self):
Packit Service 21c75c
        """Test repeating with an upgrade."""
Packit Service 21c75c
        operations = dnf.history.NEVRAOperations()
Packit Service 21c75c
        operations.add('Update', 'pepper-20-1.x86_64', 'pepper-20-0.x86_64',
Packit Service 21c75c
                       ['hole-1-1.x86_64'])
Packit Service 21c75c
Packit Service 21c75c
        sack = tests.support.mock_sack('updates')
Packit Service 21c75c
        converter = dnf.history.TransactionConverter(sack)
Packit Service 21c75c
        actual = converter.convert(operations)
Packit Service 21c75c
Packit Service 21c75c
        expected = dnf.transaction.Transaction()
Packit Service 21c75c
        expected.add_upgrade(
Packit Service 21c75c
            next(iter(sack.query().available()._nevra('pepper-20-1.x86_64'))),
Packit Service 21c75c
            next(iter(sack.query().installed()._nevra('pepper-20-0.x86_64'))),
Packit Service 21c75c
            [next(iter(sack.query().installed()._nevra('hole-1-1.x86_64')))])
Packit Service 21c75c
        self.assert_transaction_equal(actual, expected)
Packit Service 21c75c
Packit Service 21c75c
    @staticmethod
Packit Service 21c75c
    def transaction2tuples(transaction):
Packit Service 21c75c
        """Convert a transaction to the iterable of tuples."""
Packit Service 21c75c
        for item in transaction:
Packit Service 21c75c
            yield (item.op_type, item.installed, item.erased, item.obsoleted,
Packit Service 21c75c
                   item.reason)
Packit Service 21c75c
'''