Skip to content

Commit 1c40ceb

Browse files
committed
rollback unintentional changes
1 parent 6180541 commit 1c40ceb

File tree

2 files changed

+41
-37
lines changed

2 files changed

+41
-37
lines changed

snippets/messaging/cloud_messaging.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,28 @@ def send_each():
244244
print(f'{response.success_count} messages were sent successfully')
245245
# [END send_each]
246246

247+
248+
def send_each_for_multicast():
249+
# [START send_each_for_multicast]
250+
# Create a list containing up to 500 registration tokens.
251+
# These registration tokens come from the client FCM SDKs.
252+
registration_tokens = [
253+
'YOUR_REGISTRATION_TOKEN_1',
254+
# ...
255+
'YOUR_REGISTRATION_TOKEN_N',
256+
]
257+
258+
message = messaging.MulticastMessage(
259+
data={'score': '850', 'time': '2:45'},
260+
tokens=registration_tokens,
261+
)
262+
response = messaging.send_each_for_multicast(message)
263+
# See the BatchResponse reference documentation
264+
# for the contents of response.
265+
print(f'{response.success_count} messages were sent successfully')
266+
# [END send_each_for_multicast]
267+
268+
247269
def send_each_for_multicast_and_handle_errors():
248270
# [START send_each_for_multicast_error]
249271
# These registration tokens come from the client FCM SDKs.

tests/test_functions.py

Lines changed: 19 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
"""Test cases for the firebase_admin.functions module."""
1616

17-
from datetime import datetime, timedelta, timezone
17+
from datetime import datetime, timedelta
1818
import json
1919
import time
2020
import pytest
@@ -33,6 +33,8 @@
3333
_CLOUD_TASKS_URL + 'projects/test-project/locations/us-central1/queues/test-function-name/tasks'
3434
_DEFAULT_TASK_URL = _CLOUD_TASKS_URL + _DEFAULT_TASK_PATH
3535
_DEFAULT_RESPONSE = json.dumps({'name': _DEFAULT_TASK_PATH})
36+
_ENQUEUE_TIME = datetime.utcnow()
37+
_SCHEDULE_TIME = _ENQUEUE_TIME + timedelta(seconds=100)
3638

3739
class TestTaskQueue:
3840
@classmethod
@@ -183,55 +185,36 @@ def _instrument_functions_service(self, app=None, status=200, payload=_DEFAULT_R
183185
testutils.MockAdapter(payload, status, recorder))
184186
return functions_service, recorder
185187

186-
def test_task_options_delay_seconds(self):
187-
_, recorder = self._instrument_functions_service()
188-
enqueue_time = datetime.now(timezone.utc)
189-
expected_schedule_time = enqueue_time + timedelta(seconds=100)
190-
task_opts_params = {
188+
@pytest.mark.parametrize('task_opts_params', [
189+
{
191190
'schedule_delay_seconds': 100,
192191
'schedule_time': None,
193192
'dispatch_deadline_seconds': 200,
194193
'task_id': 'test-task-id',
195194
'headers': {'x-test-header': 'test-header-value'},
196195
'uri': 'https://google.com'
197-
}
198-
queue = functions.task_queue('test-function-name')
199-
task_opts = functions.TaskOptions(**task_opts_params)
200-
queue.enqueue(_DEFAULT_DATA, task_opts)
201-
202-
assert len(recorder) == 1
203-
task = json.loads(recorder[0].body.decode())['task']
204-
205-
task_schedule_time = datetime.fromisoformat(task['schedule_time'].replace('Z', '+00:00'))
206-
delta = abs(task_schedule_time - expected_schedule_time)
207-
assert delta <= timedelta(seconds=1)
208-
209-
assert task['dispatch_deadline'] == '200s'
210-
assert task['http_request']['headers']['x-test-header'] == 'test-header-value'
211-
assert task['http_request']['url'] in ['http://google.com', 'https://google.com']
212-
assert task['name'] == _DEFAULT_TASK_PATH
213-
214-
def test_task_options_utc_time(self):
215-
_, recorder = self._instrument_functions_service()
216-
enqueue_time = datetime.now(timezone.utc)
217-
expected_schedule_time = enqueue_time + timedelta(seconds=100)
218-
task_opts_params = {
196+
},
197+
{
219198
'schedule_delay_seconds': None,
220-
'schedule_time': expected_schedule_time,
199+
'schedule_time': _SCHEDULE_TIME,
221200
'dispatch_deadline_seconds': 200,
222201
'task_id': 'test-task-id',
223202
'headers': {'x-test-header': 'test-header-value'},
224203
'uri': 'http://google.com'
225-
}
204+
},
205+
])
206+
def test_task_options(self, task_opts_params):
207+
_, recorder = self._instrument_functions_service()
226208
queue = functions.task_queue('test-function-name')
227209
task_opts = functions.TaskOptions(**task_opts_params)
228210
queue.enqueue(_DEFAULT_DATA, task_opts)
229211

230212
assert len(recorder) == 1
231213
task = json.loads(recorder[0].body.decode())['task']
232214

233-
task_schedule_time = datetime.fromisoformat(task['schedule_time'].replace('Z', '+00:00'))
234-
assert task_schedule_time == expected_schedule_time
215+
schedule_time = datetime.fromisoformat(task['schedule_time'][:-1])
216+
delta = abs(schedule_time - _SCHEDULE_TIME)
217+
assert delta <= timedelta(seconds=15)
235218

236219
assert task['dispatch_deadline'] == '200s'
237220
assert task['http_request']['headers']['x-test-header'] == 'test-header-value'
@@ -240,8 +223,7 @@ def test_task_options_utc_time(self):
240223

241224
def test_schedule_set_twice_error(self):
242225
_, recorder = self._instrument_functions_service()
243-
opts = functions.TaskOptions(
244-
schedule_delay_seconds=100, schedule_time=datetime.now(timezone.utc))
226+
opts = functions.TaskOptions(schedule_delay_seconds=100, schedule_time=datetime.utcnow())
245227
queue = functions.task_queue('test-function-name')
246228
with pytest.raises(ValueError) as excinfo:
247229
queue.enqueue(_DEFAULT_DATA, opts)
@@ -252,9 +234,9 @@ def test_schedule_set_twice_error(self):
252234

253235
@pytest.mark.parametrize('schedule_time', [
254236
time.time(),
255-
str(datetime.now(timezone.utc)),
256-
datetime.now(timezone.utc).isoformat(),
257-
datetime.now(timezone.utc).isoformat() + 'Z',
237+
str(datetime.utcnow()),
238+
datetime.utcnow().isoformat(),
239+
datetime.utcnow().isoformat() + 'Z',
258240
'', ' '
259241
])
260242
def test_invalid_schedule_time_error(self, schedule_time):

0 commit comments

Comments
 (0)