def test_scheduled_template(self): with mock.patch.object(ua.Airship, '_request') as mock_request: response = requests.Response() response._content = json.dumps({ 'schedule_urls': [ 'https://go.urbanairship.com/api/schedules/40fe5b31-8997-4819-9aeb-e6c4ae95e5d3' ] }).encode('utf-8') response.status_code = 202 mock_request.return_value = response airship = ua.Airship(TEST_KEY, TEST_SECRET) sched = ua.ScheduledPush(airship) sched.schedule = ua.scheduled_time(datetime.datetime.now()) template_push = airship.create_template_push() template_push.audience = ua.ios_channel( '780ba0c5-45be-4f29-befa-39135cb05b59') template_push.device_types = ua.device_types('ios') template_push.merge_data = ua.merge_data( template_id='780ba0c5-45be-4f29-befa-39135cb05b59', substitutions={'key': 'value'}) sched.push = template_push sched.send() self.assertEqual( sched.url, 'https://go.urbanairship.com/api/schedules/40fe5b31-8997-4819-9aeb-e6c4ae95e5d3' )
def test_update_schedule(self): airship = ua.Airship('key', 'secret') sched = ua.ScheduledPush(airship) # Fail w/o URL self.assertRaises(ValueError, sched.update) with mock.patch.object(ua.Airship, '_request') as mock_request: url = ('https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0') response = requests.Response() response.status_code = 202 response._content = json.dumps({ 'schedule_urls': [('https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0')] }).encode('utf-8') mock_request.return_value = response sched.url = url push = airship.create_push() push.audience = ua.all_ push.notification = ua.notification(alert='Hello') push.device_types = ua.all_ sched.push = push sched.schedule = ua.scheduled_time(datetime.datetime.now()) sched.update()
def test_full_scheduled_payload(self): p = ua.Push(None) p.audience = ua.all_ p.notification = ua.notification(alert='Hello') p.options = {} p.device_types = ua.all_ p.message = ua.message("Title", "Body", "text/html", "utf8") sched = ua.ScheduledPush(None) sched.push = p sched.name = "a schedule" sched.schedule = ua.scheduled_time( datetime.datetime(2014, 1, 1, 12, 0, 0)) self.assertEqual( sched.payload, { "name": "a schedule", "schedule": { 'scheduled_time': '2014-01-01T12:00:00' }, "push": { "audience": "all", "notification": { "alert": "Hello" }, "device_types": "all", "options": {}, "message": { "title": "Title", "body": "Body", "content_type": "text/html", "content_encoding": "utf8", }, } })
def test_local_schedule_success(self): with mock.patch.object(ua.Airship, '_request') as mock_request: response = requests.Response() response._content = json.dumps( { 'schedule_urls': [ ( 'https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0' ) ] } ).encode('utf-8') response.status_code = 202 mock_request.return_value = response airship = ua.Airship('key', 'secret') sched = ua.ScheduledPush(airship) push = airship.create_push() push.audience = ua.all_ push.notification = ua.notification(alert='Hello') push.device_types = ua.all_ sched.push = push sched.schedule = ua.local_scheduled_time(datetime.datetime.now()) sched.send() self.assertEquals( sched.url, ( 'https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0' ) )
def test_full_scheduled_payload(self): p = ua.Push(None) p.audience = ua.all_ p.notification = ua.notification(alert='Hello') p.options = ua.options(10080) p.device_types = ua.all_ p.message = ua.message( title='Title', body='Body', content_type='text/html', content_encoding='utf8', extra={'more': 'stuff'}, expiry=10080, icons={'list_icon': 'http://cdn.example.com/message.png'}, options={'some_delivery_option': 'true'}, ) sched = ua.ScheduledPush(None) sched.push = p sched.name = 'a schedule' sched.schedule = ua.scheduled_time( datetime.datetime(2014, 1, 1, 12, 0, 0)) self.assertEqual( sched.payload, { 'name': 'a schedule', 'schedule': { 'scheduled_time': '2014-01-01T12:00:00' }, 'push': { 'audience': 'all', 'notification': { 'alert': 'Hello' }, 'device_types': 'all', 'options': { 'expiry': 10080 }, 'message': { 'title': 'Title', 'body': 'Body', 'content_type': 'text/html', 'content_encoding': 'utf8', 'extra': { 'more': 'stuff' }, 'expiry': 10080, 'icons': { 'list_icon': 'http://cdn.example.com/message.png' }, 'options': { 'some_delivery_option': 'true' }, }, } })
def test_scheduled_send(self): cas = ua.CreateAndSendPush( airship=self.airship, channels=self.test_sms_objs ) cas.notification = ua.notification( alert='test sms' ) cas.device_types = ua.device_types('sms') cas.campaigns = ua.campaigns( categories=['sms', 'offers'] ) schedule = ua.ScheduledPush(airship=self.airship) schedule.name = 'test schedule name' schedule.push = cas schedule.schedule = ua.scheduled_time( datetime.datetime(2025, 10, 8, 12, 15) ) self.assertEqual( schedule.payload, { 'schedule': { 'scheduled_time': '2025-10-08T12:15:00' }, 'name': 'test schedule name', 'push': { 'audience': { 'create_and_send': [ { 'ua_msisdn': '15035556789', 'ua_sender': '12345', 'ua_opted_in': '2018-02-13T11:58:59' }, { 'ua_msisdn': '15035556788', 'ua_sender': '12345', 'ua_opted_in': '2018-02-13T11:58:59' }, { 'ua_msisdn': '15035556787', 'ua_sender': '12345', 'ua_opted_in': '2018-02-13T11:58:59' }, ] }, 'notification': {'alert': 'test sms'}, 'device_types': ['sms'], 'campaigns': { 'categories': ['sms', 'offers'] } } } )
def test_cancel(self): airship = ua.Airship('key', 'secret') sched = ua.ScheduledPush(airship) # Fail w/o URL self.assertRaises(ValueError, sched.cancel) with mock.patch.object(ua.Airship, '_request') as mock_request: response = requests.Response() response.status_code = 204 mock_request.return_value = response url = ('https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0') sched.url = url sched.cancel()
def test_local_scheduled_payload(self): p = ua.Push(None) p.audience = ua.all_ p.notification = ua.notification(alert='Hello') p.options = ua.options(10080) p.device_types = ua.all_ p.message = ua.message( title='Title', body='Body', content_type='text/html', content_encoding='utf8', ) sched = ua.ScheduledPush(None) sched.push = p sched.name = 'a schedule in device local time' sched.schedule = ua.local_scheduled_time( datetime.datetime(2015, 1, 1, 12, 0, 0)) self.assertEqual( sched.payload, { 'name': 'a schedule in device local time', 'schedule': { 'local_scheduled_time': '2015-01-01T12:00:00' }, 'push': { 'audience': 'all', 'notification': { 'alert': 'Hello' }, 'device_types': 'all', 'options': { 'expiry': 10080 }, 'message': { 'title': 'Title', 'body': 'Body', 'content_type': 'text/html', 'content_encoding': 'utf8' }, } })