Пример #1
0
class OperaSentSMSStatusTestCase(TestCase):

    fixtures = ["user_set", "opera_sentsms_set"]

    def setUp(self):
        self.client = APIClient()
        self.client.login("api", "password")
        self.user = User.objects.get(username="******")

    def tearDown(self):
        pass

    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)
        new_smss = mock_sent_messages(self.user, count=50)
        resp = self.client.get(reverse("api:opera: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_single_status(self):
        sent_sms = SentSMS.objects.latest("created_at")
        resp = self.client.get(reverse("api:opera:sms-status", kwargs={"sms_id": sent_sms.pk}))
        from django.utils import simplejson

        json_sms = simplejson.loads(resp.content)
        self.assertEquals(json_sms["to_msisdn"], sent_sms.to_msisdn)
        self.assertEquals(json_sms["from_msisdn"], sent_sms.from_msisdn)
        self.assertEquals(json_sms["message"], sent_sms.message)
        self.assertEquals(json_sms["transport_status"], sent_sms.transport_status)
        self.assertEquals(resp.status_code, 200)

    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)
Пример #2
0
class ConversationHandlerTestCase(TestCase):

    fixtures = ['user_set']

    def setUp(self):
        self.client = APIClient()
        self.client.login(username='******', password='******')
        # create the user we need to be authorized
        self.user = User.objects.get(username='******')
        # load the yaml data
        fp = open(os.path.join(settings.APP_ROOT, 'webapp', 'api',
                               'test_data', 'devquiz.yaml'), 'r')
        self.yaml_conversation = ''.join(fp.readlines())

    def tearDown(self):
        pass

    def test_creation_of_conversation(self):
        """
        Conversations should be able to be created by POSTing to the api
        """
        resp = self.client.post(reverse('api:conversation'),
                                self.yaml_conversation,
                                content_type="application/x-yaml")
        self.assertContains(resp, 'Created', status_code=201)
        resp = self.client.get(reverse('api:conversation'))
        self.assertEquals(resp.status_code, 405)
Пример #3
0
class TechsysSMSHandlerTestCase(TestCase):
    
    fixtures = ['user_set']
    
    def setUp(self):
        self.client = APIClient()
        self.client.login(username='******', password='******')
        # create the user we need to be authorized
        self.user = User.objects.get(username='******')
    
    def test_sms_receipts(self):
        """
        E-Scape currently doesn't send us sms receipts, shouldn't respond
        """
        resp = self.client.post(reverse('api:techsys:sms-receipt'))
        self.assertEquals(resp.status_code, 405)
        resp = self.client.get(reverse('api:techsys:sms-receipt'))
        self.assertEquals(resp.status_code, 405)
    
    def test_sms_sending(self):
        self.assertEquals(SentSMS.objects.count(), 0)
        resp = self.client.post(reverse('api:techsys:sms-send'), {
            'to_msisdn': '27123456789',
            'from_msisdn': '27123456789',
            'message': 'yebo',
        })
        self.assertEquals(resp.status_code, 200)
        self.assertEquals(SentSMS.objects.count(), 1)
    
    def test_batch_sms_sending(self):
        self.assertEquals(SentSMS.objects.count(), 0)
        resp = self.client.post(reverse('api:techsys:sms-send'), {
            'to_msisdn': ['27123456780','27123456781','27123456782'],
            'from_msisdn': '27123456789',
            'message': 'yebo'
        })
        self.assertEquals(resp.status_code, 200)
        self.assertEquals(SentSMS.objects.count(), 3)
    
    def test_template_sms_sending(self):
        # not implemented
        resp = self.client.post(reverse('api:techsys:sms-template-send'))
        self.assertEquals(resp.status_code, 405)
    
    def test_send_sms_response(self):
        """
        We get the following back from E-scape when we send them an SMS, make
        sure we can parse it correctly"""
        
        good_response = """PS Bind: Message queued successfully"""
        bad_response = """Anything else really"""
        e = E_Scape("url", "bind")
        response = e.parse_response(good_response)
        self.assertRaises(Exception, e.parse_response, bad_response)
    
    def test_sms_receiving(self):
        # not implemented
        resp = self.client.post(reverse('api:techsys:sms-receive'))
        self.assertEquals(resp.status_code, 405)
Пример #4
0
class E_ScapeSMSHandlerTestCase(TestCase):
    
    fixtures = ['user_set']
    
    def setUp(self):
        self.client = APIClient()
        self.client.login(username='******', password='******')
        # create the user we need to be authorized
        self.user = User.objects.get(username='******')
    
    def test_sms_receipts(self):
        """
        E-Scape currently doesn't send us sms receipts, shouldn't respond
        """
        resp = self.client.post(reverse('api:e-scape:sms-receipt'))
        self.assertEquals(resp.status_code, 405)
        resp = self.client.get(reverse('api:e-scape:sms-receipt'))
        self.assertEquals(resp.status_code, 405)
    
    def test_sms_sending(self):
        self.assertEquals(SentSMS.objects.count(), 0)
        resp = self.client.post(reverse('api:e-scape:sms-send'), {
            'to_msisdn': '27123456789',
            'from_msisdn': '27123456789',
            'message': 'yebo',
        })
        self.assertEquals(resp.status_code, 200)
        self.assertEquals(SentSMS.objects.count(), 1)
    
    def test_batch_sms_sending(self):
        self.assertEquals(SentSMS.objects.count(), 0)
        resp = self.client.post(reverse('api:e-scape:sms-send'), {
            'to_msisdn': ['27123456780','27123456781','27123456782'],
            'from_msisdn': '27123456789',
            'message': 'yebo'
        })
        self.assertEquals(resp.status_code, 200)
        self.assertEquals(SentSMS.objects.count(), 3)
    
    def test_template_sms_sending(self):
        self.assertEquals(SentSMS.objects.count(), 0)
        resp = self.client.post(reverse('api:e-scape:sms-template-send'), {
            'to_msisdn': ['27123456780','27123456781','27123456782'],
            'template_first_name': ['Name 1', 'Name 2', 'Name 3'],
            'template_last_name': ['Surname 1', 'Surname 2', 'Surname 3'],
            'from_msisdn': '27123456789',
            'template': 'Hi {{first_name}} {{last_name}}',
        })
        self.assertEquals(resp.status_code, 200)
        self.assertEquals(SentSMS.objects.count(), 3)
    
    def test_send_sms_response(self):
        """
        We get the following back from E-scape when we send them an SMS, make
        sure we can parse it correctly"""
        
        html = """
        <table class="widefat" border="0">
            <thead>
                <tr>
                    <th>from</th>
                    <th>to</th>
                    <th>smsc</th>
                    <th>status</th>
                    <th>text</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>+35566</td>
                    <td>+44778962937</td>
                    <td>ESC-P1Celtel</td>
                    <td>0: Accepted for delivery</td>
                    <td> http://www.mobi-fee.com/link/g.lnk?ID=135</td>
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    <th>from</th>
                    <th>to</th>
                    <th>smsc</th>
                    <th>status</th>
                    <th>text</th>
                </tr>
            </tfoot>
        </table>
        """
        e = E_Scape('api_id')
        [response] = e.parse_response(html)
        self.assertEquals(response.sender, '+35566')
        self.assertEquals(response.recipient, '+44778962937')
        self.assertEquals(response.smsc, 'ESC-P1Celtel')
        self.assertEquals(response.status, ['0', 'Accepted for delivery'])
        self.assertEquals(response.text, ' http://www.mobi-fee.com/link/g.lnk?ID=135')
    
    def test_sms_receiving(self):
        self.assertEquals(ReceivedSMS.objects.count(), 0)
        resp = self.client.get(reverse('api:e-scape:sms-receive'), {
            'smsc': 'id of sms center',
            'svc': 'name of the service',
            's': 'originator',
            'r': 'recipient',
            'text': 'actual message'
        })
        self.assertEquals(resp.status_code, 200)
        # make sure we don't send any headers or content. If we do we'll 
        # automatically send a reply, currently that's not the 
        # desired behaviour.
        self.assertEquals(resp.get('X-Kannel-From', None), None)
        self.assertEquals(resp.get('X-Kannel-To', None), None)
        self.assertEquals(resp.get('X-Kannel-SMSC', None), None)
        self.assertEquals(resp.get('X-Kannel-Service', None), None)
        self.assertEquals(resp.content, '')
        
        self.assertEquals(ReceivedSMS.objects.count(), 1)
        sms = ReceivedSMS.objects.latest()
        import time
        # grmbl messy datetime comparisons
        self.assertAlmostEqual(
            time.mktime(sms.received_at.utctimetuple()),
            time.mktime(datetime.utcnow().utctimetuple()),
            places=1
        )
        self.assertEquals(sms.from_msisdn, 'originator')
        self.assertEquals(sms.to_msisdn, 'recipient')
        self.assertEquals(sms.message, 'actual message')
        self.assertEquals(sms.transport_name, 'E-scape')