Exemplo n.º 1
0
    def test_schedules_listing(self):
        self.url1 = "https://go.urbanairship.com/api/schedules/16153636-4434-441f-bad4-86ab0f1778bc"
        self.url2 = "https://go.urbanairship.com/api/schedules/ee03b71b-5b88-4b87-93cf-2d9dc8b87e7c"

        with mock.patch.object(ua.Airship, '_request') as mock_request:
            response = requests.Response()
            response._content = json.dumps({
                "ok":
                True,
                "count":
                2,
                "schedules": [{
                    "url":
                    "https://go.urbanairship.com/api/schedules/16153636-4434-441f-bad4-86ab0f1778bc",
                    "schedule": {
                        "scheduled_time": "2018-10-09T18:43:34"
                    },
                    "name":
                    "Test1 Schedule",
                    "push": {
                        "audience": "all",
                        "device_types": "all",
                        "notification": {
                            "alert": "Hello, python!"
                        }
                    },
                    "push_ids": ["a4ed2e7b-de88-4fbc-9ccc-eb9de75b7c6e"]
                }, {
                    "url":
                    "https://go.urbanairship.com/api/schedules/ee03b71b-5b88-4b87-93cf-2d9dc8b87e7c",
                    "schedule": {
                        "local_scheduled_time": "2018-12-29T20:41:29"
                    },
                    "push": {
                        "audience": {
                            "named_user": "******"
                        },
                        "device_types": ["ios", "android", "amazon"],
                        "notification": {
                            "alert": "Hello Python Local Time"
                        },
                    },
                    "push_ids": [
                        "b13b40f3-7a2e-40c5-8df1-cb657878e983",
                        "dc9213b3-19f0-49b4-91b3-080e26f96293",
                        "3c13423d-5f2d-4fdc-8a34-c64bcd09d564",
                        "9bd0f266-6e52-474d-92ca-4688a17ebba1",
                        "d264dc5e-025d-4ed1-9cc9-ee694f1decf5",
                        "f4888ef7-672f-414e-a3a1-2b0d085f0e87",
                        "d7c977ec-be29-4b1f-89b0-13f734b9524a",
                        "82e4966a-8b45-4500-92bb-9c329f284f29",
                        "dd636364-4347-4fcc-bd8c-d5c3a60e94a0",
                        "7bc81dac-98df-4c24-994c-4129c02d8ed2",
                        "55da24c0-2a85-46d4-a8a8-689e1a1a05c1",
                        "068a89c9-aa92-47bd-ac11-ce581b69e328",
                        "ba91a074-28c5-4eaa-b45b-a76638e9425c",
                        "2d1bfe48-f7b6-4c6c-a2c7-37e0b2d300cc",
                        "410c76b8-e732-465d-bc53-04c89f82921a",
                        "e319d847-a6da-4c9c-9179-1c3d73129cf2",
                        "e4209428-9e50-4c86-a105-4dbb52b9060a",
                        "c9fbd026-7c51-4835-9acb-1fc5a45286d4",
                        "c8b914a7-6a29-4faa-a817-cf4ed2874ab8",
                        "881ad454-ff25-481e-8f58-06f02082c856",
                        "1b317ccd-25a6-481c-a200-e6cf67cf079f",
                        "fec10a5a-1b8c-4e2e-bff5-26dd5edf3bce",
                        "2a3ee2c0-490b-4f9b-92c0-bebaf45eba0a",
                        "832dbaac-135f-490d-bd07-50e787c29d18",
                        "f5bb80ab-6503-4d37-be93-eeff4f25db01",
                        "a995e469-87cb-41a3-b919-42dda38344e9",
                        "cda3e7a0-7e3a-40cf-b4bd-56e0c0f5784c",
                        "b4c7272f-f14a-4f08-8f62-e69b567c83fb",
                        "5899bb33-7a78-4793-9cbb-ca3714192ba2",
                        "c6bbfb10-95a4-4cfa-a73c-ece3b48d429c",
                        "582a224e-3f3f-4188-beab-17e963ecefbc",
                        "d5cf17e9-dfd9-40f3-8934-71f53535fb7c",
                        "86e9ec5c-207e-4a66-ab0b-cfeb4b141014",
                        "f6673b76-d2f0-472e-ac54-01554d5d97b4",
                        "e0c872c2-6adb-45d3-8f6d-2c3ba0a32257",
                        "0df19a37-4297-465f-867c-d436889f5085",
                        "f3d94825-331c-4562-b706-18d65fa914ab",
                        "eed2ce1e-e221-4d0c-bfd1-f9dd253e20e4",
                        "5e25be82-a68c-47a6-852b-911108214209",
                        "4a91e9d9-10f6-4264-bc0c-a1096722d95f",
                        "3c453695-7051-42e9-ab57-4912151c7e42",
                        "2f390cf6-fcb1-4492-b47f-fb7b58c717a6"
                    ]
                }]
            }).encode('utf-8')

            response.status_code = 200
            mock_request.return_value = response

            airship = ua.Airship(TEST_KEY, TEST_SECRET)

            schedule_listing = []

            for schedule in ua.ScheduledList(airship):
                schedule_listing.append(schedule)

            self.assertEquals(schedule_listing[0].url, self.url1)
            self.assertEquals(schedule_listing[1].url, self.url2)

            self.assertEquals(len(schedule_listing[0].push_ids), 1)
            self.assertEquals(len(schedule_listing[1].push_ids), 42)
Exemplo n.º 2
0
 def setUp(self):
     self.airship = ua.Airship(TEST_KEY, TEST_SECRET)
     self.address = '*****@*****.**'
     self.test_tags = ['one', 'two', 'three']
     self.test_group = 'test_group'
 def test_invalid_datetime(self):
     airship = ua.Airship(TEST_KEY, TEST_SECRET)
     s = ua.reports.DevicesReport(airship)
     self.assertRaises(ValueError, callableObj=s.get, date='2015-07-01')
    def test_response_list(self):
        mock_response = requests.Response()
        mock_response._content = json.dumps({
            'pushes': [{
                'push_uuid': self.uuid1,
                'sends': 0,
                'push_time': '2015-06-13 23:27:46',
                'push_type': 'UNICAST_PUSH',
                'direct_responses': 10,
                'group_id': self.uuid2
            }, {
                'push_uuid': self.uuid2,
                'sends': 1,
                'push_time': '2015-06-29 23:42:39',
                'push_type': 'UNICAST_PUSH',
                'direct_responses': 23,
                'group_id': self.uuid2
            }, {
                'push_uuid': self.uuid3,
                'sends': 2,
                'push_time': '2015-06-23 18:12:44',
                'push_type': 'UNICAST_PUSH',
                'direct_responses': 7
            }]
        }).encode('utf-8')

        ua.Airship._request = Mock()
        ua.Airship._request.side_effect = [mock_response]

        airship = ua.Airship(TEST_KEY, TEST_SECRET)
        start_date = datetime(2015, 6, 29)
        end_date = datetime(2015, 6, 30)
        return_list = ua.reports.ResponseList(airship, start_date, end_date)

        push_responses = []

        for response in return_list:
            push_responses.append(response)

        self.assertEqual(push_responses[0].push_uuid, self.uuid1)
        self.assertEqual(push_responses[0].sends, 0)
        self.assertEqual(push_responses[0].push_time,
                         datetime(2015, 6, 13, 23, 27, 46))
        self.assertEqual(push_responses[0].push_type, 'UNICAST_PUSH')
        self.assertEqual(push_responses[0].direct_responses, 10)
        self.assertEqual(push_responses[0].group_id, self.uuid2)

        self.assertEqual(push_responses[1].push_uuid, self.uuid2)
        self.assertEqual(push_responses[1].sends, 1)
        self.assertEqual(push_responses[1].push_time,
                         datetime(2015, 6, 29, 23, 42, 39))
        self.assertEqual(push_responses[1].push_type, 'UNICAST_PUSH')
        self.assertEqual(push_responses[1].direct_responses, 23)
        self.assertEqual(push_responses[1].group_id, self.uuid2)

        self.assertEqual(push_responses[2].push_uuid, self.uuid3)
        self.assertEqual(push_responses[2].sends, 2)
        self.assertEqual(push_responses[2].push_time,
                         datetime(2015, 6, 23, 18, 12, 44))
        self.assertEqual(push_responses[2].push_type, 'UNICAST_PUSH')
        self.assertEqual(push_responses[2].direct_responses, 7)
Exemplo n.º 5
0
    def test_create_with_multiple_pipelines(self):
        operation_id = "86ad9239-373d-d0a5-d5d8-04fed18f79dc"

        with mock.patch.object(ua.Airship, '_request') as mock_request:
            response = requests.Response()
            response._content = json.dumps({
                "ok":
                True,
                "operation_id":
                operation_id,
                "pipeline_urls": [
                    "https://go.urbanairship/api/pipelines/" +
                    "8b64ff83-7586-4012-adad-d34ebb7df8b4",
                    "https://go.urbanairship/api/pipelines/" +
                    "0ba14c4e-6997-4a39-9231-fdf2005d3e2e"
                ]
            })
            response._status_code = 201
            mock_request.return_value = response

            airship = ua.Airship('key', 'secret')

            enabled = True
            outcome = [{
                "push": {
                    "audience": "triggered",
                    "notification": {
                        "alert": "a witty test notification"
                    },
                    "options": {
                        "expiry": "2017-04-01T12:00:00"
                    }
                }
            }, {
                "push": {
                    "audience": "triggered",
                    "notification": {
                        "alert": "a wittier test notification"
                    },
                    "options": {
                        "expiry": "2017-04-01T12:00:00"
                    }
                }
            }]
            name = 'test_automation'
            immediate_trigger = [{
                "tag_added": "tag_youre_it"
            }, {
                "tag_removed": "tag_im_it"
            }]
            cancellation_trigger = [
                "open", {
                    "custom_event": {
                        "name": "a_custom_event"
                    }
                }
            ]
            historical_trigger = {"event": "open", "equals": 0, "days": 80}
            constraint = [{
                "rate": {
                    "pushes": 4,
                    "days": 5
                }
            }, {
                "rate": {
                    "pushes": 6,
                    "days": 10
                }
            }]
            condition = [{
                "or": [{
                    "tag": {
                        "tag_name": "VIP"
                    }
                }, {
                    "tag": {
                        "tag_name": "dont_push",
                        "negated": True
                    }
                }]
            }, {
                "and": [{
                    "tag": {
                        "tag_name": "NVVIP"
                    }
                }, {
                    "tag": {
                        "tag_name": "push",
                        "negated": True
                    }
                }]
            }]
            timing = {
                "delay": 15,
                "schedule": {
                    "type":
                    "local",
                    "miss_behavior":
                    "cancel",
                    "dayparts": [
                        {
                            "days_of_week":
                            ["tuesday", "thursday", "saturday"]
                        },
                    ],
                    "allowed_times": {
                        "start": "00:00:01",
                        "end": "23:59:59",
                    }
                }
            }

            pipeline1 = ua.Pipeline(enabled=enabled,
                                    outcome=outcome,
                                    name=name,
                                    immediate_trigger=immediate_trigger,
                                    cancellation_trigger=cancellation_trigger,
                                    historical_trigger=historical_trigger,
                                    constraint=constraint,
                                    condition=condition,
                                    timing=timing)

            pipeline2 = ua.Pipeline(enabled=enabled,
                                    outcome=outcome,
                                    name=name,
                                    immediate_trigger=immediate_trigger,
                                    cancellation_trigger=cancellation_trigger,
                                    historical_trigger=historical_trigger,
                                    constraint=constraint,
                                    condition=condition,
                                    timing=timing)

            automation = ua.Automation(airship)
            test_response = automation.create(
                [pipeline1.payload, pipeline2.payload])

            self.assertEqual(
                json.loads(test_response.content)['pipeline_urls'], [
                    "https://go.urbanairship/api/pipelines/" +
                    "8b64ff83-7586-4012-adad-d34ebb7df8b4",
                    "https://go.urbanairship/api/pipelines/" +
                    "0ba14c4e-6997-4a39-9231-fdf2005d3e2e"
                ])
Exemplo n.º 6
0
import urbanairship as ua
from celery import Celery
from celery.utils.log import get_task_logger

from norrin import settings
from .adapters import UrbanAirshipAdapter, ConsoleAdapter, LoggingAdapter, MongoDBAdapter
from .models import connection
from .services import BillService, BillActionService, UpcomingBillService, VoteService, adapters

logger = get_task_logger(__name__)
logger.setLevel(logging.INFO)

celery = Celery('norrin.notifications.tasks')
celery.config_from_object('celeryconfig')

airship = ua.Airship(settings.UA_KEY, settings.UA_MASTER)

adapters.register(UrbanAirshipAdapter(airship))
adapters.register(LoggingAdapter)


def nowstr():
    return datetime.datetime.utcnow().isoformat()

@celery.task
def run_bill_service():
    logger.info('running BillService at %s' % nowstr())
    BillService().run()


@celery.task
__author__ = 'mikba'
import urbanairship as ua
from libs.settings import *

import os.path

filepath = "/var/www/web/content/GRMTest/pending_message"
#filepath = "/var/www/html/GRMTest/pending_message"

if os.path.isfile(filepath):
	print "sending test message"
	airship = ua.Airship(AIRSHIPKEY, AIRSHIPSEC)
	push = airship.create_push()
	push.audience = ua.all_
	push.notification = ua.notification(alert="GRM Test message")
	push.device_types = ua.all_
	push.send()

	os.remove("/var/www/html/GRMTest/pending_message")
    def test_static_list(self):
        mock_response = requests.Response()
        mock_response._content = json.dumps(
            {
                'lists': [
                    {
                        'name': 'ca-testlist',
                        'description': 'this little list',
                        'extra': {'key': 'value'},
                        'created': '2015-06-29 23:42:39',
                        'last_updated': '2015-06-30 23:42:39',
                        'channel_count': 123,
                        'status': 'ready'
                    },
                    {
                        'name': 'ca-testlist2',
                        'description': 'this little list2',
                        'extra': {'key': 'value'},
                        'created': '2015-05-29 23:42:39',
                        'last_updated': '2015-05-30 23:42:39',
                        'channel_count': 23,
                        'status': 'processing'
                    },
                    {
                        'name': 'ca-testlist3',
                        'description': 'this little list3',
                        'extra': {'key': 'value'},
                        'created': '2015-04-29 23:42:39',
                        'last_updated': '2015-04-30 23:42:39',
                        'channel_count': 1500,
                        'status': 'ready'
                    },
                ]
            }
        ).encode('utf-8')

        ua.Airship._request = mock.Mock()
        ua.Airship._request.side_effect = [mock_response]

        airship = ua.Airship('key', 'secret')
        return_list = ua.devices.StaticLists(airship)

        responses = []

        for response in return_list:
            responses.append(response)

        self.assertEqual(responses[0].name, 'ca-testlist')
        self.assertEqual(responses[0].description, 'this little list')
        self.assertEqual(responses[0].extra, {'key': 'value'})
        self.assertEqual(
            responses[0].created, datetime(2015, 6, 29, 23, 42, 39)
        )
        self.assertEqual(
            responses[0].last_updated, datetime(2015, 6, 30, 23, 42, 39)
        )
        self.assertEqual(responses[0].channel_count, 123)
        self.assertEqual(responses[0].status, 'ready')

        self.assertEqual(responses[1].name, 'ca-testlist2')
        self.assertEqual(responses[1].description, 'this little list2')
        self.assertEqual(responses[1].extra, {'key': 'value'})
        self.assertEqual(
            responses[1].created, datetime(2015, 5, 29, 23, 42, 39)
        )
        self.assertEqual(
            responses[1].last_updated, datetime(2015, 5, 30, 23, 42, 39)
             )
        self.assertEqual(responses[1].channel_count, 23)
        self.assertEqual(responses[1].status, 'processing')

        self.assertEqual(responses[2].name, 'ca-testlist3')
        self.assertEqual(responses[2].description, 'this little list3')
        self.assertEqual(responses[2].extra, {'key': 'value'})
        self.assertEqual(
            responses[2].created, datetime(2015, 4, 29, 23, 42, 39)
        )
        self.assertEqual(
            responses[2].last_updated, datetime(2015, 4, 30, 23, 42, 39)
        )
        self.assertEqual(responses[2].channel_count, 1500)
        self.assertEqual(responses[2].status, 'ready')
Exemplo n.º 9
0
 def test_get_single_with_empty_id(self):
     airship = ua.Airship('key', 'secret')
     d = ua.reports.PerPushDetail(airship)
     self.assertRaises(ValueError, callableObj=d.get_single, push_id=None)
Exemplo n.º 10
0
 def test_get_batch_empty_list(self):
     airship = ua.Airship('key', 'secret')
     d = ua.reports.PerPushDetail(airship)
     self.assertRaises(ValueError, callableObj=d.get_batch, push_ids=[])
Exemplo n.º 11
0
    def test_open_channel_lookup(self):
        with mock.patch.object(ua.Airship, '_request') as mock_request:
            response = requests.Response()
            response._content = json.dumps(
                {
                    "ok": "true",
                    "channel": {
                        "channel_id": "b8f9b663-0a3b-cf45-587a-be880946e881",
                        "device_type": "open",
                        "installed": "true",
                        "named_user_id": "john_doe_123",
                        "tags": ["tag_a", "tag_b"],
                        "tag_groups": {
                            "timezone": ["America/Los_Angeles"],
                            "locale_country": ["US"],
                            "locale_language": ["en"],
                            "tag_group_1": ["tag1", "tag2"],
                            "tag_group_2": ["tag1", "tag2"]
                        },
                        "created": "2017-08-08T20:41:06",
                        "address": "*****@*****.**",
                        "opt_in": "true",
                        "open": {
                            "open_platform_name": "email",
                            "identifiers": {
                                "com.example.external_id":
                                    "df6a6b50-9843-7894-1235-12aed4489489",
                                "another_example_identifier": "some_hash"
                            }
                        },
                        "last_registration": "2017-09-01T18:00:27"
                    }
                }
            ).encode('utf-8')

            response.status_code = 200
            mock_request.return_value = response

            airship = ua.Airship(TEST_KEY, TEST_SECRET)
            channel_id = 'b8f9b663-0a3b-cf45-587a-be880946e881'
            open_channel_lookup = ua.OpenChannel(airship).lookup(channel_id)

            date_created = (
                datetime.datetime.strptime(
                    '2017-08-08T20:41:06',
                    '%Y-%m-%dT%H:%M:%S'
                )
            )
            date_last_registration = (
                datetime.datetime.strptime(
                    '2017-09-01T18:00:27',
                    '%Y-%m-%dT%H:%M:%S'
                )
            )

            self.assertEqual(open_channel_lookup.channel_id, channel_id)
            self.assertEqual(open_channel_lookup.device_type, 'open')
            self.assertEqual(open_channel_lookup.installed, 'true')
            self.assertEqual(open_channel_lookup.opt_in, 'true')
            self.assertEqual(open_channel_lookup.named_user_id, 'john_doe_123')
            self.assertEqual(open_channel_lookup.created, date_created)
            self.assertEqual(open_channel_lookup.open_platform, 'email')
            self.assertEqual(
                open_channel_lookup.last_registration, date_last_registration
            )
            self.assertEqual(
                open_channel_lookup.address, '*****@*****.**'
            )
            self.assertListEqual(open_channel_lookup.tags, ['tag_a', 'tag_b'])
            self.assertDictEqual(
                open_channel_lookup.identifiers,
                {
                    'com.example.external_id':
                        'df6a6b50-9843-7894-1235-12aed4489489',
                    'another_example_identifier': 'some_hash'
                }
            )
Exemplo n.º 12
0
import json

from flask import Flask, Response, request, render_template
from pymongo import MongoClient
from bson import json_util
from clarifai.client import ClarifaiApi
import urbanairship as ua
from urbanairship import ios

from settings_local import (CLARIFAI_APP_ID, CLARIFAI_APP_SECRET, UA_KEY,
                            UA_SECRET)

app = Flask(__name__)
db = MongoClient()["betim"]

airship = ua.Airship(UA_KEY, UA_SECRET)

clarifai_api = ClarifaiApi(app_id=CLARIFAI_APP_ID,
                           app_secret=CLARIFAI_APP_SECRET)


def jsonify(data):
    return Response(json_util.dumps(data), mimetype='application/json')


@app.route("/images", methods=['GET'])
def get_images():
    result = db.images.find({"comment": None}).sort([['date_creation', -1]])

    return jsonify({
        'images': [{
Exemplo n.º 13
0
    def test_validate_automation(self):
        with mock.patch.object(ua.Airship, '_request') as mock_request:
            response = requests.Response()
            response._content = json.dumps({"ok": True})
            response._status_code = 200
            mock_request.return_value = response

            airship = ua.Airship('key', 'secret')

            automation = ua.Automation(airship)
            pipeline = ua.Pipeline()

            pipeline.enabled = True
            pipeline.outcome = [{
                "push": {
                    "audience": "triggered",
                    "notification": {
                        "alert": "a witty test notification"
                    },
                    "options": {
                        "expiry": "2017-04-01T12:00:00"
                    }
                }
            }, {
                "push": {
                    "audience": "triggered",
                    "notification": {
                        "alert": "a wittier test notification"
                    },
                    "options": {
                        "expiry": "2017-04-01T12:00:00"
                    }
                }
            }]
            pipeline.name = 'test_automation'
            pipeline.immediate_trigger = [{
                "tag_added": "tag_youre_it"
            }, {
                "tag_removed": "tag_im_it"
            }]
            pipeline.cancellation_trigger = [
                "open", {
                    "custom_event": {
                        "name": "a_custom_event"
                    }
                }
            ]
            pipeline.historical_trigger = {
                "event": "open",
                "equals": 0,
                "days": 80
            }
            pipeline.constraint = [{
                "rate": {
                    "pushes": 4,
                    "days": 5
                }
            }, {
                "rate": {
                    "pushes": 6,
                    "days": 10
                }
            }]
            pipeline.condition = [{
                "or": [{
                    "tag": {
                        "tag_name": "VIP"
                    }
                }, {
                    "tag": {
                        "tag_name": "dont_push",
                        "negated": True
                    }
                }]
            }, {
                "and": [{
                    "tag": {
                        "tag_name": "NVVIP"
                    }
                }, {
                    "tag": {
                        "tag_name": "push",
                        "negated": True
                    }
                }]
            }]
            pipeline.timing = {
                "delay": 15,
                "schedule": {
                    "type":
                    "local",
                    "miss_behavior":
                    "cancel",
                    "dayparts": [
                        {
                            "days_of_week":
                            ["tuesday", "thursday", "saturday"]
                        },
                    ],
                    "allowed_times": {
                        "start": "00:00:01",
                        "end": "23:59:59",
                    }
                }
            }

            test_response = automation.validate(pipeline.payload)

            self.assertEqual(json.loads(test_response.content)['ok'], True)
Exemplo n.º 14
0
    def test_channel_listing(self):
        with mock.patch.object(ua.Airship, '_request') as mock_request:
            response = requests.Response()
            response._content = json.dumps({
                "ok":
                "true",
                "channels": [{
                    "channel_id": "2ce7bb20-03a1-417d-bef5-61306e3755d7",
                    "device_type": "ios",
                    "installed": "true",
                    "opt_in": "true",
                    "background": "true",
                    "push_address":
                    "28A97947F08FF0E0026EF38D157E0B1777B8DDD33D3B16130679288CEED645AF",
                    "created": "2016-08-17T23:29:52",
                    "last_registration": "2016-08-18T17:57:31",
                    "named_user_id": "null",
                    "alias": "null",
                    "tags": [],
                    "tag_groups": {
                        "ua_background_enabled": ["true"],
                        "ua_ios_app_version": ["1.0"],
                        "timezone": ["America/Los_Angeles"],
                        "ua_locale_country": ["US"],
                        "ua_locale_language": ["en"],
                        "ua_ios_model": ["iPad2,5"],
                        "ua_ios_sdk_version": ["7.2.X"],
                        "ua_ios_version": ["9.3.X"],
                        "ua_opt_in": ["true"],
                        "ua_location_enabled": ["false"]
                    },
                    "ios": {
                        "badge": 0,
                        "quiettime": {
                            "start": "null",
                            "end": "null"
                        },
                        "tz": "null"
                    }
                }, {
                    "channel_id": "4c3b6679-16f9-450a-9781-938cb3e9db7c",
                    "device_type": "android",
                    "installed": "false",
                    "opt_in": "false",
                    "background": "false",
                    "push_address":
                    "dBxM9bDfoBc:APA91bEVEmD6qDehBmYz7xHDwxuv9dYZN9iegJGUBUpV17P51JafpjYrCmSZQkJUkBuKKmizk0eXwxT3UT_gpReFs2aXnp3UdjJ_DhuH1DYBmw_HuOQjI0oklU8DWVr1aurIP2Q3K5We",
                    'created': 'None',
                    "last_registration": "2016-08-22T17:20:27",
                    "named_user_id": "null",
                    "alias": "null",
                    "tags": [],
                    "tag_groups": {
                        "ua_background_enabled": ["false"],
                        "ua_opt_in": ["false"]
                    }
                }, {
                    "channel_id": "aaabf77c-432e-4468-8b4a-0a173685e58f",
                    "device_type": "open",
                    "installed": "true",
                    "named_user_id": "cat",
                    "alias": "null",
                    "tags": ["likes-cats", "likes-demos"],
                    "tag_groups": {
                        "timezone": ["America/Los_Angeles"],
                        "ua_locale_country": ["US"],
                        "ua_locale_language": ["en"],
                        "ua_opt_in": ["true"]
                    },
                    "created": "2017-08-11T19:17:33",
                    "address": "+1 8008675309",
                    "opt_in": "true",
                    "open": {
                        "open_platform_name": "sms",
                        "identifiers": {
                            "likes-spam": "false",
                            "likes-cats": "very true"
                        }
                    },
                    "last_registration": "2017-08-11T19:17:33"
                }]
            }).encode('utf-8')

            response.status_code = 200
            mock_request.return_value = response

            airship = ua.Airship(TEST_KEY, TEST_SECRET)

            channel_responses = []

            for channel in ua.ChannelList(airship):
                channel_responses.append(channel)

            self.assertEquals(channel_responses[0].channel_id, self.channel1)
            self.assertEquals(channel_responses[1].channel_id, self.channel2)
            self.assertEquals(channel_responses[2].channel_id, self.channel3)

            self.assertEquals(channel_responses[0].push_address,
                              self.push_address1)
            self.assertEquals(channel_responses[1].push_address,
                              self.push_address2)
            self.assertEquals(channel_responses[2].push_address,
                              self.push_address3)

            self.assertEquals(channel_responses[0].device_type, 'ios')
            self.assertEquals(channel_responses[1].device_type, 'android')
            self.assertEquals(channel_responses[2].device_type, 'open')

            self.assertEquals(
                channel_responses[0].created,
                datetime.datetime.strptime('2016-08-17T23:29:52',
                                           '%Y-%m-%dT%H:%M:%S'))
            self.assertEquals(channel_responses[1].created, 'UNKNOWN')
            self.assertEquals(
                channel_responses[2].created,
                datetime.datetime.strptime('2017-08-11T19:17:33',
                                           '%Y-%m-%dT%H:%M:%S'))
Exemplo n.º 15
0
    def test_template_listing(self):
        self.template1 = 'b8f9b663-0a3b-cf45-587a-be880946e881'
        self.template2 = 'ef34a8d9-0ad7-491c-86b0-aea74da15161'

        with mock.patch.object(ua.Airship, '_request') as mock_request:
            response = requests.Response()
            response._content = json.dumps({
                'ok':
                True,
                'total_count':
                2,
                'templates': [{
                    'id':
                    'b8f9b663-0a3b-cf45-587a-be880946e881',
                    'name':
                    'Template test',
                    'description':
                    'A template description',
                    'variables': [{
                        'key': 'FIRST_NAME',
                        'name': 'First Name',
                        'description': 'Given name',
                        'default_value': None
                    }],
                    'created_at':
                    '2017-08-30T23:04:54.014Z',
                    'modified_at':
                    '2017-08-31T00:02:41.493Z',
                    'push': {
                        'notification': {
                            'alert': 'Hello {{FIRST_NAME}}, this is '
                            'a test'
                        }
                    },
                    'last_used':
                    None
                }, {
                    'id':
                    'ef34a8d9-0ad7-491c-86b0-aea74da15161',
                    'name':
                    'Welcome Message',
                    'description':
                    'A welcome message',
                    'variables': [{
                        'key': 'FIRST_NAME',
                        'name': 'First Name',
                        'description': 'Given name',
                        'default_value': None
                    }, {
                        'key': 'LAST_NAME',
                        'name': 'Last Name',
                        'description': 'Family name',
                        'default_value': 'Smith'
                    }, {
                        'key': 'TITLE',
                        'name': 'Title',
                        'description': 'e.g. Mr, Ms, Dr, etc.',
                        'default_value': ''
                    }],
                    'created_at':
                    '2017-08-31T20:18:10.924Z',
                    'modified_at':
                    '2017-08-31T20:18:10.924Z',
                    'push': {
                        'notification': {
                            'alert':
                            'Hello {{TITLE}} {{FIRST_NAME}} '
                            '{{LAST_NAME}}!'
                        }
                    },
                    'last_used':
                    '2017-08-31T21:00:00.00Z'
                }],
                'count':
                2,
                'next_page':
                None,
                'prev_page':
                None
            }).encode('utf-8')

            response.status_code = 200
            mock_request.return_value = response

            airship = ua.Airship(TEST_KEY, TEST_SECRET)

            template_responses = []

            for template in ua.TemplateList(airship):
                template_responses.append(template)

            self.assertEquals(template_responses[0].template_id,
                              self.template1)
            self.assertEquals(template_responses[1].template_id,
                              self.template2)

            self.assertEquals(
                template_responses[0].created_at,
                datetime.datetime.strptime('2017-08-30T23:04:54.014Z',
                                           '%Y-%m-%dT%H:%M:%S.%fZ'))
            self.assertEquals(
                template_responses[1].modified_at,
                datetime.datetime.strptime('2017-08-31T20:18:10.924Z',
                                           '%Y-%m-%dT%H:%M:%S.%fZ'))
            self.assertEquals(template_responses[0].last_used, 'UNKNOWN')
Exemplo n.º 16
0
 def setUp(self):
     airship = ua.Airship('key', 'secret')
     self.name = 'ce-testlist'
     self.device = ua.StaticList(airship, self.name)
Exemplo n.º 17
0
    def test_template_lookup2(self):
        with mock.patch.object(ua.Airship, '_request') as mock_request:
            response = requests.Response()
            response._content = json.dumps({
                'ok': True,
                'template': {
                    'id':
                    'ef34a8d9-0ad7-491c-86b0-aea74da15161',
                    'created_at':
                    '2017-08-30T23:04:54.014Z',
                    'modified_at':
                    '2017-08-31T00:02:41.493Z',
                    'last_used':
                    None,
                    'name':
                    'Welcome Message',
                    'description':
                    'A welcome message',
                    'variables': [{
                        'key': 'TITLE',
                        'name': 'Title',
                        'description': 'e.g. Mr, Ms, Dr, etc.',
                        'default_value': ''
                    }, {
                        'key': 'FIRST_NAME',
                        'name': 'First Name',
                        'description': 'Given name',
                        'default_value': None
                    }, {
                        'key': 'LAST_NAME',
                        'name': 'Last Name',
                        'description': 'Family name',
                        'default_value': None
                    }],
                    'push': {
                        'notification': {
                            'alert':
                            'Hello {{FIRST_NAME}}, this is your '
                            'welcome message!'
                        }
                    }
                }
            }).encode('utf-8')

            response.status_code = 200
            mock_request.return_value = response

            airship = ua.Airship(TEST_KEY, TEST_SECRET)
            template_id = 'ef34a8d9-0ad7-491c-86b0-aea74da15161'
            template_lookup = ua.Template(airship).lookup(template_id)

            date_created = (datetime.datetime.strptime(
                '2017-08-30T23:04:54.014Z', '%Y-%m-%dT%H:%M:%S.%fZ'))
            date_modified = (datetime.datetime.strptime(
                '2017-08-31T00:02:41.493Z', '%Y-%m-%dT%H:%M:%S.%fZ'))

            self.assertEqual(template_lookup.template_id, template_id)
            self.assertEqual(template_lookup.created_at, date_created)
            self.assertEqual(template_lookup.modified_at, date_modified)
            self.assertEqual(template_lookup.last_used, 'UNKNOWN')
            self.assertEqual(template_lookup.name, 'Welcome Message')
            self.assertEqual(template_lookup.description, 'A welcome message')
            self.assertListEqual(template_lookup.variables,
                                 [{
                                     'key': 'TITLE',
                                     'name': 'Title',
                                     'description': 'e.g. Mr, Ms, Dr, etc.',
                                     'default_value': ''
                                 }, {
                                     'key': 'FIRST_NAME',
                                     'name': 'First Name',
                                     'description': 'Given name',
                                     'default_value': None
                                 }, {
                                     'key': 'LAST_NAME',
                                     'name': 'Last Name',
                                     'description': 'Family name',
                                     'default_value': None
                                 }])
            self.assertDictEqual(
                template_lookup.push, {
                    'notification': {
                        'alert':
                        'Hello {{FIRST_NAME}}, this is your '
                        'welcome message!'
                    }
                })
Exemplo n.º 18
0
    def test_create_with_single_pipeline(self):
        operation_id = "86ad9239-373d-d0a5-d5d8-04fed18f79bc"

        with mock.patch.object(ua.Airship, '_request') as mock_request:
            response = requests.Response()
            response._content = json.dumps({
                "ok":
                True,
                "operation_id":
                operation_id,
                "pipeline_urls":
                ["https://go.urbanairship/api/pipelines/" + operation_id]
            })
            response._status_code = 201
            mock_request.return_value = response

            airship = ua.Airship(TEST_KEY, TEST_SECRET)

            automation = ua.Automation(airship)
            pipeline = ua.Pipeline()

            pipeline.enabled = True
            pipeline.outcome = [{
                "push": {
                    "audience": "triggered",
                    "notification": {
                        "alert": "a witty test notification"
                    },
                    "options": {
                        "expiry": "2017-04-01T12:00:00"
                    }
                }
            }, {
                "push": {
                    "audience": "triggered",
                    "notification": {
                        "alert": "a wittier test notification"
                    },
                    "options": {
                        "expiry": "2017-04-01T12:00:00"
                    }
                }
            }]
            pipeline.name = 'test_automation'
            pipeline.immediate_trigger = [{
                "tag_added": "tag_youre_it"
            }, {
                "tag_removed": "tag_im_it"
            }]
            pipeline.cancellation_trigger = [
                "open", {
                    "custom_event": {
                        "name": "a_custom_event"
                    }
                }
            ]
            pipeline.historical_trigger = {
                "event": "open",
                "equals": 0,
                "days": 80
            }
            pipeline.constraint = [{
                "rate": {
                    "pushes": 4,
                    "days": 5
                }
            }, {
                "rate": {
                    "pushes": 6,
                    "days": 10
                }
            }]
            pipeline.condition = [{
                "or": [{
                    "tag": {
                        "tag_name": "VIP"
                    }
                }, {
                    "tag": {
                        "tag_name": "dont_push",
                        "negated": True
                    }
                }]
            }, {
                "and": [{
                    "tag": {
                        "tag_name": "NVVIP"
                    }
                }, {
                    "tag": {
                        "tag_name": "push",
                        "negated": True
                    }
                }]
            }]
            pipeline.timing = {
                "delay": {
                    "seconds": 15
                },
                "schedule": {
                    "type":
                    "local",
                    "miss_behavior":
                    "cancel",
                    "dayparts": [
                        {
                            "days_of_week":
                            ["tuesday", "thursday", "saturday"]
                        },
                    ],
                    "allowed_times": {
                        "start": "00:00:01",
                        "end": "23:59:59",
                    }
                }
            }

            test_response = automation.create(pipeline.payload)

            self.assertEqual(
                json.loads(test_response.content)['operation_id'],
                operation_id)
Exemplo n.º 19
0
    def test_channel_lookup(self):
        with mock.patch.object(ua.Airship, '_request') as mock_request:
            response = requests.Response()
            response._content = json.dumps(
                {
                    'channel': {
                        'channel_id': '0492662a-1b52-4343-a1f9-c6b0c72931c0',
                        'device_type': 'ios',
                        'installed': 'false',
                        'opt_in': 'false',
                        'background': 'false',
                        'push_address': '3C0590EBCC11618723B3D4C8AA60BCFB6',
                        'created': '2014-04-17T23:35:15',
                        'last_registration': '2014-08-11T20:47:28',
                        'alias': 'null',
                        'tags': ['test_tag'],
                        'ios': {
                            'badge': 1,
                            'quiettime': {
                                'start': 'null',
                                'end': 'null'
                            },
                            'tz': 'null',
                        }
                    }
                }
            ).encode('utf-8')

            response.status_code = 200
            mock_request.return_value = response

            airship = ua.Airship('key', 'secret')
            channel_id = '0492662a-1b52-4343-a1f9-c6b0c72931c0'
            channel_lookup = ua.ChannelInfo.lookup(airship, channel_id)

            date_created = (
                datetime.datetime.strptime(
                    '2014-04-17T23:35:15',
                    '%Y-%m-%dT%H:%M:%S'
                )
            )
            last_registration_date = (
                datetime.datetime.strptime(
                    '2014-08-11T20:47:28',
                    '%Y-%m-%dT%H:%M:%S'
                )
            )

            self.assertEqual(channel_lookup.channel_id, channel_id)
            self.assertEqual(channel_lookup.device_type, 'ios')
            self.assertEqual(channel_lookup.installed, 'false')
            self.assertEqual(channel_lookup.opt_in, 'false')
            self.assertEqual(channel_lookup.background, 'false')
            self.assertEqual(channel_lookup.alias, 'null')
            self.assertEqual(channel_lookup.tags, ['test_tag'])
            self.assertEqual(channel_lookup.created, date_created)
            self.assertEqual(
                channel_lookup.push_address,
                '3C0590EBCC11618723B3D4C8AA60BCFB6'
            )
            self.assertEqual(
                channel_lookup.last_registration,
                last_registration_date
            )
            self.assertEqual(
                channel_lookup.ios,
                {
                    'badge': 1,
                    'quiettime': {'start': 'null', 'end': 'null'},
                    'tz': 'null'
                }
            )