def test_get_filtered_devices_queryset_on_user(self): for i in range(0, 3): get_user_model().objects.create_user( username='******' % i, email='*****@*****.**' % i, password=i ) user1 = get_user_model().objects.get(pk=1) user2 = get_user_model().objects.get(pk=2) # Add 5 devices to user2 for i in range(0, 5): Device.objects.create( key='TEST_DEVICE_KEY_{}'.format(i), type=Device.DEVICE_TYPE_ANDROID, user=user2 ) # Check that user2 has 5 devices notification = PushNotification.objects.create( title='test', payload=self.payload, active=PushNotification.PUSH_ACTIVE, sent=PushNotification.PUSH_NOT_SENT, filter_user=user2.id ) devices = get_filtered_devices_queryset(notification.to_dict()) self.assertEqual(devices.count(), 5) # Check that user 1 has no devices notification = PushNotification.objects.create( title='test', payload=self.payload, active=PushNotification.PUSH_ACTIVE, sent=PushNotification.PUSH_NOT_SENT, filter_user=user1.id ) devices = get_filtered_devices_queryset(notification.to_dict()) self.assertEqual(devices.count(), 0)
def test_get_filtered_devices_queryset_on_user(self): for i in range(0, 3): get_user_model().objects.create_user( username='******' % i, email='*****@*****.**' % i, password=i) user1 = get_user_model().objects.get(pk=1) user2 = get_user_model().objects.get(pk=2) # Add 5 devices to user2 for _ in range(0, 5): Device.objects.create(key='TEST_DEVICE_KEY', type=Device.DEVICE_TYPE_ANDROID, user=user2) # Check that user2 has 5 devices notification = PushNotification.objects.create( title='test', payload=self.payload, active=PushNotification.PUSH_ACTIVE, sent=PushNotification.PUSH_NOT_SENT, filter_user=user2.id) devices = get_filtered_devices_queryset(notification) self.assertEqual(devices.count(), 5) # Check that user 1 has no devices notification = PushNotification.objects.create( title='test', payload=self.payload, active=PushNotification.PUSH_ACTIVE, sent=PushNotification.PUSH_NOT_SENT, filter_user=user1.id) devices = get_filtered_devices_queryset(notification) self.assertEqual(devices.count(), 0)
def send_push_notification_group(notification_id, offset=0, limit=1000): try: notification = PushNotification.objects.get(pk=notification_id) except PushNotification.DoesNotExist: return False devices = get_filtered_devices_queryset(notification) devices = devices[offset:offset + limit] for device in devices: send_single_push_notification(device, notification.payload) return True
def create_push_notification_groups(notification_id): try: notification = PushNotification.objects.get(pk=notification_id) except PushNotification.DoesNotExist: return False devices = get_filtered_devices_queryset(notification) if devices.count() > 0: count = devices.count() limit = getattr(settings, 'PUSHY_DEVICE_KEY_LIMIT', 1000) group( send_push_notification_group.s(notification_id, offset, limit) for offset in range(0, count, limit)).delay()
def send_push_notification_group(notification_id, offset=0, limit=1000): try: notification = PushNotification.objects.get(pk=notification_id) except PushNotification.DoesNotExist: return False devices = get_filtered_devices_queryset(notification) devices = devices[offset:offset+limit] for device in devices: send_single_push_notification(device, notification.payload) return True
def create_push_notification_groups(notification_id): try: notification = PushNotification.objects.get(pk=notification_id) except PushNotification.DoesNotExist: return False devices = get_filtered_devices_queryset(notification) if devices.count() > 0: count = devices.count() limit = getattr(settings, 'PUSHY_DEVICE_KEY_LIMIT', 1000) celery.group(send_push_notification_group.s( notification_id, offset, limit) for offset in range(0, count, limit)).delay()
def test_get_filtered_devices_queryset_on_type(self): notification = PushNotification.objects.create( title='test', payload=self.payload, active=PushNotification.PUSH_ACTIVE, sent=PushNotification.PUSH_NOT_SENT, filter_type=Device.DEVICE_TYPE_IOS) for _ in range(0, 3): Device.objects.create(key='TEST_DEVICE_KEY', type=Device.DEVICE_TYPE_IOS) for _ in range(0, 10): Device.objects.create(key='TEST_DEVICE_KEY', type=Device.DEVICE_TYPE_ANDROID) devices = get_filtered_devices_queryset(notification) self.assertEqual(devices.count(), 3)
def test_get_filtered_devices_queryset_on_type(self): notification = PushNotification.objects.create( title='test', payload=self.payload, active=PushNotification.PUSH_ACTIVE, sent=PushNotification.PUSH_NOT_SENT, filter_type=Device.DEVICE_TYPE_IOS ) for i in range(0, 3): Device.objects.create( key='TEST_DEVICE_KEY_{}'.format(i), type=Device.DEVICE_TYPE_IOS ) for i in range(0, 10): Device.objects.create( key='TEST_DEVICE_KEY_{}'.format(i), type=Device.DEVICE_TYPE_ANDROID ) devices = get_filtered_devices_queryset(notification.to_dict()) self.assertEqual(devices.count(), 3)