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)
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)
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" ])
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')
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)
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=[])
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' } )
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': [{
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)
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'))
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')
def setUp(self): airship = ua.Airship('key', 'secret') self.name = 'ce-testlist' self.device = ua.StaticList(airship, self.name)
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!' } })
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)
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' } )