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+ @pytest .mark .parametrize ("version_string_to_test" , ["1.2.3" , "1.2.3b1" ])
32+ def test_get_dependency_version (mocker , version_string_to_test ):
33+ """Test get_dependency_version."""
34+ if sys .version_info >= (3 , 8 ):
35+ mock_importlib = mocker .patch (
36+ "importlib.metadata.version" , return_value = version_string_to_test
37+ )
38+ else :
39+ # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove
40+ # `importlib_metadata` once we drop support for Python 3.7
41+ mock_importlib = mocker .patch (
42+ "importlib_metadata.version" , return_value = version_string_to_test
43+ )
44+ expected = DependencyVersion (
45+ parse_version_to_tuple (version_string_to_test ), version_string_to_test
46+ )
3947 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 , "--" )
45-
4648
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" )
49+ mock_importlib .assert_called_once_with ("some-package" )
5950
6051 # Test package not found
61- mock_get_distribution .side_effect = (
62- Exception # pkg_resources has its own exception types
63- )
52+ mock_importlib .side_effect = ImportError
6453 assert get_dependency_version ("not-a-package" ) == DependencyVersion (None , "--" )
6554
6655
@@ -74,7 +63,9 @@ def test_warn_deprecation_for_versions_less_than(mock_get_version, mock_get_pack
7463 ("my-package (my.package)" , "my-package" ),
7564 ]
7665
77- mock_get_version .return_value = DependencyVersion (parse_version ("1.0.0" ), "1.0.0" )
66+ mock_get_version .return_value = DependencyVersion (
67+ parse_version_to_tuple ("1.0.0" ), "1.0.0"
68+ )
7869 with pytest .warns (FutureWarning ) as record :
7970 warn_deprecation_for_versions_less_than ("my.package" , "dep.package" , "2.0.0" )
8071 assert len (record ) == 1
@@ -90,14 +81,14 @@ def test_warn_deprecation_for_versions_less_than(mock_get_version, mock_get_pack
9081 # Case 2: Installed version is equal to required, should not warn.
9182 mock_get_packages .reset_mock ()
9283 mock_get_version .return_value = DependencyVersion (
93- parse_version ("2.0.0" ), "2.0.0"
84+ parse_version_to_tuple ("2.0.0" ), "2.0.0"
9485 )
9586 warn_deprecation_for_versions_less_than ("my.package" , "dep.package" , "2.0.0" )
9687
9788 # Case 3: Installed version is greater than required, should not warn.
9889 mock_get_packages .reset_mock ()
9990 mock_get_version .return_value = DependencyVersion (
100- parse_version ("3.0.0" ), "3.0.0"
91+ parse_version_to_tuple ("3.0.0" ), "3.0.0"
10192 )
10293 warn_deprecation_for_versions_less_than ("my.package" , "dep.package" , "2.0.0" )
10394
@@ -115,7 +106,9 @@ def test_warn_deprecation_for_versions_less_than(mock_get_version, mock_get_pack
115106 ("dep-package (dep.package)" , "dep-package" ),
116107 ("my-package (my.package)" , "my-package" ),
117108 ]
118- mock_get_version .return_value = DependencyVersion (parse_version ("1.0.0" ), "1.0.0" )
109+ mock_get_version .return_value = DependencyVersion (
110+ parse_version_to_tuple ("1.0.0" ), "1.0.0"
111+ )
119112 template = "Custom warning for {dependency_package} used by {consumer_package}."
120113 with pytest .warns (FutureWarning ) as record :
121114 warn_deprecation_for_versions_less_than (
0 commit comments