예제 #1
0
    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'
            )
예제 #2
0
    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()
예제 #3
0
    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",
                    },
                }
            })
예제 #4
0
    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'
                )
            )
예제 #5
0
    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']
                 }
             }
         }
     )
예제 #7
0
    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()
예제 #8
0
    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'
                    },
                }
            })