File tree 2 files changed +44
-4
lines changed
2 files changed +44
-4
lines changed Original file line number Diff line number Diff line change @@ -98,11 +98,16 @@ def make_upper_case(data, context):
98
98
99
99
cur_value = data ["value" ]["fields" ]["original" ]["stringValue" ]
100
100
new_value = cur_value .upper ()
101
- print (f'Replacing value: { cur_value } --> { new_value } ' )
102
101
103
- affected_doc .set ({
104
- u'original' : new_value
105
- })
102
+ if cur_value != new_value :
103
+ print (f'Replacing value: { cur_value } --> { new_value } ' )
104
+ affected_doc .set ({
105
+ u'original' : new_value
106
+ })
107
+ else :
108
+ # Value is already upper-case
109
+ # Don't perform a second write (which can trigger an infinite loop)
110
+ print ('Value is already upper-case.' )
106
111
# [END functions_firebase_reactive]
107
112
108
113
Original file line number Diff line number Diff line change @@ -119,6 +119,41 @@ def test_make_upper_case(firestore_mock, capsys):
119
119
firestore_mock .set .assert_called_with ({'original' : 'FOOBAR' })
120
120
121
121
122
+ @patch ('main.client' )
123
+ def test_make_upper_case_ignores_already_uppercased (firestore_mock , capsys ):
124
+
125
+ firestore_mock .collection = MagicMock (return_value = firestore_mock )
126
+ firestore_mock .document = MagicMock (return_value = firestore_mock )
127
+ firestore_mock .set = MagicMock (return_value = firestore_mock )
128
+
129
+ user_id = str (uuid .uuid4 ())
130
+ date_string = datetime .now ().isoformat ()
131
+ email_string = '%s@%s.com' % (uuid .uuid4 (), uuid .uuid4 ())
132
+
133
+ data = {
134
+ 'uid' : user_id ,
135
+ 'metadata' : {'createdAt' : date_string },
136
+ 'email' : email_string ,
137
+ 'value' : {
138
+ 'fields' : {
139
+ 'original' : {
140
+ 'stringValue' : 'FOOBAR'
141
+ }
142
+ }
143
+ }
144
+ }
145
+
146
+ context = UserDict ()
147
+ context .resource = '/documents/some_collection/path/some/path'
148
+
149
+ main .make_upper_case (data , context )
150
+
151
+ out , _ = capsys .readouterr ()
152
+
153
+ assert 'Value is already upper-case.' in out
154
+ firestore_mock .set .assert_not_called ()
155
+
156
+
122
157
def test_analytics (capsys ):
123
158
timestamp = int (datetime .utcnow ().timestamp ())
124
159
You can’t perform that action at this time.
0 commit comments