Skip to content

Commit 09f0490

Browse files
committed
test: add comprehensive unit tests for PandasGBQVersions to fix coverage
1 parent d91d822 commit 09f0490

1 file changed

Lines changed: 100 additions & 2 deletions

File tree

packages/google-cloud-bigquery/tests/unit/test__versions_helpers.py

Lines changed: 100 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@
3131
except ImportError:
3232
pandas = None
3333

34-
from google.cloud.bigquery import _versions_helpers
35-
from google.cloud.bigquery import exceptions
34+
from google.cloud.bigquery import _versions_helpers, exceptions
3635

3736

3837
@pytest.mark.skipif(pyarrow is None, reason="pyarrow is not installed")
@@ -246,3 +245,102 @@ def test_installed_pandas_version_returns_parsed_version():
246245
assert version.major == 1
247246
assert version.minor == 1
248247
assert version.micro == 0
248+
249+
250+
def test_installed_pandas_gbq_version_returns_cached():
251+
versions = _versions_helpers.PandasGBQVersions()
252+
versions._installed_version = object()
253+
assert versions.installed_version is versions._installed_version
254+
255+
256+
def test_installed_pandas_gbq_version_returns_parsed_version():
257+
import sys
258+
mock_pandas_gbq = mock.Mock()
259+
mock_pandas_gbq.__version__ = "1.2.3"
260+
versions = _versions_helpers.PandasGBQVersions()
261+
with mock.patch.dict(sys.modules, {"pandas_gbq": mock_pandas_gbq}):
262+
version = versions.installed_version
263+
264+
assert version.major == 1
265+
assert version.minor == 2
266+
assert version.micro == 3
267+
268+
269+
def test_installed_pandas_gbq_version_falls_back_on_import_error():
270+
import sys
271+
versions = _versions_helpers.PandasGBQVersions()
272+
with mock.patch.dict(sys.modules, {"pandas_gbq": None}):
273+
version = versions.installed_version
274+
275+
assert version.major == 0
276+
assert version.minor == 0
277+
assert version.micro == 0
278+
279+
280+
def test_installed_pandas_gbq_version_falls_back_on_other_error():
281+
import sys
282+
# Simulate a corrupted package raising an error on import/property access
283+
class CorruptPandasGBQ:
284+
@property
285+
def __version__(self):
286+
raise TypeError("Corrupted package")
287+
288+
versions = _versions_helpers.PandasGBQVersions()
289+
with mock.patch.dict(sys.modules, {"pandas_gbq": CorruptPandasGBQ()}):
290+
version = versions.installed_version
291+
292+
assert version.major == 0
293+
assert version.minor == 0
294+
assert version.micro == 0
295+
296+
297+
def test_pandas_gbq_delegation_api_version_returns_cached():
298+
versions = _versions_helpers.PandasGBQVersions()
299+
versions._delegation_api_version = object()
300+
assert versions.delegation_api_version is versions._delegation_api_version
301+
302+
303+
def test_pandas_gbq_delegation_api_version_returns_value():
304+
import sys
305+
mock_pandas_gbq = mock.Mock()
306+
mock_pandas_gbq._internal_delegation_api_version = 42
307+
versions = _versions_helpers.PandasGBQVersions()
308+
with mock.patch.dict(sys.modules, {"pandas_gbq": mock_pandas_gbq}):
309+
version = versions.delegation_api_version
310+
311+
assert version == 42
312+
313+
314+
def test_pandas_gbq_delegation_api_version_falls_back_on_import_error():
315+
import sys
316+
versions = _versions_helpers.PandasGBQVersions()
317+
with mock.patch.dict(sys.modules, {"pandas_gbq": None}):
318+
version = versions.delegation_api_version
319+
320+
assert version == 0
321+
322+
323+
def test_pandas_gbq_delegation_api_version_falls_back_on_other_error():
324+
import sys
325+
class CorruptPandasGBQ:
326+
@property
327+
def _internal_delegation_api_version(self):
328+
raise TypeError("Corrupted package")
329+
330+
versions = _versions_helpers.PandasGBQVersions()
331+
with mock.patch.dict(sys.modules, {"pandas_gbq": CorruptPandasGBQ()}):
332+
version = versions.delegation_api_version
333+
334+
assert version == 0
335+
336+
337+
def test_pandas_gbq_is_delegation_supported_true():
338+
versions = _versions_helpers.PandasGBQVersions()
339+
versions._delegation_api_version = 1
340+
assert versions.is_delegation_supported is True
341+
342+
343+
def test_pandas_gbq_is_delegation_supported_false():
344+
versions = _versions_helpers.PandasGBQVersions()
345+
versions._delegation_api_version = 0
346+
assert versions.is_delegation_supported is False

0 commit comments

Comments
 (0)