Blame tests/test_queries.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 dnf.query
Packit 6f3914
import dnf.subject
Packit 6f3914
Packit 6f3914
import tests.support
Packit 6f3914
Packit 6f3914
Packit 6f3914
class QueriesTest(tests.support.TestCase):
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        self.sack = tests.support.mock_sack('main', 'updates')
Packit 6f3914
Packit 6f3914
    def test_duplicities(self):
Packit 6f3914
        pepper = self.sack.query().installed().filter(name="pepper")
Packit 6f3914
        # make sure 'pepper' package exists:
Packit 6f3914
        self.assertEqual(len(pepper), 1)
Packit 6f3914
        # we shouldn't see it more than once with a tricky query below:
Packit 6f3914
        res = self.sack.query().installed().filter(name=["pep*", "*per"])
Packit 6f3914
        res_set = set(res)
Packit 6f3914
        self.assertEqual(len(res), len(res_set))
Packit 6f3914
Packit 6f3914
    def test_by_file(self):
Packit 6f3914
        # check sanity first:
Packit 6f3914
        q = self.sack.query().filter(file__eq="/raised/smile")
Packit 6f3914
        self.assertEqual(len(q.run()), 1)
Packit 6f3914
        q[0]
Packit 6f3914
Packit 6f3914
    def test_by_repo(self):
Packit 6f3914
        pkgs = self.sack.query().filter(reponame__eq="updates")
Packit 6f3914
        self.assertEqual(len(pkgs), tests.support.UPDATES_NSOLVABLES)
Packit 6f3914
        pkgs = self.sack.query().filter(reponame__eq="main")
Packit 6f3914
        self.assertEqual(len(pkgs), tests.support.MAIN_NSOLVABLES)
Packit 6f3914
Packit 6f3914
    def test_duplicated(self):
Packit 6f3914
        pkgs = self.sack.query().duplicated()
Packit 6f3914
        self.assertEqual(len(pkgs), 3)
Packit 6f3914
Packit 6f3914
    def test_extras(self):
Packit 6f3914
        pkgs = self.sack.query().extras()
Packit 6f3914
        self.assertEqual(len(pkgs), tests.support.TOTAL_RPMDB_COUNT - 4)
Packit 6f3914
Packit 6f3914
    def test_installed_exact(self):
Packit 6f3914
        pkgs = self.sack.query().installed()._nevra("tour-4.9-0.noarch")
Packit 6f3914
        self.assertEqual(len(pkgs), 0)
Packit 6f3914
        pkgs = self.sack.query().installed()._nevra("tour-5-0.x86_64")
Packit 6f3914
        self.assertEqual(len(pkgs), 0)
Packit 6f3914
        pkgs = self.sack.query().installed()._nevra("tour-5-0.noarch")
Packit 6f3914
        self.assertEqual(len(pkgs), 1)
Packit 6f3914
Packit 6f3914
    def test_latest(self):
Packit 6f3914
        tours = self.sack.query().filter(name="tour")
Packit 6f3914
        all_tours = sorted(tours.run(), reverse=True)
Packit 6f3914
        head2 = all_tours[0:2]
Packit 6f3914
        tail2 = all_tours[2:]
Packit 6f3914
        pkgs = tours.latest(2).run()
Packit 6f3914
        self.assertEqual(pkgs, head2)
Packit 6f3914
        pkgs = tours.latest(-2).run()
Packit 6f3914
        self.assertEqual(pkgs, tail2)
Packit 6f3914
Packit 6f3914
Packit 6f3914
class SubjectTest(tests.support.TestCase):
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        self.sack = tests.support.mock_sack('main', 'updates')
Packit 6f3914
Packit 6f3914
    def test_wrong_name(self):
Packit 6f3914
        subj = dnf.subject.Subject("call-his-wife-in")
Packit 6f3914
        self.assertLength(subj.get_best_query(self.sack), 0)
Packit 6f3914
Packit 6f3914
    def test_query_composing(self):
Packit 6f3914
        q = dnf.subject.Subject("librita").get_best_query(self.sack)
Packit 6f3914
        q = q.filter(arch="i686")
Packit 6f3914
        self.assertEqual(str(q[0]), "librita-1-1.i686")
Packit 6f3914
Packit 6f3914
    def test_icase_name(self):
Packit 6f3914
        subj = dnf.subject.Subject("PEpper", ignore_case=True)
Packit 6f3914
        q = subj.get_best_query(self.sack)
Packit 6f3914
        self.assertLength(q, 4)
Packit 6f3914
Packit 6f3914
    def test_get_best_selector(self):
Packit 6f3914
        s = dnf.subject.Subject("pepper-20-0.x86_64").get_best_selector(self.sack)
Packit 6f3914
        self.assertIsNotNone(s)
Packit 6f3914
Packit 6f3914
    def test_get_best_selector_for_provides_glob(self):
Packit 6f3914
        s = dnf.subject.Subject("*otus.so*").get_best_selector(self.sack)
Packit 6f3914
        self.assertIsNotNone(s)
Packit 6f3914
Packit 6f3914
    def test_best_selector_for_version(self):
Packit 6f3914
        sltr = dnf.subject.Subject("hole-2").get_best_selector(self.sack)
Packit 6f3914
        self.assertCountEqual(map(str, sltr.matches()),
Packit 6f3914
                              ['hole-2-1.x86_64', 'hole-2-1.i686'])
Packit 6f3914
Packit 6f3914
    def test_with_confusing_dashes(self):
Packit 6f3914
        sltr = dnf.subject.Subject("mrkite-k-h").get_best_selector(self.sack)
Packit 6f3914
        self.assertLength(sltr.matches(), 1)
Packit 6f3914
        sltr = dnf.subject.Subject("mrkite-k-h.x86_64").get_best_selector(self.sack)
Packit 6f3914
        self.assertLength(sltr.matches(), 1)
Packit 6f3914
Packit 6f3914
Packit 6f3914
class DictsTest(tests.support.TestCase):
Packit 6f3914
Packit 6f3914
    def setUp(self):
Packit 6f3914
        self.sack = tests.support.mock_sack('main', 'updates')
Packit 6f3914
Packit 6f3914
    def test_per_nevra_dict(self):
Packit 6f3914
        pkgs = self.sack.query().filter(name="lotus")
Packit 6f3914
        dct = dnf.query._per_nevra_dict(pkgs)
Packit 6f3914
        self.assertCountEqual(dct.keys(),
Packit 6f3914
                              ["lotus-3-16.x86_64", "lotus-3-16.i686"])
Packit 6f3914
        self.assertCountEqual(dct.values(), pkgs)