Skip to content

Commit 79bbeb2

Browse files
committed
Updates from_api_repr() and external_config tests
1 parent 1b7ba09 commit 79bbeb2

File tree

2 files changed

+62
-41
lines changed

2 files changed

+62
-41
lines changed

google/cloud/bigquery/external_config.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,9 +1067,20 @@ def to_api_repr(self) -> dict:
10671067
return config
10681068

10691069
@classmethod
1070-
def from_api_repr(self, resource):
1071-
return _from_api_repr(self, resource)
1070+
def from_api_repr(cls, resource: dict) -> "TODO":
1071+
"""Factory: constructs an instance of the class (cls)
1072+
given its API representation.
1073+
1074+
Args:
1075+
resource (Dict[str, Any]):
1076+
API representation of the object to be instantiated.
10721077
1078+
Returns:
1079+
An instance of the class initialized with data from 'resource'.
1080+
"""
1081+
config = cls()
1082+
config._properties = copy.deepcopy(resource)
1083+
return config
10731084

10741085
class ExternalCatalogTableOptions:
10751086
"""Metadata about open source compatible table. The fields contained in these

tests/unit/test_external_config.py

Lines changed: 49 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
import unittest
1919

2020
from google.cloud.bigquery import external_config
21+
from google.cloud.bigquery.external_config import (
22+
ExternalCatalogDatasetOptions,
23+
ExternalCatalogTableOptions
24+
)
2125
from google.cloud.bigquery import schema
2226

2327
import pytest
@@ -905,41 +909,41 @@ def _get_target_class():
905909
def _make_one(self, *args, **kw):
906910
return self._get_target_class()(*args, **kw)
907911

908-
def test_ctor_defaults(self):
909-
"""Test ExternalCatalogDatasetOptions constructor with default values."""
910-
instance = self._make_one()
911-
912-
assert instance._properties["defaultStorageLocationUri"] is None
913-
assert instance._properties["parameters"] is None
914912

915-
def test_ctor_explicit(
913+
@pytest.mark.parametrize(
914+
"default_storage_location_uri,parameters",
915+
[
916+
("gs://test-bucket/test-path", {"key": "value"}), # set all params
917+
("gs://test-bucket/test-path", None), # set only one parameter at a time
918+
(None, {"key": "value"}),
919+
(None, None), # use default parameters
920+
],
921+
)
922+
def test_ctor_initialization(
916923
self,
924+
default_storage_location_uri,
925+
parameters,
917926
):
918927
"""Test ExternalCatalogDatasetOptions constructor with explicit values."""
919-
920-
default_storage_location_uri = "gs://test-bucket/test-path"
921-
parameters = {"key": "value"}
922-
923928
instance = self._make_one(
924929
default_storage_location_uri=default_storage_location_uri,
925930
parameters=parameters,
926931
)
927932

928-
assert (
929-
instance._properties["defaultStorageLocationUri"]
930-
== default_storage_location_uri
931-
)
932-
assert instance._properties["parameters"] == parameters
933+
assert instance._properties == {
934+
"defaultStorageLocationUri": default_storage_location_uri,
935+
"parameters": parameters,
936+
}
933937

934938
def test_ctor_invalid_input(self):
935939
"""Test ExternalCatalogDatasetOptions constructor with invalid input."""
936940
with pytest.raises(TypeError) as e:
937941
self._make_one(default_storage_location_uri=123)
938-
assert "Pass" in str(e.value)
942+
assert "Pass " in str(e.value)
939943

940944
with pytest.raises(TypeError) as e:
941945
self._make_one(parameters=123)
942-
assert "Pass" in str(e.value)
946+
assert "Pass " in str(e.value)
943947

944948
def test_to_api_repr(self):
945949
"""Test ExternalCatalogDatasetOptions.to_api_repr method."""
@@ -961,14 +965,15 @@ def test_from_api_repr(self):
961965
"defaultStorageLocationUri": "gs://test-bucket/test-path",
962966
"parameters": {"key": "value"},
963967
}
964-
instance.from_api_repr(resource)
968+
result = instance.from_api_repr(resource)
969+
970+
assert isinstance(result, ExternalCatalogDatasetOptions)
971+
assert result._properties == resource
965972

966973

967974
class TestExternalCatalogTableOptions:
968975
@staticmethod
969976
def _get_target_class():
970-
from google.cloud.bigquery.external_config import ExternalCatalogTableOptions
971-
972977
return ExternalCatalogTableOptions
973978

974979
def _make_one(self, *args, **kw):
@@ -996,22 +1001,6 @@ def test_ctor_initialization(self, connection_id, parameters, storage_descriptor
9961001
"storageDescriptor": storage_descriptor,
9971002
}
9981003

999-
def test_to_api_repr(self):
1000-
instance = self._make_one()
1001-
instance._properties = {
1002-
"connectionId": "connection123",
1003-
"parameters": {"key": "value"},
1004-
"storageDescriptor": "placeholder",
1005-
}
1006-
1007-
resource = instance.to_api_repr()
1008-
1009-
assert resource == {
1010-
"connectionId": "connection123",
1011-
"parameters": {"key": "value"},
1012-
"storageDescriptor": "placeholder",
1013-
}
1014-
10151004
@pytest.mark.parametrize(
10161005
"connection_id, parameters, storage_descriptor",
10171006
[
@@ -1048,7 +1037,24 @@ def test_ctor_invalid_input(
10481037
storage_descriptor=storage_descriptor,
10491038
)
10501039

1051-
assert "Pass" in str(e.value)
1040+
assert "Pass " in str(e.value)
1041+
1042+
def test_to_api_repr(self):
1043+
instance = self._make_one()
1044+
instance._properties = {
1045+
"connectionId": "connection123",
1046+
"parameters": {"key": "value"},
1047+
"storageDescriptor": "placeholder",
1048+
}
1049+
1050+
resource = instance.to_api_repr()
1051+
1052+
assert resource == {
1053+
"connectionId": "connection123",
1054+
"parameters": {"key": "value"},
1055+
"storageDescriptor": "placeholder",
1056+
}
1057+
10521058

10531059
def test_from_api_repr(self):
10541060
instance = self._make_one()
@@ -1057,4 +1063,8 @@ def test_from_api_repr(self):
10571063
"parameters": {"key": "value"},
10581064
"storageDescriptor": "placeholder",
10591065
}
1060-
instance.from_api_repr(resource)
1066+
result = instance.from_api_repr(resource)
1067+
1068+
assert isinstance(result, ExternalCatalogTableOptions)
1069+
assert result._properties == resource
1070+

0 commit comments

Comments
 (0)