def test_sms_status_list_since(self): """ Sorry this test needs some explanation. In the SentSMS model I'm using Django's `auto_now` and `auto_now_add` options to automatically timestamp the `created_at` and `updated_at` values. Downside of this is that you now no longer can set these values from the code. The fixture has a `SentSMS` entry from 2009. I'm using that date to make sure the `since` parameter gives us back that entry as well instead of only the most recent 50 ones (which I create manually in this test). """ january_2009 = datetime(2009, 01, 01, 0, 0, 0) # write some new SMSs mock_sent_messages(self.user, count=50) resp = self.client.get(reverse('api:sms-status-list'), { 'since': january_2009, }) from django.utils import simplejson data = simplejson.loads(resp.content) self.assertEquals(len(data), 51) # respects the `since` parameter # overriding the `limit` parameter. # On top of the 50 newly created # entries it should also return the # 51st entry which is one from 2009 # in the fixtures file. self.assertEquals(resp.status_code, 200)
def test_sms_receipts(self): """ Receipts received from opera should update the status """ [sms] = mock_sent_messages(self.user, count=1, transport_name="Opera", transport_msg_id="001efc31") self.assertEquals(sms.transport_status, "") raw_xml_post = """ <?xml version="1.0"?> <!DOCTYPE receipts> <receipts> <receipt> <msgid>26567958</msgid> <reference>001efc31</reference> <msisdn>+27123456789</msisdn> <status>D</status> <timestamp>20080831T15:59:24</timestamp> <billed>NO</billed> </receipt> </receipts> """ resp = self.client.post(reverse("api:opera:sms-receipt"), raw_xml_post.strip(), content_type="text/xml") sms = SentSMS.objects.get(pk=sms.pk) # reload self.assertEquals(sms.transport_status, "D") self.assertEquals(resp.status_code, 201)
def test_multiple_statuses(self): smss = mock_sent_messages(self.user, count=10) sms_ids = map(lambda sms: int(sms.pk), smss) sms_ids.sort() resp = self.client.get(reverse("api:opera:sms-status-list"), {"id": sms_ids}) from django.utils import simplejson json_smss = simplejson.loads(resp.content) json_sms_ids = map(lambda sms: int(sms["id"]), json_smss) json_sms_ids.sort() self.assertEquals(sms_ids, json_sms_ids) self.assertEquals(resp.status_code, 200)
def test_sms_receipts(self): """ Receipts received from clickatell should update the status """ [sms] = mock_sent_messages(self.user, count=1, transport_name='Clickatell', transport_msg_id='a' * 32) self.assertEquals(sms.transport_status, '') resp = self.client.post(reverse('api:clickatell:sms-receipt'), { 'apiMsgId': 'a' * 32, 'cliMsgId': sms.pk, 'status': 8, # OK 'to': '27123456789', 'from': '27123456789', 'timestamp': int(time()), 'charge': 0.3 }) self.assertEquals(resp.status_code, 201) sms = SentSMS.objects.get(pk=sms.pk) # reload self.assertEquals(sms.transport_status, '8')