From d784fd679b942ca202af58a78cc3f23b1beb6792 Mon Sep 17 00:00:00 2001 From: Chris Gregory Date: Sun, 29 Dec 2024 17:21:13 -0800 Subject: [PATCH] Fix tests --- src/myxa/manager.py | 11 ++++++++++- tests/test_manager.py | 23 ++++++++++++++--------- tests/test_printer.py | 10 ---------- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/myxa/manager.py b/src/myxa/manager.py index 48464a6..48b538b 100644 --- a/src/myxa/manager.py +++ b/src/myxa/manager.py @@ -86,13 +86,20 @@ def _find_namespace(self, name: str, index: Index) -> Namespace: msg = f"Package {name} not found in the provided index: {index.name}" raise UserError(msg) + def _get_package(self, name: str, version: Version, index: Index) -> Package: + namespace = self._find_namespace(name, index) + if not namespace.packages.get(version.to_str()): + msg = f"Package {name}~={version.to_str()} not found in the provided index: {index.name}" + raise UserError(msg) + return namespace.packages[version.to_str()] + def _get_latest_package(self, name: str, index: Index) -> Package: namespace = self._find_namespace(name, index) versions = [Version.from_str(s) for s in namespace.packages] latest_version = max(versions) return namespace.packages[latest_version.to_str()] - def add(self, package: Package, dep_name: str, index: Index, version: Optional[Version]) -> None: + def add(self, package: Package, dep_name: str, index: Index, version: Optional[Version] = None) -> None: self.printer.print_message(f"Adding dependency {dep_name} to package {package.info.name}...") if package.info.deps.get(dep_name) and (version is None or package.info.deps[dep_name].version == version): msg = f"{dep_name} is already a dependency of {package.info.name}" @@ -116,6 +123,8 @@ def remove(self, package: Package, dep_name: str) -> None: def lock(self, package: Package, index: Index) -> None: self.printer.print_message(f"Locking package {package.info.name}...") + for dep in package.info.deps.values(): + self._get_package(dep.name, dep.version, index) resolver = Resolver(index=index) package.lock = resolver.resolve(package) n_deps = len(package.lock.deps) diff --git a/tests/test_manager.py b/tests/test_manager.py index 953ec0a..8319fa8 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -44,14 +44,6 @@ def test_init_package_twice_raises_user_error( with pytest.raises(UserError, match="Package file already exists at"): manager.init("myxa", "Compatibility aware package manager", package_filepath) - def test_print_package_without_lock_raises_user_error( - self, - manager: Manager, - euler_package: Package, - ) -> None: - with pytest.raises(UserError, match="No lock found for package euler"): - manager.printer.print_package(euler_package, show_lock=True) - def test_publish_without_lock_raises_user_error( self, manager: Manager, @@ -176,7 +168,20 @@ def test_lock_dep_not_in_index_raises_user_error( primary_index: Index, ) -> None: interlet_package.info.deps["flatty"] = Dep(name="flatty", version=Version.from_str("2.0")) - with pytest.raises(UserError, match="Dependency flatty not found in index primary"): + with pytest.raises(UserError, match="Package flatty not found in the provided index: primary"): + manager.lock(interlet_package, primary_index) + + def test_lock_dep_version_not_in_index_raises_user_error( + self, + manager: Manager, + interlet_package: Package, + flatty_package: Package, + primary_index: Index, + ) -> None: + manager.lock(flatty_package, primary_index) + manager.publish(flatty_package, primary_index) + interlet_package.info.deps["flatty"] = Dep(name="flatty", version=Version.from_str("100.0")) + with pytest.raises(UserError, match="Package flatty~=100.0 not found in the provided index: primary"): manager.lock(interlet_package, primary_index) def test_unlock( diff --git a/tests/test_printer.py b/tests/test_printer.py index fbc692a..18b0d00 100644 --- a/tests/test_printer.py +++ b/tests/test_printer.py @@ -1,7 +1,6 @@ import pytest from rich.console import Console -from myxa.errors import UserError from myxa.models import Index, Package, PackageLock from myxa.printer import Printer @@ -24,15 +23,6 @@ def test_print_package( show_lock: bool, show_modules: bool, ) -> None: - if show_lock: - with pytest.raises(UserError, match="No lock found for package app"): - printer.print_package( - app_package, - show_deps=show_deps, - show_lock=show_lock, - show_modules=show_modules, - ) - app_package.lock = PackageLock(deps=app_package.info.deps) printer.print_package( app_package,