class TestBillableCreation(TestCase): def setUp(self): super(TestBillableCreation, self).setUp() self.domain = 'sms_test_domain' self.mobile_backend = SQLTropoBackend( name="TEST", is_global=False, domain=self.domain, hq_api_id=SQLTropoBackend.get_api_id() ) self.mobile_backend.save() self.text_short = "This is a test text message under 160 characters." self.text_long = ( "This is a test text message that's over 160 characters in length. " "Or at least it will be. Thinking about kale. I like kale. Kale is " "a fantastic thing. Also bass music. I really like dat bass." ) def _get_fake_sms(self, text): msg = SMS( domain=self.domain, phone_number='+16175555454', direction=OUTGOING, date=datetime.utcnow(), backend_id=self.mobile_backend.couch_id, text=text ) msg.save() return msg def test_creation(self): msg = self._get_fake_sms(self.text_short) create_billable_for_sms(msg, delay=False) sms_billables = SmsBillable.objects.filter( domain=self.domain, log_id=msg.couch_id ) self.assertEqual(sms_billables.count(), 1) self.assertEqual(sms_billables[0].multipart_count, 1) def test_long_creation(self): msg = self._get_fake_sms(self.text_long) create_billable_for_sms(msg, delay=False) sms_billables = SmsBillable.objects.filter( domain=self.domain, log_id=msg.couch_id ) self.assertEqual(sms_billables.count(), 1) self.assertEqual(sms_billables[0].multipart_count, 2) def tearDown(self): self.mobile_backend.delete() super(TestBillableCreation, self).tearDown()
def setUp(self): super(TestBillableCreation, self).setUp() self.domain = 'sms_test_domain' self.mobile_backend = SQLTropoBackend( name="TEST", is_global=False, domain=self.domain, hq_api_id=SQLTropoBackend.get_api_id()) self.mobile_backend.save() self.text_short = "This is a test text message under 160 characters." self.text_long = ( "This is a test text message that's over 160 characters in length. " "Or at least it will be. Thinking about kale. I like kale. Kale is " "a fantastic thing. Also bass music. I really like dat bass.")
def bootstrap_tropo_gateway(apps): currency = (apps.get_model('accounting', 'Currency') if apps else Currency).objects.get(code="USD") sms_gateway_fee_class = apps.get_model( 'smsbillables', 'SmsGatewayFee') if apps else SmsGatewayFee sms_gateway_fee_criteria_class = apps.get_model( 'smsbillables', 'SmsGatewayFeeCriteria') if apps else SmsGatewayFeeCriteria SmsGatewayFee.create_new( SQLTropoBackend.get_api_id(), INCOMING, 0.01, currency=currency, fee_class=sms_gateway_fee_class, criteria_class=sms_gateway_fee_criteria_class, ) rates_csv = open( 'corehq/apps/smsbillables/management/' 'pricing_data/tropo_international_rates_2013-12-19.csv', 'r', encoding='utf-8') for line in rates_csv.readlines(): data = line.split(',') if data[1] == 'Fixed Line' and data[4] != '\n': SmsGatewayFee.create_new( SQLTropoBackend.get_api_id(), OUTGOING, float(data[4].rstrip()), country_code=int(data[2]), currency=currency, fee_class=sms_gateway_fee_class, criteria_class=sms_gateway_fee_criteria_class, ) rates_csv.close() # Fee for invalid phonenumber SmsGatewayFee.create_new( SQLTropoBackend.get_api_id(), OUTGOING, 0.01, country_code=None, currency=currency, fee_class=sms_gateway_fee_class, criteria_class=sms_gateway_fee_criteria_class, ) log_smsbillables_info("Updated Tropo gateway fees.")
def setUp(self): self.domain = 'sms_test_domain' self.mobile_backend = SQLTropoBackend( name="TEST", is_global=False, domain=self.domain, hq_api_id=SQLTropoBackend.get_api_id() ) self.mobile_backend.save() self.text_short = "This is a test text message under 160 characters." self.text_long = ( "This is a test text message that's over 160 characters in length. " "Or at least it will be. Thinking about kale. I like kale. Kale is " "a fantastic thing. Also bass music. I really like dat bass." )
def ivr_in(request): """ Handles tropo call requests """ from tropo import Tropo if request.method == "POST": data = json.loads(request.body.decode('utf-8')) phone_number = data["session"]["from"]["id"] if phone_number: cleaned_number = strip_plus(phone_number) v = PhoneNumber.by_extensive_search(cleaned_number) else: v = None # Save the call entry msg = Call( phone_number=cleaned_number, direction=INCOMING, date=datetime.utcnow(), backend_api=SQLTropoBackend.get_api_id(), ) if v is not None: msg.domain = v.domain msg.couch_recipient_doc_type = v.owner_doc_type msg.couch_recipient = v.owner_id msg.save() t = Tropo() t.reject() return HttpResponse(t.RenderJson()) else: return HttpResponseBadRequest("Bad Request")
def sms_in(request, backend_id=None): """ Handles tropo messaging requests """ from tropo import Tropo if request.method == "POST": data = json.loads(request.body.decode('utf-8')) session = data["session"] # Handle when Tropo posts to us to send an SMS if "parameters" in session: params = session["parameters"] if ("_send_sms" in params) and ("numberToDial" in params) and ("msg" in params): numberToDial = params["numberToDial"] msg = params["msg"] t = Tropo() t.call(to = numberToDial, network = "SMS") t.say(msg) return HttpResponse(t.RenderJson()) # Handle incoming SMS phone_number = None text = None if "from" in session: phone_number = session["from"]["id"] if "initialText" in session: text = session["initialText"] if phone_number is not None and len(phone_number) > 1: if phone_number[0] == "+": phone_number = phone_number[1:] incoming_sms(phone_number, text, SQLTropoBackend.get_api_id(), backend_id=backend_id) t = Tropo() t.hangup() return HttpResponse(t.RenderJson()) else: return HttpResponseBadRequest("Bad Request")
def setUpClass(cls): super(TropoLogCallTestCase, cls).setUpClass() cls.tropo_backend = SQLTropoBackend.objects.create( name='TROPO', is_global=True, hq_api_id=SQLTropoBackend.get_api_id() )
def ivr_in(request): """ Handles tropo call requests """ from tropo import Tropo if request.method == "POST": data = json.loads(request.body) phone_number = data["session"]["from"]["id"] if phone_number: cleaned_number = strip_plus(phone_number) v = PhoneNumber.by_extensive_search(cleaned_number) else: v = None # Save the call entry msg = Call( phone_number=cleaned_number, direction=INCOMING, date=datetime.utcnow(), backend_api=SQLTropoBackend.get_api_id(), ) if v is not None: msg.domain = v.domain msg.couch_recipient_doc_type = v.owner_doc_type msg.couch_recipient = v.owner_id msg.save() t = Tropo() t.reject() return HttpResponse(t.RenderJson()) else: return HttpResponseBadRequest("Bad Request")
def sms_in(request, backend_id=None): """ Handles tropo messaging requests """ from tropo import Tropo if request.method == "POST": data = json.loads(request.body) session = data["session"] # Handle when Tropo posts to us to send an SMS if "parameters" in session: params = session["parameters"] if ("_send_sms" in params) and ("numberToDial" in params) and ("msg" in params): numberToDial = params["numberToDial"] msg = params["msg"] t = Tropo() t.call(to = numberToDial, network = "SMS") t.say(msg) return HttpResponse(t.RenderJson()) # Handle incoming SMS phone_number = None text = None if "from" in session: phone_number = session["from"]["id"] if "initialText" in session: text = session["initialText"] if phone_number is not None and len(phone_number) > 1: if phone_number[0] == "+": phone_number = phone_number[1:] incoming_sms(phone_number, text, SQLTropoBackend.get_api_id(), backend_id=backend_id) t = Tropo() t.hangup() return HttpResponse(t.RenderJson()) else: return HttpResponseBadRequest("Bad Request")
def bootstrap_tropo_gateway(apps): currency = (apps.get_model("accounting", "Currency") if apps else Currency).objects.get(code="USD") sms_gateway_fee_class = apps.get_model("smsbillables", "SmsGatewayFee") if apps else SmsGatewayFee sms_gateway_fee_criteria_class = ( apps.get_model("smsbillables", "SmsGatewayFeeCriteria") if apps else SmsGatewayFeeCriteria ) SmsGatewayFee.create_new( SQLTropoBackend.get_api_id(), INCOMING, 0.01, currency=currency, fee_class=sms_gateway_fee_class, criteria_class=sms_gateway_fee_criteria_class, ) rates_csv = open( "corehq/apps/smsbillables/management/" "pricing_data/tropo_international_rates_2013-12-19.csv", "r" ) for line in rates_csv.readlines(): data = line.split(",") if data[1] == "Fixed Line" and data[4] != "\n": SmsGatewayFee.create_new( SQLTropoBackend.get_api_id(), OUTGOING, float(data[4].rstrip()), country_code=int(data[2]), currency=currency, fee_class=sms_gateway_fee_class, criteria_class=sms_gateway_fee_criteria_class, ) rates_csv.close() # Fee for invalid phonenumber SmsGatewayFee.create_new( SQLTropoBackend.get_api_id(), OUTGOING, 0.01, country_code=None, currency=currency, fee_class=sms_gateway_fee_class, criteria_class=sms_gateway_fee_criteria_class, ) log_smsbillables_info("Updated Tropo gateway fees.")
def bootstrap_tropo_gateway(apps): currency = (apps.get_model('accounting', 'Currency') if apps else Currency).objects.get(code="USD") sms_gateway_fee_class = apps.get_model('smsbillables', 'SmsGatewayFee') if apps else SmsGatewayFee sms_gateway_fee_criteria_class = apps.get_model('smsbillables', 'SmsGatewayFeeCriteria') if apps else SmsGatewayFeeCriteria SmsGatewayFee.create_new( SQLTropoBackend.get_api_id(), INCOMING, 0.01, currency=currency, fee_class=sms_gateway_fee_class, criteria_class=sms_gateway_fee_criteria_class, ) rates_csv = open('corehq/apps/smsbillables/management/' 'pricing_data/tropo_international_rates_2013-12-19.csv', 'r', encoding='utf-8') for line in rates_csv.readlines(): data = line.split(',') if data[1] == 'Fixed Line' and data[4] != '\n': SmsGatewayFee.create_new( SQLTropoBackend.get_api_id(), OUTGOING, float(data[4].rstrip()), country_code=int(data[2]), currency=currency, fee_class=sms_gateway_fee_class, criteria_class=sms_gateway_fee_criteria_class, ) rates_csv.close() # Fee for invalid phonenumber SmsGatewayFee.create_new( SQLTropoBackend.get_api_id(), OUTGOING, 0.01, country_code=None, currency=currency, fee_class=sms_gateway_fee_class, criteria_class=sms_gateway_fee_criteria_class, ) log_smsbillables_info("Updated Tropo gateway fees.")
def setUpClass(cls): super(TropoLogCallTestCase, cls).setUpClass() cls.tropo_backend = SQLTropoBackend.objects.create( name='TROPO', is_global=True, hq_api_id=SQLTropoBackend.get_api_id())
def setUp(self): super(AllBackendTest, self).setUp() self.domain_obj = Domain(name='all-backend-test') self.domain_obj.save() self.create_account_and_subscription(self.domain_obj.name) self.domain_obj = Domain.get(self.domain_obj._id) self.test_phone_number = '99912345' self.contact1 = CommCareCase(domain=self.domain_obj.name) self.contact1.set_case_property('contact_phone_number', self.test_phone_number) self.contact1.set_case_property('contact_phone_number_is_verified', '1') self.contact1.save() self.contact1 = CommConnectCase.wrap(self.contact1.to_json()) # For use with megamobile only self.contact2 = CommCareCase(domain=self.domain_obj.name) self.contact2.set_case_property('contact_phone_number', '63%s' % self.test_phone_number) self.contact2.set_case_property('contact_phone_number_is_verified', '1') self.contact2.save() self.contact2 = CommConnectCase.wrap(self.contact2.to_json()) self.unicel_backend = SQLUnicelBackend( name='UNICEL', is_global=True, hq_api_id=SQLUnicelBackend.get_api_id() ) self.unicel_backend.save() self.mach_backend = SQLMachBackend( name='MACH', is_global=True, hq_api_id=SQLMachBackend.get_api_id() ) self.mach_backend.save() self.tropo_backend = SQLTropoBackend( name='TROPO', is_global=True, hq_api_id=SQLTropoBackend.get_api_id() ) self.tropo_backend.save() self.http_backend = SQLHttpBackend( name='HTTP', is_global=True, hq_api_id=SQLHttpBackend.get_api_id() ) self.http_backend.save() self.telerivet_backend = SQLTelerivetBackend( name='TELERIVET', is_global=True, hq_api_id=SQLTelerivetBackend.get_api_id() ) self.telerivet_backend.set_extra_fields( **dict( webhook_secret='telerivet-webhook-secret' ) ) self.telerivet_backend.save() self.test_backend = SQLTestSMSBackend( name='TEST', is_global=True, hq_api_id=SQLTestSMSBackend.get_api_id() ) self.test_backend.save() self.grapevine_backend = SQLGrapevineBackend( name='GRAPEVINE', is_global=True, hq_api_id=SQLGrapevineBackend.get_api_id() ) self.grapevine_backend.save() self.twilio_backend = SQLTwilioBackend( name='TWILIO', is_global=True, hq_api_id=SQLTwilioBackend.get_api_id() ) self.twilio_backend.save() self.megamobile_backend = SQLMegamobileBackend( name='MEGAMOBILE', is_global=True, hq_api_id=SQLMegamobileBackend.get_api_id() ) self.megamobile_backend.save() self.smsgh_backend = SQLSMSGHBackend( name='SMSGH', is_global=True, hq_api_id=SQLSMSGHBackend.get_api_id() ) self.smsgh_backend.save() self.apposit_backend = SQLAppositBackend( name='APPOSIT', is_global=True, hq_api_id=SQLAppositBackend.get_api_id() ) self.apposit_backend.save() self.sislog_backend = SQLSislogBackend( name='SISLOG', is_global=True, hq_api_id=SQLSislogBackend.get_api_id() ) self.sislog_backend.save() self.yo_backend = SQLYoBackend( name='YO', is_global=True, hq_api_id=SQLYoBackend.get_api_id() ) self.yo_backend.save()
class AllBackendTest(BaseSMSTest): def setUp(self): super(AllBackendTest, self).setUp() self.domain_obj = Domain(name='all-backend-test') self.domain_obj.save() self.create_account_and_subscription(self.domain_obj.name) self.domain_obj = Domain.get(self.domain_obj._id) self.test_phone_number = '99912345' self.contact1 = CommCareCase(domain=self.domain_obj.name) self.contact1.set_case_property('contact_phone_number', self.test_phone_number) self.contact1.set_case_property('contact_phone_number_is_verified', '1') self.contact1.save() self.contact1 = CommConnectCase.wrap(self.contact1.to_json()) # For use with megamobile only self.contact2 = CommCareCase(domain=self.domain_obj.name) self.contact2.set_case_property('contact_phone_number', '63%s' % self.test_phone_number) self.contact2.set_case_property('contact_phone_number_is_verified', '1') self.contact2.save() self.contact2 = CommConnectCase.wrap(self.contact2.to_json()) self.unicel_backend = SQLUnicelBackend( name='UNICEL', is_global=True, hq_api_id=SQLUnicelBackend.get_api_id() ) self.unicel_backend.save() self.mach_backend = SQLMachBackend( name='MACH', is_global=True, hq_api_id=SQLMachBackend.get_api_id() ) self.mach_backend.save() self.tropo_backend = SQLTropoBackend( name='TROPO', is_global=True, hq_api_id=SQLTropoBackend.get_api_id() ) self.tropo_backend.save() self.http_backend = SQLHttpBackend( name='HTTP', is_global=True, hq_api_id=SQLHttpBackend.get_api_id() ) self.http_backend.save() self.telerivet_backend = SQLTelerivetBackend( name='TELERIVET', is_global=True, hq_api_id=SQLTelerivetBackend.get_api_id() ) self.telerivet_backend.set_extra_fields( **dict( webhook_secret='telerivet-webhook-secret' ) ) self.telerivet_backend.save() self.test_backend = SQLTestSMSBackend( name='TEST', is_global=True, hq_api_id=SQLTestSMSBackend.get_api_id() ) self.test_backend.save() self.grapevine_backend = SQLGrapevineBackend( name='GRAPEVINE', is_global=True, hq_api_id=SQLGrapevineBackend.get_api_id() ) self.grapevine_backend.save() self.twilio_backend = SQLTwilioBackend( name='TWILIO', is_global=True, hq_api_id=SQLTwilioBackend.get_api_id() ) self.twilio_backend.save() self.megamobile_backend = SQLMegamobileBackend( name='MEGAMOBILE', is_global=True, hq_api_id=SQLMegamobileBackend.get_api_id() ) self.megamobile_backend.save() self.smsgh_backend = SQLSMSGHBackend( name='SMSGH', is_global=True, hq_api_id=SQLSMSGHBackend.get_api_id() ) self.smsgh_backend.save() self.apposit_backend = SQLAppositBackend( name='APPOSIT', is_global=True, hq_api_id=SQLAppositBackend.get_api_id() ) self.apposit_backend.save() self.sislog_backend = SQLSislogBackend( name='SISLOG', is_global=True, hq_api_id=SQLSislogBackend.get_api_id() ) self.sislog_backend.save() self.yo_backend = SQLYoBackend( name='YO', is_global=True, hq_api_id=SQLYoBackend.get_api_id() ) self.yo_backend.save() def _test_outbound_backend(self, backend, msg_text, mock_send): SQLMobileBackendMapping.set_default_domain_backend(self.domain_obj.name, backend) send_sms(self.domain_obj.name, None, self.test_phone_number, msg_text) sms = SMS.objects.get( domain=self.domain_obj.name, direction='O', text=msg_text ) self.assertTrue(mock_send.called) msg_arg = mock_send.call_args[0][0] self.assertEqual(msg_arg.date, sms.date) self.assertEqual(sms.backend_api, backend.hq_api_id) self.assertEqual(sms.backend_id, backend.couch_id) def _verify_inbound_request(self, backend_api_id, msg_text, backend_couch_id=None): sms = SMS.objects.get( domain=self.domain_obj.name, direction='I', text=msg_text ) self.assertEqual(sms.backend_api, backend_api_id) if backend_couch_id: self.assertEqual(sms.backend_id, backend_couch_id) def _simulate_inbound_request_with_payload(self, url, content_type, payload): response = Client().post(url, payload, content_type=content_type) self.assertEqual(response.status_code, 200) def _simulate_inbound_request(self, url, phone_param, msg_param, msg_text, post=False, additional_params=None, expected_response_code=200): fcn = Client().post if post else Client().get payload = { phone_param: self.test_phone_number, msg_param: msg_text, } if additional_params: payload.update(additional_params) response = fcn(url, payload) self.assertEqual(response.status_code, expected_response_code) @patch('corehq.messaging.smsbackends.unicel.models.SQLUnicelBackend.send') @patch('corehq.messaging.smsbackends.mach.models.SQLMachBackend.send') @patch('corehq.messaging.smsbackends.tropo.models.SQLTropoBackend.send') @patch('corehq.messaging.smsbackends.http.models.SQLHttpBackend.send') @patch('corehq.messaging.smsbackends.telerivet.models.SQLTelerivetBackend.send') @patch('corehq.messaging.smsbackends.test.models.SQLTestSMSBackend.send') @patch('corehq.messaging.smsbackends.grapevine.models.SQLGrapevineBackend.send') @patch('corehq.messaging.smsbackends.twilio.models.SQLTwilioBackend.send') @patch('corehq.messaging.smsbackends.megamobile.models.SQLMegamobileBackend.send') @patch('corehq.messaging.smsbackends.smsgh.models.SQLSMSGHBackend.send') @patch('corehq.messaging.smsbackends.apposit.models.SQLAppositBackend.send') @patch('corehq.messaging.smsbackends.sislog.models.SQLSislogBackend.send') @patch('corehq.messaging.smsbackends.yo.models.SQLYoBackend.send') def test_outbound_sms( self, yo_send, sislog_send, apposit_send, smsgh_send, megamobile_send, twilio_send, grapevine_send, test_send, telerivet_send, http_send, tropo_send, mach_send, unicel_send): self._test_outbound_backend(self.unicel_backend, 'unicel test', unicel_send) self._test_outbound_backend(self.mach_backend, 'mach test', mach_send) self._test_outbound_backend(self.tropo_backend, 'tropo test', tropo_send) self._test_outbound_backend(self.http_backend, 'http test', http_send) self._test_outbound_backend(self.telerivet_backend, 'telerivet test', telerivet_send) self._test_outbound_backend(self.test_backend, 'test test', test_send) self._test_outbound_backend(self.grapevine_backend, 'grapevine test', grapevine_send) self._test_outbound_backend(self.twilio_backend, 'twilio test', twilio_send) self._test_outbound_backend(self.megamobile_backend, 'megamobile test', megamobile_send) self._test_outbound_backend(self.smsgh_backend, 'smsgh test', smsgh_send) self._test_outbound_backend(self.apposit_backend, 'apposit test', apposit_send) self._test_outbound_backend(self.sislog_backend, 'sislog test', sislog_send) self._test_outbound_backend(self.yo_backend, 'yo test', yo_send) def test_unicel_inbound_sms(self): self._simulate_inbound_request('/unicel/in/', phone_param=InboundParams.SENDER, msg_param=InboundParams.MESSAGE, msg_text='unicel test') self._verify_inbound_request(self.unicel_backend.get_api_id(), 'unicel test') def test_tropo_inbound_sms(self): tropo_data = {'session': {'from': {'id': self.test_phone_number}, 'initialText': 'tropo test'}} self._simulate_inbound_request_with_payload('/tropo/sms/', content_type='text/json', payload=json.dumps(tropo_data)) self._verify_inbound_request(self.tropo_backend.get_api_id(), 'tropo test') def test_telerivet_inbound_sms(self): additional_params = { 'event': 'incoming_message', 'message_type': 'sms', 'secret': self.telerivet_backend.config.webhook_secret } self._simulate_inbound_request('/telerivet/in/', phone_param='from_number_e164', msg_param='content', msg_text='telerivet test', post=True, additional_params=additional_params) self._verify_inbound_request(self.telerivet_backend.get_api_id(), 'telerivet test') @override_settings(SIMPLE_API_KEYS={'grapevine-test': 'grapevine-api-key'}) def test_grapevine_inbound_sms(self): xml = """ <gviSms> <smsDateTime>2015-10-12T12:00:00</smsDateTime> <cellNumber>99912345</cellNumber> <content>grapevine test</content> </gviSms> """ payload = urlencode({'XML': xml}) self._simulate_inbound_request_with_payload( '/gvi/api/sms/?apiuser=grapevine-test&apikey=grapevine-api-key', content_type='application/x-www-form-urlencoded', payload=payload) self._verify_inbound_request(self.grapevine_backend.get_api_id(), 'grapevine test') def test_twilio_inbound_sms(self): url = '/twilio/sms/%s' % self.twilio_backend.inbound_api_key self._simulate_inbound_request(url, phone_param='From', msg_param='Body', msg_text='twilio test', post=True) self._verify_inbound_request(self.twilio_backend.get_api_id(), 'twilio test', backend_couch_id=self.twilio_backend.couch_id) def test_twilio_401_response(self): start_count = SMS.objects.count() self._simulate_inbound_request('/twilio/sms/xxxxx', phone_param='From', msg_param='Body', msg_text='twilio test', post=True, expected_response_code=401) end_count = SMS.objects.count() self.assertEqual(start_count, end_count) def test_megamobile_inbound_sms(self): self._simulate_inbound_request('/megamobile/sms/', phone_param='cel', msg_param='msg', msg_text='megamobile test') self._verify_inbound_request(self.megamobile_backend.get_api_id(), 'megamobile test') def test_sislog_inbound_sms(self): self._simulate_inbound_request('/sislog/in/', phone_param='sender', msg_param='msgdata', msg_text='sislog test') self._verify_inbound_request(self.sislog_backend.get_api_id(), 'sislog test') def test_yo_inbound_sms(self): self._simulate_inbound_request('/yo/sms/', phone_param='sender', msg_param='message', msg_text='yo test') self._verify_inbound_request(self.yo_backend.get_api_id(), 'yo test') def test_smsgh_inbound_sms(self): user = ApiUser.create('smsgh-api-key', 'smsgh-api-key', permissions=[PERMISSION_POST_SMS]) user.save() self._simulate_inbound_request('/smsgh/sms/smsgh-api-key/', phone_param='snr', msg_param='msg', msg_text='smsgh test') self._verify_inbound_request('SMSGH', 'smsgh test') user.delete() def test_apposit_inbound_sms(self): user = ApiUser.create('apposit-api-key', 'apposit-api-key', permissions=[PERMISSION_POST_SMS]) user.save() self._simulate_inbound_request( '/apposit/in/apposit-api-key/', phone_param='fromAddress', msg_param='content', msg_text='apposit test', post=True, additional_params={'channel': 'SMS'} ) self._verify_inbound_request('APPOSIT', 'apposit test') user.delete() def tearDown(self): delete_domain_phone_numbers(self.domain_obj.name) self.contact1.delete() self.contact2.delete() self.domain_obj.delete() self.unicel_backend.delete() self.mach_backend.delete() self.tropo_backend.delete() self.http_backend.delete() self.telerivet_backend.delete() self.test_backend.delete() self.grapevine_backend.delete() self.twilio_backend.delete() self.megamobile_backend.delete() self.smsgh_backend.delete() self.apposit_backend.delete() self.sislog_backend.delete() self.yo_backend.delete() super(AllBackendTest, self).tearDown()