| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- from unittest.mock import Mock, PropertyMock
- import pytest
- from metadata_manager import (
- DEFAULT_WHITELISTED_FORK_REMOTES,
- ForkRemoteSpec,
- ManifestJSON,
- ManifestJsonVersionsProvider,
- RemoteInfo,
- VehiclesManager,
- VersionInfo,
- VersionsManager,
- )
- @pytest.fixture
- def vehicles_manager():
- existing = VehiclesManager.get_singleton()
- if existing is not None:
- return existing
- return VehiclesManager()
- @pytest.fixture
- def versions_manager(vehicles_manager, tmp_path):
- VersionsManager._VersionsManager__singleton = None
- repo = Mock()
- manager = VersionsManager(
- ap_repo=repo,
- remotes_json_path=str(tmp_path / "missing-remotes.json"),
- providers=[],
- )
- yield manager
- VersionsManager._VersionsManager__singleton = None
- class TestManifestJsonVersionsProvider:
- def test_is_available_when_manifest_is_available(self, vehicles_manager):
- manifest_json = Mock(spec=ManifestJSON)
- type(manifest_json).is_available = PropertyMock(return_value=True)
- provider = ManifestJsonVersionsProvider(manifest_json)
- assert provider.is_available is True
- def test_is_unavailable_when_manifest_is_unavailable(self, vehicles_manager):
- manifest_json = Mock(spec=ManifestJSON)
- type(manifest_json).is_available = PropertyMock(return_value=False)
- provider = ManifestJsonVersionsProvider(manifest_json)
- assert provider.is_available is False
- assert provider.get_versions("copter") == []
- assert provider.get_remotes() == []
- def test_refresh_delegates_to_manifest_json(self, vehicles_manager):
- manifest_json = Mock(spec=ManifestJSON)
- provider = ManifestJsonVersionsProvider(manifest_json)
- provider.refresh()
- manifest_json.refresh.assert_called_once()
- class TestVersionsManagerDedup:
- def _make_version(self, release_type: str, version_number: str, commit_ref: str):
- remote = RemoteInfo("ardupilot", "https://github.com/ardupilot/ardupilot.git")
- return VersionInfo(
- remote_info=remote,
- commit_ref=commit_ref,
- release_type=release_type,
- version_number=version_number,
- ap_build_artifacts_url=None,
- )
- def test_stable_wins_when_beta_is_seen_first(self, versions_manager):
- commit = "03c12698df56c600f5b3d39f8b17d414ea6d2a48"
- beta = self._make_version("beta", "4.5.0", commit)
- stable = self._make_version("stable", "4.5.0", commit)
- beta_provider = Mock()
- beta_provider.get_versions.return_value = [beta]
- stable_provider = Mock()
- stable_provider.get_versions.return_value = [stable]
- versions_manager._providers = [beta_provider, stable_provider]
- versions = versions_manager.get_versions_for_vehicle("sub")
- assert len(versions) == 1
- assert versions[0].release_type == "stable"
- assert versions[0].version_number == "4.5.0"
- def test_stable_wins_when_stable_is_seen_first(self, versions_manager):
- commit = "03c12698df56c600f5b3d39f8b17d414ea6d2a48"
- beta = self._make_version("beta", "4.5.0", commit)
- stable = self._make_version("stable", "4.5.0", commit)
- stable_provider = Mock()
- stable_provider.get_versions.return_value = [stable]
- beta_provider = Mock()
- beta_provider.get_versions.return_value = [beta]
- versions_manager._providers = [stable_provider, beta_provider]
- versions = versions_manager.get_versions_for_vehicle("sub")
- assert len(versions) == 1
- assert versions[0].release_type == "stable"
- class TestForkRemoteSpec:
- def test_default_rmackay9_uses_custom_repo_name(self):
- rmackay9 = next(
- spec for spec in DEFAULT_WHITELISTED_FORK_REMOTES if spec.owner == "rmackay9"
- )
- assert rmackay9.repo == "rmackay9-ardupilot"
- assert rmackay9.github_repo == "rmackay9/rmackay9-ardupilot"
- assert rmackay9.url == "https://github.com/rmackay9/rmackay9-ardupilot.git"
- def test_fork_remote_spec_url(self):
- spec = ForkRemoteSpec(owner="example", repo="my-ardupilot-fork")
- assert spec.github_repo == "example/my-ardupilot-fork"
- assert spec.url == "https://github.com/example/my-ardupilot-fork.git"
|