Files
bearhub/tests/gems/arch/test_aur_data_mapper.py
Sebastian Palencsar e95a23bc20 M3 namespace migration: complete Phase B, partial Phase D, docs and tests
- Native runtime under bearhub/ (api, commons, gems, view/util, view/core, view/qt)
- bauh/ compatibility re-export shims for legacy imports
- Phase D: canonical __version__/__app_name__ in bearhub/__init__.py; pyproject.toml
  and setup.py point at bearhub package
- Native gem loader at bearhub/view/core/gems.py
- Namespace compatibility tests (159 tests passing)
- Documentation: CHANGELOG [Unreleased], NAMESPACE_MIGRATION, ROADMAP, README,
  CONTRIBUTING, docs/qt6-migration.md, packaging/aur/README.md
2026-06-27 10:26:41 +02:00

198 lines
10 KiB
Python

import warnings
from unittest import TestCase
from unittest.mock import Mock
from bearhub.gems.arch.mapper import AURDataMapper
from bearhub.gems.arch.model import ArchPackage
class ArchDataMapperTest(TestCase):
@classmethod
def setUpClass(cls):
warnings.filterwarnings('ignore', category=DeprecationWarning)
def test_check_version_update(self):
self.assertTrue(AURDataMapper.check_version_update('1.0.0-1', '1.0.0-2'))
self.assertFalse(AURDataMapper.check_version_update('1.0.0-2', '1.0.0-1'))
self.assertTrue(AURDataMapper.check_version_update('1.0.0-5', '1.0.1-1'))
self.assertFalse(AURDataMapper.check_version_update('1.0.1-1', '1.0.0-1'))
self.assertTrue(AURDataMapper.check_version_update('1.0.5-5', '1.1.0-2'))
self.assertFalse(AURDataMapper.check_version_update('1.1.0-2', '1.0.5-5'))
self.assertTrue(AURDataMapper.check_version_update('1.5.0-2', '1.5.1-1'))
self.assertFalse(AURDataMapper.check_version_update('1.5.1-1', '1.5.0-2'))
self.assertTrue(AURDataMapper.check_version_update('1.5.1-1', '1.5.1-2'))
self.assertTrue(AURDataMapper.check_version_update('1.5.1-1', '2.0.0-1'))
self.assertFalse(AURDataMapper.check_version_update('2.0.0-1', '1.5.1-1'))
self.assertTrue(AURDataMapper.check_version_update('77.0.3865.90-1', '77.0.3865.120-1'))
self.assertTrue(AURDataMapper.check_version_update('77.0.3865.90-1', '77.0.3865.90-2'))
self.assertFalse(AURDataMapper.check_version_update('77.0.3865.900-1', '77.0.3865.120-1'))
self.assertTrue(AURDataMapper.check_version_update('77.0.3865.120-1', '77.0.3865.900-1'))
self.assertFalse(AURDataMapper.check_version_update('77.0.3865.120-1', '77.0.3865.90-1'))
self.assertTrue(AURDataMapper.check_version_update('77.0.3865.a-1', '77.0.3865.b-1'))
self.assertFalse(AURDataMapper.check_version_update('77.0.b.0-1', '77.0.a.1-1'))
self.assertFalse(AURDataMapper.check_version_update('r25.e22697c-1', 'r8.19fe011-1'))
self.assertTrue(AURDataMapper.check_version_update('0.9.7.RC-9', '0.9.7.RC-10'))
self.assertFalse(AURDataMapper.check_version_update('1.1.0.r11.caacf30-1', 'r65.4c7144a-1'))
self.assertFalse(AURDataMapper.check_version_update('1.2.16.r688.8b2c199-1', 'r2105.e91f0e9-3'))
def test_check_version_update__versions_with_epics(self):
self.assertTrue(AURDataMapper.check_version_update('1.2-1', '1:1.1-1'))
self.assertFalse(AURDataMapper.check_version_update('1:1.1-1', '1.2-1'))
self.assertTrue(AURDataMapper.check_version_update('1:1.2-1', '2:0.1-1'))
self.assertFalse(AURDataMapper.check_version_update('2:0.1-1', '1:1.2-1'))
self.assertTrue(AURDataMapper.check_version_update('10:1.1-1', '10:1.2-1'))
self.assertFalse(AURDataMapper.check_version_update('10:1.2-1', '10:1.2-1'))
self.assertTrue(AURDataMapper.check_version_update('9:1.2-1', '10:0.1-1'))
self.assertTrue(AURDataMapper.check_version_update('9:1.1.1.1-2', '10:0.0'))
self.assertFalse(AURDataMapper.check_version_update('10:0.0', '9:1.1.1.1-2'))
def test_check_update__pkg_no_last_modified_and_same_versions(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = None
pkg.version = '1.0.0'
pkg.latest_version = pkg.version
self.assertFalse(mapper.check_update(pkg=pkg, last_modified=1608143812))
def test_check_update__pkg_no_last_modified_and_latest_version_higher_than_version(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = None
pkg.version = '1.0.0'
pkg.latest_version = '1.1.0'
self.assertTrue(mapper.check_update(pkg=pkg, last_modified=1608143812))
def test_check_update__pkg_no_last_modified_and_no_install_date_and_version_higher_than_latest_version(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = None
pkg.install_date = None
pkg.version = '1.1.0'
pkg.latest_version = '1.0.0'
self.assertFalse(mapper.check_update(pkg=pkg, last_modified=1608143812))
def test_check_update__none_last_modified_and_latest_version_higher_than_version(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = 1608143812
pkg.version = '1.0.0'
pkg.latest_version = '1.1.0'
self.assertTrue(mapper.check_update(pkg=pkg, last_modified=None))
def test_check_update__none_last_modified_and_version_equal_latest_version(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = 1608143812
pkg.version = '1.0.0'
pkg.latest_version = pkg.version
self.assertFalse(mapper.check_update(pkg=pkg, last_modified=None))
def test_check_update__string_last_modified_and_latest_version_higher_than_version(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = 1608143812
pkg.version = '1.0.0'
pkg.latest_version = '1.1.0'
self.assertTrue(mapper.check_update(pkg=pkg, last_modified='abc'))
def test_check_update__pkg_last_modified_equal_last_modified_and_version_equal_latest_version(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = 1608143812
pkg.version = '1.0.0'
pkg.latest_version = pkg.version
self.assertFalse(mapper.check_update(pkg=pkg, last_modified=pkg.last_modified))
def test_check_update__pkg_last_modified_higher_than_last_modified_and_latest_version_higher_than_version(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = 1608143812
pkg.version = '1.0.0'
pkg.latest_version = '1.1.0'
self.assertTrue(mapper.check_update(pkg=pkg, last_modified=pkg.last_modified - 100))
def test_check_update__pkg_last_modified_less_than_last_modified_and_version_higher_than_latest_version(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = 1608143812
pkg.version = '2.0.0'
pkg.latest_version = '1.0.0'
# in this case, last modified is more relevant than the string version
self.assertTrue(mapper.check_update(pkg=pkg, last_modified=pkg.last_modified + 100))
def test_check_update__pkg_no_last_modified_and_install_date_less_than_last_modified_and_version_higher_than_latest(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = None
pkg.install_date = 1608143812
pkg.version = '3.0.0'
pkg.latest_version = '2.0.0'
# in this case, install_date will be considered instead of package's last_modified.
# even that 'version' is higher than 'latest_version', 'last_modified' is greater than 'install_date'
self.assertTrue(mapper.check_update(pkg=pkg, last_modified=pkg.install_date + 100))
def test_check_update__pkg_no_last_modified_and_install_date_higher_than_last_modified_and_version_equal_latest(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = None
pkg.install_date = 1608143812
pkg.version = '2.0.0'
pkg.latest_version = pkg.version
# in this case, install_date will be considered instead of package's last_modified.
# as 'install_date' is higher, only the string versions will be compared
self.assertFalse(mapper.check_update(pkg=pkg, last_modified=pkg.install_date - 100))
def test_check_update__pkg_no_last_modified_and_install_date_higher_than_last_modified_and_latest_higher(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = None
pkg.install_date = 1608143812
pkg.version = '1.0.0'
pkg.latest_version = '1.1.0'
# in this case, install_date will be considered instead of package's last_modified.
# as 'install_date' is higher, only the string versions will be compared
self.assertTrue(mapper.check_update(pkg=pkg, last_modified=pkg.install_date - 100))
def test_check_update__pkg_no_last_modified_and_install_date_and_no_last_modified_and_latest_higher(self):
mapper = AURDataMapper(i18n=Mock(), logger=Mock(), http_client=Mock())
pkg = ArchPackage(name='test')
pkg.last_modified = None
pkg.install_date = 1608143812
pkg.version = '1.0.0'
pkg.latest_version = '1.1.0'
# in this case, install_date will be considered instead of package's last_modified.
# as 'install_date' is higher, only the string versions will be compared
self.assertTrue(mapper.check_update(pkg=pkg, last_modified=None))
def test_check_version_update__one_version_contain_mixed_letters_and_symbols(self):
self.assertTrue(AURDataMapper.check_version_update('2.2.6', '2.3.3op2'))
self.assertFalse(AURDataMapper.check_version_update('2.3', '2.2.a'))
self.assertTrue(AURDataMapper.check_version_update('2.2.a.123', '2.3'))
def test_check_update__only_installed_version_with_release_number(self):
self.assertTrue(AURDataMapper.check_version_update('2.2.6-1', '2.3'))
self.assertTrue(AURDataMapper.check_version_update('2.2', '2.2-2'))
self.assertFalse(AURDataMapper.check_version_update('2.2', '2.2-1'))
def test_check_update__versions_with_epoch(self):
self.assertTrue(AURDataMapper.check_version_update('2.3', '1:2.1'))
self.assertFalse(AURDataMapper.check_version_update('1:1.0', '2.1'))