push_notifs: Order device args to send_notifications_to_bouncer by id.

This ensures determinism in these tests doing mock_send.assert_called
with - avoids producing test flakes due to a different order of
retrieval of these objects from the database.
This commit is contained in:
Mateusz Mandera
2023-12-12 01:32:43 +01:00
committed by Tim Abbott
parent 2916a601b3
commit 3bcfb9c005
2 changed files with 24 additions and 8 deletions

View File

@@ -1190,10 +1190,10 @@ def handle_remove_push_notification(user_profile_id: int, message_ids: List[int]
apns_payload = get_remove_payload_apns(user_profile, truncated_message_ids)
android_devices = list(
PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.GCM)
PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.GCM).order_by("id")
)
apple_devices = list(
PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.APNS)
PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.APNS).order_by("id")
)
if uses_notification_bouncer():
send_notifications_to_bouncer(
@@ -1356,11 +1356,11 @@ def handle_push_notification(user_profile_id: int, missed_message: Dict[str, Any
logger.info("Sending push notifications to mobile clients for user %s", user_profile_id)
android_devices = list(
PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.GCM)
PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.GCM).order_by("id")
)
apple_devices = list(
PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.APNS)
PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.APNS).order_by("id")
)
if uses_notification_bouncer():
total_android_devices, total_apple_devices = send_notifications_to_bouncer(

View File

@@ -2393,8 +2393,16 @@ class HandlePushNotificationTest(PushNotificationTest):
{"apns": True},
{"gcm": True},
{},
list(PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.GCM)),
list(PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.APNS)),
list(
PushDeviceToken.objects.filter(
user=user_profile, kind=PushDeviceToken.GCM
).order_by("id")
),
list(
PushDeviceToken.objects.filter(
user=user_profile, kind=PushDeviceToken.APNS
).order_by("id")
),
)
self.assertEqual(
mock_logging_info.output,
@@ -2508,8 +2516,16 @@ class HandlePushNotificationTest(PushNotificationTest):
"zulip_message_id": message.id,
},
{"priority": "normal"},
list(PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.GCM)),
list(PushDeviceToken.objects.filter(user=user_profile, kind=PushDeviceToken.APNS)),
list(
PushDeviceToken.objects.filter(
user=user_profile, kind=PushDeviceToken.GCM
).order_by("id")
),
list(
PushDeviceToken.objects.filter(
user=user_profile, kind=PushDeviceToken.APNS
).order_by("id")
),
)
user_message = UserMessage.objects.get(user_profile=self.user_profile, message=message)
self.assertEqual(user_message.flags.active_mobile_push_notification, False)