Skip to content

Commit 206ab7f

Browse files
committed
test: refactor delegation tests to comply with unit test style guide
1 parent a2812c9 commit 206ab7f

1 file changed

Lines changed: 81 additions & 43 deletions

File tree

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

Lines changed: 81 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5716,7 +5716,54 @@ def test_rowiterator_to_geodataframe_delegation(self, to_dataframe):
57165716

57175717
self.assertEqual([v.__class__.__name__ for v in df.g], ["Point"])
57185718

5719-
def test_to_dataframe_delegated_when_supported(self):
5719+
def test_to_dataframe_delegated_when_supported_no_range_types(self):
5720+
import sys
5721+
5722+
import db_dtypes
5723+
pandas = pytest.importorskip("pandas")
5724+
mock_pandas_gbq = mock.Mock()
5725+
mock_pandas_gbq.pandas.from_row_iterator.return_value = mock.sentinel.dataframe
5726+
mock_pandas_gbq.__version__ = "1.0.0"
5727+
5728+
with mock.patch(
5729+
"google.cloud.bigquery._versions_helpers.PandasGBQVersions.is_delegation_supported",
5730+
new_callable=mock.PropertyMock,
5731+
return_value=True,
5732+
):
5733+
with mock.patch(
5734+
"google.cloud.bigquery._versions_helpers.SUPPORTS_RANGE_PYARROW",
5735+
False,
5736+
):
5737+
with mock.patch.dict(sys.modules, {"pandas_gbq": mock_pandas_gbq}):
5738+
row_iterator = self._make_one_from_data(
5739+
(("name", "STRING"),),
5740+
(("foo",),)
5741+
)
5742+
df = row_iterator.to_dataframe(progress_bar_type="tqdm", timeout=5.0)
5743+
5744+
mock_pandas_gbq.pandas.from_row_iterator.assert_called_once_with(
5745+
row_iterator,
5746+
bqstorage_client=None,
5747+
dtypes={},
5748+
progress_bar_type="tqdm",
5749+
create_bqstorage_client=True,
5750+
geography_as_object=False,
5751+
bool_dtype=pandas.BooleanDtype(),
5752+
int_dtype=pandas.Int64Dtype(),
5753+
float_dtype=None,
5754+
string_dtype=None,
5755+
date_dtype=DefaultPandasDTypes.DATE_DTYPE,
5756+
datetime_dtype=None,
5757+
time_dtype=db_dtypes.TimeDtype(),
5758+
timestamp_dtype=None,
5759+
range_date_dtype=None,
5760+
range_datetime_dtype=None,
5761+
range_timestamp_dtype=None,
5762+
timeout=5.0,
5763+
)
5764+
self.assertEqual(df, mock.sentinel.dataframe)
5765+
5766+
def test_to_dataframe_delegated_when_supported_with_range_types(self):
57205767
import sys
57215768

57225769
import db_dtypes
@@ -5731,22 +5778,17 @@ def test_to_dataframe_delegated_when_supported(self):
57315778
new_callable=mock.PropertyMock,
57325779
return_value=True,
57335780
):
5734-
with mock.patch.dict(sys.modules, {"pandas_gbq": mock_pandas_gbq}):
5735-
row_iterator = self._make_one_from_data(
5736-
(("name", "STRING"),),
5737-
(("foo",),)
5738-
)
5739-
df = row_iterator.to_dataframe(progress_bar_type="tqdm", timeout=5.0)
5740-
5741-
# Check resolved dtypes matching the environment capabilities
5742-
import packaging.version
5743-
_pandas_version = packaging.version.parse(pandas.__version__)
5744-
_pyarrow_version = packaging.version.parse(pyarrow.__version__)
5745-
supports_range_pyarrow = (
5746-
_pandas_version >= packaging.version.Version("1.5.0")
5747-
and _pyarrow_version >= packaging.version.Version("10.0.1")
5748-
)
5749-
if supports_range_pyarrow:
5781+
with mock.patch(
5782+
"google.cloud.bigquery._versions_helpers.SUPPORTS_RANGE_PYARROW",
5783+
True,
5784+
):
5785+
with mock.patch.dict(sys.modules, {"pandas_gbq": mock_pandas_gbq}):
5786+
row_iterator = self._make_one_from_data(
5787+
(("name", "STRING"),),
5788+
(("foo",),)
5789+
)
5790+
df = row_iterator.to_dataframe(progress_bar_type="tqdm", timeout=5.0)
5791+
57505792
expected_range_date = pandas.ArrowDtype(
57515793
pyarrow.struct([("start", pyarrow.date32()), ("end", pyarrow.date32())])
57525794
)
@@ -5756,32 +5798,28 @@ def test_to_dataframe_delegated_when_supported(self):
57565798
expected_range_timestamp = pandas.ArrowDtype(
57575799
pyarrow.struct([("start", pyarrow.timestamp("us", tz="UTC")), ("end", pyarrow.timestamp("us", tz="UTC"))])
57585800
)
5759-
else:
5760-
expected_range_date = None
5761-
expected_range_datetime = None
5762-
expected_range_timestamp = None
5763-
5764-
mock_pandas_gbq.pandas.from_row_iterator.assert_called_once_with(
5765-
row_iterator,
5766-
bqstorage_client=None,
5767-
dtypes={},
5768-
progress_bar_type="tqdm",
5769-
create_bqstorage_client=True,
5770-
geography_as_object=False,
5771-
bool_dtype=pandas.BooleanDtype(),
5772-
int_dtype=pandas.Int64Dtype(),
5773-
float_dtype=None,
5774-
string_dtype=None,
5775-
date_dtype=DefaultPandasDTypes.DATE_DTYPE,
5776-
datetime_dtype=None,
5777-
time_dtype=db_dtypes.TimeDtype(),
5778-
timestamp_dtype=None,
5779-
range_date_dtype=expected_range_date,
5780-
range_datetime_dtype=expected_range_datetime,
5781-
range_timestamp_dtype=expected_range_timestamp,
5782-
timeout=5.0,
5783-
)
5784-
self.assertEqual(df, mock.sentinel.dataframe)
5801+
5802+
mock_pandas_gbq.pandas.from_row_iterator.assert_called_once_with(
5803+
row_iterator,
5804+
bqstorage_client=None,
5805+
dtypes={},
5806+
progress_bar_type="tqdm",
5807+
create_bqstorage_client=True,
5808+
geography_as_object=False,
5809+
bool_dtype=pandas.BooleanDtype(),
5810+
int_dtype=pandas.Int64Dtype(),
5811+
float_dtype=None,
5812+
string_dtype=None,
5813+
date_dtype=DefaultPandasDTypes.DATE_DTYPE,
5814+
datetime_dtype=None,
5815+
time_dtype=db_dtypes.TimeDtype(),
5816+
timestamp_dtype=None,
5817+
range_date_dtype=expected_range_date,
5818+
range_datetime_dtype=expected_range_datetime,
5819+
range_timestamp_dtype=expected_range_timestamp,
5820+
timeout=5.0,
5821+
)
5822+
self.assertEqual(df, mock.sentinel.dataframe)
57855823

57865824
def test_to_dataframe_not_delegated_when_unsupported(self):
57875825
import sys

0 commit comments

Comments
 (0)