1717from unittest .mock import patch , MagicMock
1818
1919import pytest
20- from packaging .version import parse as parse_version
2120
2221from google .api_core ._python_package_support import (
22+ _parse_version_to_tuple ,
2323 get_dependency_version ,
2424 warn_deprecation_for_versions_less_than ,
2525 check_dependency_versions ,
2828)
2929
3030
31- # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove
32- # this mark once we drop support for Python 3.7
33- @pytest .mark .skipif (sys .version_info < (3 , 8 ), reason = "requires python3.8 or higher" )
34- @patch ("importlib.metadata.version" )
35- def test_get_dependency_version_py38_plus (mock_version ):
36- """Test get_dependency_version on Python 3.8+."""
37- mock_version .return_value = "1.2.3"
38- expected = DependencyVersion (parse_version ("1.2.3" ), "1.2.3" )
31+ def test_get_dependency_version (mocker ):
32+ """Test get_dependency_version."""
33+ if sys .version_info >= (3 , 8 ):
34+ mock_importlib = mocker .patch ("importlib.metadata.version" , return_value = "1.2.3" )
35+ else :
36+ # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove
37+ # `importlib_metadata` once we drop support for Python 3.7
38+ mock_importlib = mocker .patch ("importlib_metadata.version" , return_value = "1.2.3" )
39+ expected = DependencyVersion (_parse_version_to_tuple ("1.2.3" ), "1.2.3" )
3940 assert get_dependency_version ("some-package" ) == expected
40- mock_version .assert_called_once_with ("some-package" )
4141
42- # Test package not found
43- mock_version .side_effect = ImportError
44- assert get_dependency_version ("not-a-package" ) == DependencyVersion (None , "--" )
45-
46-
47- # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove
48- # this test function once we drop support for Python 3.7
49- @pytest .mark .skipif (sys .version_info >= (3 , 8 ), reason = "requires python3.7" )
50- @patch ("pkg_resources.get_distribution" )
51- def test_get_dependency_version_py37 (mock_get_distribution ):
52- """Test get_dependency_version on Python 3.7."""
53- mock_dist = MagicMock ()
54- mock_dist .version = "4.5.6"
55- mock_get_distribution .return_value = mock_dist
56- expected = DependencyVersion (parse_version ("4.5.6" ), "4.5.6" )
57- assert get_dependency_version ("another-package" ) == expected
58- mock_get_distribution .assert_called_once_with ("another-package" )
42+ mock_importlib .assert_called_once_with ("some-package" )
5943
6044 # Test package not found
61- mock_get_distribution .side_effect = (
62- Exception # pkg_resources has its own exception types
63- )
45+ mock_importlib .side_effect = ImportError
6446 assert get_dependency_version ("not-a-package" ) == DependencyVersion (None , "--" )
6547
6648
@@ -74,7 +56,9 @@ def test_warn_deprecation_for_versions_less_than(mock_get_version, mock_get_pack
7456 ("my-package (my.package)" , "my-package" ),
7557 ]
7658
77- mock_get_version .return_value = DependencyVersion (parse_version ("1.0.0" ), "1.0.0" )
59+ mock_get_version .return_value = DependencyVersion (
60+ _parse_version_to_tuple ("1.0.0" ), "1.0.0"
61+ )
7862 with pytest .warns (FutureWarning ) as record :
7963 warn_deprecation_for_versions_less_than ("my.package" , "dep.package" , "2.0.0" )
8064 assert len (record ) == 1
@@ -90,14 +74,14 @@ def test_warn_deprecation_for_versions_less_than(mock_get_version, mock_get_pack
9074 # Case 2: Installed version is equal to required, should not warn.
9175 mock_get_packages .reset_mock ()
9276 mock_get_version .return_value = DependencyVersion (
93- parse_version ("2.0.0" ), "2.0.0"
77+ _parse_version_to_tuple ("2.0.0" ), "2.0.0"
9478 )
9579 warn_deprecation_for_versions_less_than ("my.package" , "dep.package" , "2.0.0" )
9680
9781 # Case 3: Installed version is greater than required, should not warn.
9882 mock_get_packages .reset_mock ()
9983 mock_get_version .return_value = DependencyVersion (
100- parse_version ("3.0.0" ), "3.0.0"
84+ _parse_version_to_tuple ("3.0.0" ), "3.0.0"
10185 )
10286 warn_deprecation_for_versions_less_than ("my.package" , "dep.package" , "2.0.0" )
10387
@@ -115,7 +99,9 @@ def test_warn_deprecation_for_versions_less_than(mock_get_version, mock_get_pack
11599 ("dep-package (dep.package)" , "dep-package" ),
116100 ("my-package (my.package)" , "my-package" ),
117101 ]
118- mock_get_version .return_value = DependencyVersion (parse_version ("1.0.0" ), "1.0.0" )
102+ mock_get_version .return_value = DependencyVersion (
103+ _parse_version_to_tuple ("1.0.0" ), "1.0.0"
104+ )
119105 template = "Custom warning for {dependency_package} used by {consumer_package}."
120106 with pytest .warns (FutureWarning ) as record :
121107 warn_deprecation_for_versions_less_than (
0 commit comments