Skip to content
This repository was archived by the owner on Mar 6, 2026. It is now read-only.

Commit 29d1238

Browse files
committed
Add missing coverage
1 parent da663b2 commit 29d1238

File tree

2 files changed

+172
-6
lines changed

2 files changed

+172
-6
lines changed

google/cloud/bigquery/table.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2989,11 +2989,6 @@ def __eq__(self, other):
29892989
and self.referenced_column == other.referenced_column
29902990
)
29912991

2992-
@classmethod
2993-
def from_api_repr(cls, api_repr: Dict[str, Any]) -> "ColumnReference":
2994-
"""Create an instance from API representation."""
2995-
return cls(api_repr["referencingColumn"], api_repr["referencedColumn"])
2996-
29972992

29982993
class ForeignKey:
29992994
"""Represents a foreign key constraint on a table's columns.
@@ -3030,7 +3025,10 @@ def from_api_repr(cls, api_repr: Dict[str, Any]) -> "ForeignKey":
30303025
name=api_repr["name"],
30313026
referenced_table=TableReference.from_api_repr(api_repr["referencedTable"]),
30323027
column_references=[
3033-
ColumnReference.from_api_repr(column_reference_resource)
3028+
ColumnReference(
3029+
column_reference_resource["referencingColumn"],
3030+
column_reference_resource["referencedColumn"],
3031+
)
30343032
for column_reference_resource in api_repr["columnReferences"]
30353033
],
30363034
)

tests/unit/test_table.py

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5401,6 +5401,174 @@ def test_set_expiration_w_none(self):
54015401
assert time_partitioning._properties["expirationMs"] is None
54025402

54035403

5404+
class TestPrimaryKey(unittest.TestCase):
5405+
@staticmethod
5406+
def _get_target_class():
5407+
from google.cloud.bigquery.table import PrimaryKey
5408+
5409+
return PrimaryKey
5410+
5411+
@classmethod
5412+
def _make_one(cls, *args, **kwargs):
5413+
return cls._get_target_class()(*args, **kwargs)
5414+
5415+
def test_constructor_explicit(self):
5416+
columns = ["id", "product_id"]
5417+
primary_key = self._make_one(columns)
5418+
5419+
self.assertEqual(primary_key.columns, columns)
5420+
5421+
def test__eq__columns_mismatch(self):
5422+
primary_key = self._make_one(columns=["id", "product_id"])
5423+
other_primary_key = self._make_one(columns=["id"])
5424+
5425+
self.assertNotEqual(primary_key, other_primary_key)
5426+
5427+
def test__eq__other_type(self):
5428+
primary_key = self._make_one(columns=["id", "product_id"])
5429+
5430+
self.assertNotEqual(primary_key, object())
5431+
5432+
5433+
class TestColumnReference(unittest.TestCase):
5434+
@staticmethod
5435+
def _get_target_class():
5436+
from google.cloud.bigquery.table import ColumnReference
5437+
5438+
return ColumnReference
5439+
5440+
@classmethod
5441+
def _make_one(cls, *args, **kwargs):
5442+
return cls._get_target_class()(*args, **kwargs)
5443+
5444+
def test_constructor_explicit(self):
5445+
referencing_column = "product_id"
5446+
referenced_column = "id"
5447+
column_reference = self._make_one(referencing_column, referenced_column)
5448+
5449+
self.assertEqual(column_reference.referencing_column, referencing_column)
5450+
self.assertEqual(column_reference.referenced_column, referenced_column)
5451+
5452+
def test__eq__referencing_column_mismatch(self):
5453+
column_reference = self._make_one(
5454+
referencing_column="product_id",
5455+
referenced_column="id",
5456+
)
5457+
other_column_reference = self._make_one(
5458+
referencing_column="item_id",
5459+
referenced_column="id",
5460+
)
5461+
5462+
self.assertNotEqual(column_reference, other_column_reference)
5463+
5464+
def test__eq__referenced_column_mismatch(self):
5465+
column_reference = self._make_one(
5466+
referencing_column="product_id",
5467+
referenced_column="id",
5468+
)
5469+
other_column_reference = self._make_one(
5470+
referencing_column="product_id",
5471+
referenced_column="id_1",
5472+
)
5473+
5474+
self.assertNotEqual(column_reference, other_column_reference)
5475+
5476+
def test__eq__other_type(self):
5477+
column_reference = self._make_one(
5478+
referencing_column="product_id",
5479+
referenced_column="id",
5480+
)
5481+
5482+
self.assertNotEqual(column_reference, object())
5483+
5484+
5485+
class TestForeignKey(unittest.TestCase):
5486+
@staticmethod
5487+
def _get_target_class():
5488+
from google.cloud.bigquery.table import ForeignKey
5489+
5490+
return ForeignKey
5491+
5492+
@classmethod
5493+
def _make_one(cls, *args, **kwargs):
5494+
return cls._get_target_class()(*args, **kwargs)
5495+
5496+
def test_constructor_explicit(self):
5497+
name = "my_fk"
5498+
referenced_table = TableReference.from_string("my-project.mydataset.mytable")
5499+
column_references = []
5500+
foreign_key = self._make_one(name, referenced_table, column_references)
5501+
5502+
self.assertEqual(foreign_key.name, name)
5503+
self.assertEqual(foreign_key.referenced_table, referenced_table)
5504+
self.assertEqual(foreign_key.column_references, column_references)
5505+
5506+
def test__eq__name_mismatch(self):
5507+
referenced_table = TableReference.from_string("my-project.mydataset.mytable")
5508+
column_references = []
5509+
foreign_key = self._make_one(
5510+
name="my_fk",
5511+
referenced_table=referenced_table,
5512+
column_references=column_references,
5513+
)
5514+
other_foreign_key = self._make_one(
5515+
name="my_other_fk",
5516+
referenced_table=referenced_table,
5517+
column_references=column_references,
5518+
)
5519+
5520+
self.assertNotEqual(foreign_key, other_foreign_key)
5521+
5522+
def test__eq__referenced_table_mismatch(self):
5523+
name = "my_fk"
5524+
column_references = []
5525+
foreign_key = self._make_one(
5526+
name=name,
5527+
referenced_table=TableReference.from_string("my-project.mydataset.mytable"),
5528+
column_references=column_references,
5529+
)
5530+
other_foreign_key = self._make_one(
5531+
name=name,
5532+
referenced_table=TableReference.from_string(
5533+
"my-project.mydataset.my-other-table"
5534+
),
5535+
column_references=column_references,
5536+
)
5537+
5538+
self.assertNotEqual(foreign_key, other_foreign_key)
5539+
5540+
def test__eq__column_references_mismatch(self):
5541+
from google.cloud.bigquery.table import ColumnReference
5542+
5543+
name = "my_fk"
5544+
referenced_table = TableReference.from_string("my-project.mydataset.mytable")
5545+
foreign_key = self._make_one(
5546+
name=name,
5547+
referenced_table=referenced_table,
5548+
column_references=[],
5549+
)
5550+
other_foreign_key = self._make_one(
5551+
name=name,
5552+
referenced_table=referenced_table,
5553+
column_references=[
5554+
ColumnReference(
5555+
referencing_column="product_id", referenced_column="id"
5556+
),
5557+
],
5558+
)
5559+
5560+
self.assertNotEqual(foreign_key, other_foreign_key)
5561+
5562+
def test__eq__other_type(self):
5563+
foreign_key = self._make_one(
5564+
name="my_fk",
5565+
referenced_table=TableReference.from_string("my-project.mydataset.mytable"),
5566+
column_references=[],
5567+
)
5568+
5569+
self.assertNotEqual(foreign_key, object())
5570+
5571+
54045572
class TestTableConstraint(unittest.TestCase):
54055573
@staticmethod
54065574
def _get_target_class():

0 commit comments

Comments
 (0)