Skip to content
This repository has been archived by the owner on Dec 19, 2020. It is now read-only.

Commit

Permalink
add tests for method send sms
Browse files Browse the repository at this point in the history
  • Loading branch information
sheregeda committed Apr 14, 2016
1 parent ff90b09 commit 2285ef1
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 51 deletions.
96 changes: 46 additions & 50 deletions smsaero/api.py
Expand Up @@ -3,32 +3,70 @@
import time
import requests
import hashlib
import json
from urlparse import urljoin
from datetime import datetime


class SmsAeroError(Exception):
""" Super class of all SmsAero Errors. """
pass


class DateValueError(SmsAeroError):
""" Exception raised when value date incorrectly. """
pass


class UnexpectedMessageFormat(SmsAeroError):
""" incorrect language in '...' use the cyrillic or roman alphabet. """
pass


class UnexpectedResponse(SmsAeroError):
""" Exception raised when unexpected format is received. """
pass


class InvalidUse(SmsAeroError):
""" Exception raised when API method is not used correctly. """
pass


class SmsAero(object):
URL_GATE = 'https://gate.smsaero.ru/'
URL_GATE = 'http://gate.smsaero.ru/'
SIGNATURE = 'NEWS'

def __init__(self, user, passwd, url_gate=None, sign=None):
def __init__(self, user, passwd, url_gate=URL_GATE, sign=SIGNATURE):
self.user = user
self.url_gate = url_gate if url_gate else URL_GATE
self.sign = sign if sign else SIGNATURE
self.url_gate = url_gate
self.sign = sign
self.session = requests.session()

m = hashlib.md5()
m.update(passwd)
self.passwd = m.hexdigest()

def __request(self, selector, data):
def _request(self, selector, data):
data.update({
'user': self.user,
'password': self.passwd,
'from': self.sign,
})
url = urljoin(self.url_gate, selector)
return self.session.post(url, data=data).json()
return self._check_response(self.session.post(url, data=data).content)

def _check_response(self, content):
try:
response = json.loads(content)
if response['result'] == u'reject':
raise InvalidUse(response['reason'])
return response
except ValueError:
if 'incorrect language' in content:
raise UnexpectedMessageFormat(content)
else:
raise UnexpectedResponse()

def send(self, to, text, date=None, digital=0, type_send=2, answer='json'):
data = {
Expand All @@ -43,48 +81,6 @@ def send(self, to, text, date=None, digital=0, type_send=2, answer='json'):
if isinstance(date, datetime):
data.update({'date': int(time.mktime(date.timetuple()))})
else:
raise Exception('param `date` is not datetime object')

return self.__request('/send/', data)

def send_to_group(self):
pass

def get_status(self):
pass

def check_sending(self):
pass

def get_balance(self):
pass

def check_tarif(self):
pass

def get_senders(self):
pass

def get_sign(self):
pass

def get_sign(self):
pass

def check_group(self):
pass

def add_group(self):
pass

def del_group(self):
pass

def add_phone(self):
pass

def del_phone(self):
pass
raise DateValueError('param `date` is not datetime object')

def add_blacklist(self):
pass
return self._request('/send/', data)
57 changes: 56 additions & 1 deletion tests/test_api.py
@@ -1,13 +1,68 @@
# coding: utf-8
import unittest
import httpretty
from urlparse import urljoin
from datetime import datetime, timedelta
from smsaero.api import SmsAero
from smsaero.api import (
DateValueError, UnexpectedMessageFormat, UnexpectedResponse, InvalidUse
)


class TestApi(unittest.TestCase):
def setUp(self):
self.api = SmsAero('test', 'test')

def test__check_response(self):
try:
self.api._check_response(
"incorrect language in '' use the cyrillic or roman alphabet")
self.assertTrue(False)
except UnexpectedMessageFormat:
pass

try:
self.api._check_response('some text')
self.assertTrue(False)
except UnexpectedResponse:
pass

try:
self.api._check_response(
'{"reason": "empty field", "result": "reject"}')
self.assertTrue(False)
except InvalidUse:
pass

@httpretty.activate
def test_send(self):
pass
httpretty.register_uri(
httpretty.POST,
urljoin(SmsAero.URL_GATE, '/send/'),
body='{"id": 33166386, "result": "accepted"}',
status=200,
content_type='text/json',
)

response = self.api.send('89111111111', 'message')
self.assertEqual(response['result'], u'accepted')

response = self.api.send(
'89111111111',
'message',
date=datetime.now() + timedelta(1),
)
self.assertEqual(response['result'], u'accepted')

try:
response = self.api.send(
'8911111111',
'message',
date='datetime.now() + timedelta(1)',
)
self.assertTrue(False)
except DateValueError:
pass

if __name__ == '__main__':
unittest.main()

0 comments on commit 2285ef1

Please sign in to comment.