@@ -1270,6 +1270,38 @@ def test_get_update_pb_wo_exists_precondition(self):
12701270 self .assertEqual (update_pb .update .fields , encode_dict (document_data ))
12711271 self .assertFalse (update_pb ._pb .HasField ("current_document" ))
12721272
1273+ def test_get_field_transform_pbs_miss (self ):
1274+ document_data = {"a" : 1 }
1275+ inst = self ._make_one (document_data )
1276+ document_path = (
1277+ "projects/project-id/databases/(default)/" "documents/document-id"
1278+ )
1279+
1280+ field_transform_pbs = inst .get_field_transform_pbs (document_path )
1281+
1282+ self .assertEqual (field_transform_pbs , [])
1283+
1284+ def test_get_field_transform_pbs_w_server_timestamp (self ):
1285+ from google .cloud .firestore_v1 .types import write
1286+ from google .cloud .firestore_v1 .transforms import SERVER_TIMESTAMP
1287+ from google .cloud .firestore_v1 ._helpers import REQUEST_TIME_ENUM
1288+
1289+ document_data = {"a" : SERVER_TIMESTAMP }
1290+ inst = self ._make_one (document_data )
1291+ document_path = (
1292+ "projects/project-id/databases/(default)/" "documents/document-id"
1293+ )
1294+
1295+ field_transform_pbs = inst .get_field_transform_pbs (document_path )
1296+
1297+ self .assertEqual (len (field_transform_pbs ), 1 )
1298+ field_transform_pb = field_transform_pbs [0 ]
1299+ self .assertIsInstance (
1300+ field_transform_pb , write .DocumentTransform .FieldTransform
1301+ )
1302+ self .assertEqual (field_transform_pb .field_path , "a" )
1303+ self .assertEqual (field_transform_pb .set_to_server_value , REQUEST_TIME_ENUM )
1304+
12731305 def test_get_transform_pb_w_server_timestamp_w_exists_precondition (self ):
12741306 from google .cloud .firestore_v1 .types import write
12751307 from google .cloud .firestore_v1 .transforms import SERVER_TIMESTAMP
@@ -1526,23 +1558,16 @@ def _make_write_w_document(document_path, **data):
15261558 )
15271559
15281560 @staticmethod
1529- def _make_write_w_transform (document_path , fields ):
1530- from google .cloud .firestore_v1 .types import write
1561+ def _add_field_transforms (update_pb , fields ):
15311562 from google .cloud .firestore_v1 import DocumentTransform
15321563
15331564 server_val = DocumentTransform .FieldTransform .ServerValue
1534- transforms = [
1535- write .DocumentTransform .FieldTransform (
1536- field_path = field , set_to_server_value = server_val .REQUEST_TIME
1537- )
1538- for field in fields
1539- ]
1540-
1541- return write .Write (
1542- transform = write .DocumentTransform (
1543- document = document_path , field_transforms = transforms
1565+ for field in fields :
1566+ update_pb .update_transforms .append (
1567+ DocumentTransform .FieldTransform (
1568+ field_path = field , set_to_server_value = server_val .REQUEST_TIME
1569+ )
15441570 )
1545- )
15461571
15471572 def _helper (self , do_transform = False , empty_val = False ):
15481573 from google .cloud .firestore_v1 .transforms import SERVER_TIMESTAMP
@@ -1569,9 +1594,7 @@ def _helper(self, do_transform=False, empty_val=False):
15691594 expected_pbs = [update_pb ]
15701595
15711596 if do_transform :
1572- expected_pbs .append (
1573- self ._make_write_w_transform (document_path , fields = ["butter" ])
1574- )
1597+ self ._add_field_transforms (update_pb , fields = ["butter" ])
15751598
15761599 self .assertEqual (write_pbs , expected_pbs )
15771600
@@ -1603,23 +1626,16 @@ def _make_write_w_document(document_path, **data):
16031626 )
16041627
16051628 @staticmethod
1606- def _make_write_w_transform (document_path , fields ):
1607- from google .cloud .firestore_v1 .types import write
1629+ def _add_field_transforms (update_pb , fields ):
16081630 from google .cloud .firestore_v1 import DocumentTransform
16091631
16101632 server_val = DocumentTransform .FieldTransform .ServerValue
1611- transforms = [
1612- write .DocumentTransform .FieldTransform (
1613- field_path = field , set_to_server_value = server_val .REQUEST_TIME
1614- )
1615- for field in fields
1616- ]
1617-
1618- return write .Write (
1619- transform = write .DocumentTransform (
1620- document = document_path , field_transforms = transforms
1633+ for field in fields :
1634+ update_pb .update_transforms .append (
1635+ DocumentTransform .FieldTransform (
1636+ field_path = field , set_to_server_value = server_val .REQUEST_TIME
1637+ )
16211638 )
1622- )
16231639
16241640 def test_w_empty_document (self ):
16251641 document_path = _make_ref_string (u"little" , u"town" , u"of" , u"ham" )
@@ -1640,8 +1656,8 @@ def test_w_only_server_timestamp(self):
16401656 write_pbs = self ._call_fut (document_path , document_data )
16411657
16421658 update_pb = self ._make_write_w_document (document_path )
1643- transform_pb = self ._make_write_w_transform ( document_path , ["butter" ])
1644- expected_pbs = [update_pb , transform_pb ]
1659+ self ._add_field_transforms ( update_pb , fields = ["butter" ])
1660+ expected_pbs = [update_pb ]
16451661 self .assertEqual (write_pbs , expected_pbs )
16461662
16471663 def _helper (self , do_transform = False , empty_val = False ):
@@ -1669,9 +1685,7 @@ def _helper(self, do_transform=False, empty_val=False):
16691685 expected_pbs = [update_pb ]
16701686
16711687 if do_transform :
1672- expected_pbs .append (
1673- self ._make_write_w_transform (document_path , fields = ["butter" ])
1674- )
1688+ self ._add_field_transforms (update_pb , fields = ["butter" ])
16751689
16761690 self .assertEqual (write_pbs , expected_pbs )
16771691
@@ -1904,23 +1918,16 @@ def _make_write_w_document(document_path, **data):
19041918 )
19051919
19061920 @staticmethod
1907- def _make_write_w_transform (document_path , fields ):
1908- from google .cloud .firestore_v1 .types import write
1921+ def _add_field_transforms (update_pb , fields ):
19091922 from google .cloud .firestore_v1 import DocumentTransform
19101923
19111924 server_val = DocumentTransform .FieldTransform .ServerValue
1912- transforms = [
1913- write .DocumentTransform .FieldTransform (
1914- field_path = field , set_to_server_value = server_val .REQUEST_TIME
1915- )
1916- for field in fields
1917- ]
1918-
1919- return write .Write (
1920- transform = write .DocumentTransform (
1921- document = document_path , field_transforms = transforms
1925+ for field in fields :
1926+ update_pb .update_transforms .append (
1927+ DocumentTransform .FieldTransform (
1928+ field_path = field , set_to_server_value = server_val .REQUEST_TIME
1929+ )
19221930 )
1923- )
19241931
19251932 @staticmethod
19261933 def _update_document_mask (update_pb , field_paths ):
@@ -1954,6 +1961,20 @@ def test_with_merge_field_wo_transform(self):
19541961 expected_pbs = [update_pb ]
19551962 self .assertEqual (write_pbs , expected_pbs )
19561963
1964+ def test_with_merge_true_w_only_transform (self ):
1965+ from google .cloud .firestore_v1 .transforms import SERVER_TIMESTAMP
1966+
1967+ document_path = _make_ref_string (u"little" , u"town" , u"of" , u"ham" )
1968+ document_data = {"butter" : SERVER_TIMESTAMP }
1969+
1970+ write_pbs = self ._call_fut (document_path , document_data , merge = True )
1971+
1972+ update_pb = self ._make_write_w_document (document_path )
1973+ self ._update_document_mask (update_pb , field_paths = ())
1974+ self ._add_field_transforms (update_pb , fields = ["butter" ])
1975+ expected_pbs = [update_pb ]
1976+ self .assertEqual (write_pbs , expected_pbs )
1977+
19571978 def test_with_merge_true_w_transform (self ):
19581979 from google .cloud .firestore_v1 .transforms import SERVER_TIMESTAMP
19591980
@@ -1966,8 +1987,8 @@ def test_with_merge_true_w_transform(self):
19661987
19671988 update_pb = self ._make_write_w_document (document_path , ** update_data )
19681989 self ._update_document_mask (update_pb , field_paths = sorted (update_data ))
1969- transform_pb = self ._make_write_w_transform ( document_path , fields = ["butter" ])
1970- expected_pbs = [update_pb , transform_pb ]
1990+ self ._add_field_transforms ( update_pb , fields = ["butter" ])
1991+ expected_pbs = [update_pb ]
19711992 self .assertEqual (write_pbs , expected_pbs )
19721993
19731994 def test_with_merge_field_w_transform (self ):
@@ -1986,8 +2007,8 @@ def test_with_merge_field_w_transform(self):
19862007 document_path , cheese = document_data ["cheese" ]
19872008 )
19882009 self ._update_document_mask (update_pb , ["cheese" ])
1989- transform_pb = self ._make_write_w_transform ( document_path , fields = ["butter" ])
1990- expected_pbs = [update_pb , transform_pb ]
2010+ self ._add_field_transforms ( update_pb , fields = ["butter" ])
2011+ expected_pbs = [update_pb ]
19912012 self .assertEqual (write_pbs , expected_pbs )
19922013
19932014 def test_with_merge_field_w_transform_masking_simple (self ):
@@ -2001,10 +2022,9 @@ def test_with_merge_field_w_transform_masking_simple(self):
20012022 write_pbs = self ._call_fut (document_path , document_data , merge = ["butter.pecan" ])
20022023
20032024 update_pb = self ._make_write_w_document (document_path )
2004- transform_pb = self ._make_write_w_transform (
2005- document_path , fields = ["butter.pecan" ]
2006- )
2007- expected_pbs = [update_pb , transform_pb ]
2025+ self ._update_document_mask (update_pb , field_paths = ())
2026+ self ._add_field_transforms (update_pb , fields = ["butter.pecan" ])
2027+ expected_pbs = [update_pb ]
20082028 self .assertEqual (write_pbs , expected_pbs )
20092029
20102030 def test_with_merge_field_w_transform_parent (self ):
@@ -2023,10 +2043,8 @@ def test_with_merge_field_w_transform_parent(self):
20232043 document_path , cheese = update_data ["cheese" ], butter = {"popcorn" : "yum" }
20242044 )
20252045 self ._update_document_mask (update_pb , ["cheese" , "butter" ])
2026- transform_pb = self ._make_write_w_transform (
2027- document_path , fields = ["butter.pecan" ]
2028- )
2029- expected_pbs = [update_pb , transform_pb ]
2046+ self ._add_field_transforms (update_pb , fields = ["butter.pecan" ])
2047+ expected_pbs = [update_pb ]
20302048 self .assertEqual (write_pbs , expected_pbs )
20312049
20322050
@@ -2134,23 +2152,19 @@ def _helper(self, option=None, do_transform=False, **write_kwargs):
21342152 if isinstance (option , _helpers .ExistsOption ):
21352153 precondition = common .Precondition (exists = False )
21362154 expected_update_pb ._pb .current_document .CopyFrom (precondition ._pb )
2137- expected_pbs = [ expected_update_pb ]
2155+
21382156 if do_transform :
21392157 transform_paths = FieldPath .from_string (field_path2 )
21402158 server_val = DocumentTransform .FieldTransform .ServerValue
2141- expected_transform_pb = write .Write (
2142- transform = write .DocumentTransform (
2143- document = document_path ,
2144- field_transforms = [
2145- write .DocumentTransform .FieldTransform (
2146- field_path = transform_paths .to_api_repr (),
2147- set_to_server_value = server_val .REQUEST_TIME ,
2148- )
2149- ],
2159+ field_transform_pbs = [
2160+ write .DocumentTransform .FieldTransform (
2161+ field_path = transform_paths .to_api_repr (),
2162+ set_to_server_value = server_val .REQUEST_TIME ,
21502163 )
2151- )
2152- expected_pbs .append (expected_transform_pb )
2153- self .assertEqual (write_pbs , expected_pbs )
2164+ ]
2165+ expected_update_pb .update_transforms .extend (field_transform_pbs )
2166+
2167+ self .assertEqual (write_pbs , [expected_update_pb ])
21542168
21552169 def test_without_option (self ):
21562170 from google .cloud .firestore_v1 .types import common
0 commit comments