1414
1515import sys
1616import warnings
17- from unittest .mock import patch , MagicMock
17+ from unittest .mock import patch
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 (
35+ "importlib.metadata.version" , return_value = "1.2.3"
36+ )
37+ else :
38+ # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove
39+ # `importlib_metadata` once we drop support for Python 3.7
40+ mock_importlib = mocker .patch (
41+ "importlib_metadata.version" , return_value = "1.2.3"
42+ )
43+ expected = DependencyVersion (_parse_version_to_tuple ("1.2.3" ), "1.2.3" )
3944 assert get_dependency_version ("some-package" ) == expected
40- mock_version .assert_called_once_with ("some-package" )
41-
42- # Test package not found
43- mock_version .side_effect = ImportError
44- assert get_dependency_version ("not-a-package" ) == DependencyVersion (None , "--" )
4545
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" )
46+ mock_importlib .assert_called_once_with ("some-package" )
5947
6048 # Test package not found
61- mock_get_distribution .side_effect = (
62- Exception # pkg_resources has its own exception types
63- )
49+ mock_importlib .side_effect = ImportError
6450 assert get_dependency_version ("not-a-package" ) == DependencyVersion (None , "--" )
6551
6652
@@ -74,7 +60,9 @@ def test_warn_deprecation_for_versions_less_than(mock_get_version, mock_get_pack
7460 ("my-package (my.package)" , "my-package" ),
7561 ]
7662
77- mock_get_version .return_value = DependencyVersion (parse_version ("1.0.0" ), "1.0.0" )
63+ mock_get_version .return_value = DependencyVersion (
64+ _parse_version_to_tuple ("1.0.0" ), "1.0.0"
65+ )
7866 with pytest .warns (FutureWarning ) as record :
7967 warn_deprecation_for_versions_less_than ("my.package" , "dep.package" , "2.0.0" )
8068 assert len (record ) == 1
@@ -90,14 +78,14 @@ def test_warn_deprecation_for_versions_less_than(mock_get_version, mock_get_pack
9078 # Case 2: Installed version is equal to required, should not warn.
9179 mock_get_packages .reset_mock ()
9280 mock_get_version .return_value = DependencyVersion (
93- parse_version ("2.0.0" ), "2.0.0"
81+ _parse_version_to_tuple ("2.0.0" ), "2.0.0"
9482 )
9583 warn_deprecation_for_versions_less_than ("my.package" , "dep.package" , "2.0.0" )
9684
9785 # Case 3: Installed version is greater than required, should not warn.
9886 mock_get_packages .reset_mock ()
9987 mock_get_version .return_value = DependencyVersion (
100- parse_version ("3.0.0" ), "3.0.0"
88+ _parse_version_to_tuple ("3.0.0" ), "3.0.0"
10189 )
10290 warn_deprecation_for_versions_less_than ("my.package" , "dep.package" , "2.0.0" )
10391
@@ -115,7 +103,9 @@ def test_warn_deprecation_for_versions_less_than(mock_get_version, mock_get_pack
115103 ("dep-package (dep.package)" , "dep-package" ),
116104 ("my-package (my.package)" , "my-package" ),
117105 ]
118- mock_get_version .return_value = DependencyVersion (parse_version ("1.0.0" ), "1.0.0" )
106+ mock_get_version .return_value = DependencyVersion (
107+ _parse_version_to_tuple ("1.0.0" ), "1.0.0"
108+ )
119109 template = "Custom warning for {dependency_package} used by {consumer_package}."
120110 with pytest .warns (FutureWarning ) as record :
121111 warn_deprecation_for_versions_less_than (
0 commit comments