Source code for ramble.test.definitions.test_versions

# 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 deprecation
import pytest

from ramble.definitions.versions import ObjectVersion
from ramble.language import language_base


[docs] class TestObjectVersion: """Tests for the ObjectVersion class."""
[docs] def test_init(self): """Test that the ObjectVersion constructor works correctly.""" obj_ver = ObjectVersion( version_number="1.2.3", description="description", origin_type="origin_type", preferred=True, ) assert str(obj_ver.version) == "1.2.3" assert obj_ver.description == "description" assert obj_ver.origin_type == "origin_type" assert obj_ver.preferred is True
[docs] def test_init_invalid_version(self): """Test that the ObjectVersion constructor raises an error for invalid versions.""" with pytest.raises(language_base.DirectiveError): ObjectVersion(version_number="invalid_version")
[docs] def test_copy(self): """Test that the copy method works correctly.""" obj_ver = ObjectVersion( version_number="1.2.3", description="description", origin_type="origin_type", preferred=True, ) obj_ver_copy = obj_ver.copy() assert obj_ver is not obj_ver_copy assert obj_ver.version == obj_ver_copy.version assert obj_ver.description == obj_ver_copy.description assert obj_ver.origin_type == obj_ver_copy.origin_type assert obj_ver.preferred == obj_ver_copy.preferred
[docs] def test_str(self): """Test that the __str__ method works correctly.""" obj_ver = ObjectVersion(version_number="1.2.3") assert str(obj_ver) == "1.2.3"
[docs] @deprecation.fail_if_not_removed def test_version_properties(self): """Test that properties and deprecated getter methods work correctly.""" obj_ver = ObjectVersion(version_number="1.2.3") # Test direct version attribute assert str(obj_ver.version) == "1.2.3" # Test new version_num property assert obj_ver.version_num == "1.2.3" # Test lazy initialization of version_num obj_ver_lazy = ObjectVersion(version=obj_ver.version) assert obj_ver_lazy.version_num == "1.2.3" # Test deprecated get_version method triggers warning with pytest.deprecated_call(): assert str(obj_ver.get_version()) == "1.2.3" # Test deprecated get_version_num method triggers warning with pytest.deprecated_call(): assert obj_ver.get_version_num() == "1.2.3"
[docs] @pytest.mark.parametrize( "version,variant,expected", [ ("1.2.3", "foo@1.2.3", True), ("1.2.3", "foo@1.2.4", False), ("1.2.3", "foo@:1.2.3", True), ("1.2.3", "foo@:1.2.2", False), ("1.2.3", "foo@1.2.3:", True), ("1.2.3", "foo@1.2.4:", False), ("1.2.3", "foo@1.2.2:1.2.4", True), ("1.2.3", "foo@1.2.4:1.2.5", False), ], ) def test_satisfies(self, version, variant, expected): """Test that the satisfies method works correctly.""" obj_ver = ObjectVersion(version_number=version) assert obj_ver.satisfies(variant) is expected