# Copyright 2022-2026 The Ramble Authors
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.
import pytest
import ramble.repository
[docs]
def test_repo_getapp(mutable_mock_apps_repo):
mutable_mock_apps_repo.get("basic")
mutable_mock_apps_repo.get("builtin.mock.basic")
[docs]
def test_repo_multi_getapp(mutable_mock_apps_repo, extra_repo):
mutable_mock_apps_repo.put_first(extra_repo[0])
mutable_mock_apps_repo.get("basic")
mutable_mock_apps_repo.get("builtin.mock.basic")
[docs]
def test_repo_multi_getappclass(mutable_mock_apps_repo, extra_repo):
mutable_mock_apps_repo.put_first(extra_repo[0])
mutable_mock_apps_repo.get_obj_class("basic")
mutable_mock_apps_repo.get_obj_class("builtin.mock.basic")
[docs]
def test_repo_app_with_unknown_namespace(mutable_mock_apps_repo):
with pytest.raises(ramble.repository.UnknownNamespaceError):
mutable_mock_apps_repo.get("unknown.a")
[docs]
def test_repo_unknown_app(mutable_mock_apps_repo):
with pytest.raises(ramble.repository.UnknownObjectError):
mutable_mock_apps_repo.get("builtin.mock.nonexistentapplication")
[docs]
@pytest.mark.parametrize(
"obj_name,obj_type,expected",
[
(
"openfoam-org",
ramble.repository.ObjectTypes.applications,
[
("applications", "openfoam-org/application.py", "builtin"),
("base_applications", "openfoam/base_application.py", "builtin"),
],
),
(
"lscpu",
ramble.repository.ObjectTypes.modifiers,
[
("modifiers", "lscpu/modifier.py", "builtin"),
],
),
(
"spack",
ramble.repository.ObjectTypes.package_managers,
[
("package_managers", "spack/package_manager.py", "builtin"),
("package_managers", "spack-lightweight/package_manager.py", "builtin"),
],
),
],
)
def test_list_object_files(
obj_name,
obj_type,
expected,
mutable_apps_repo_path,
mutable_mods_repo_path,
mutable_pkg_mans_repo_path,
):
if obj_type == ramble.repository.ObjectTypes.applications:
repo = mutable_apps_repo_path
elif obj_type == ramble.repository.ObjectTypes.modifiers:
repo = mutable_mods_repo_path
else:
repo = mutable_pkg_mans_repo_path
obj_inst = repo.get(obj_name)
actual = ramble.repository.list_object_files(obj_inst, obj_type)
assert len(expected) == len(actual)
for i in range(len(expected)):
assert len(expected[i]) == len(actual[i])
assert expected[i][0] == actual[i][0]
assert actual[i][1].endswith(expected[i][1])
assert expected[i][2] == actual[i][2]