-
Cauê Thenório authoredCauê Thenório authored
postmon_test.py 3.56 KiB
# encoding: utf-8
import json
import re
import unittest
import webtest
import bottle
import CepTracker
import PostmonServer
class PostmonBaseTest(object):
expected = {
'01330000': [{
'logradouro': 'Rua Rocha',
'bairro': 'Bela Vista',
'cidade': u'São Paulo',
'estado': 'SP'
}],
'85100000': [{
'cidade': u'Jordão (Guarapuava)',
'estado': 'PR'
}],
'75064590': [{
'logradouro': 'Rua A',
'bairro': 'Vila Jaiara',
'cidade': u'Anápolis',
'estado': 'GO'
}, {
'logradouro': 'Rua A',
'bairro': 'Vila Jaiara Setor Leste',
'cidade': u'Anápolis',
'estado': 'GO'
}],
'12245230': [{
'logradouro': u'Avenida Tivoli',
'complemento': u'lado ímpar',
'bairro': u'Vila Betânia',
'cidade': u'São José dos Campos',
'estado': 'SP'
}],
'69908768': [{
'logradouro': 'Rodovia BR-364 (Rio Branco-Porto Velho)',
'complemento': u'até 5014 - lado par',
'bairro': 'Loteamento Santa Helena',
'cidade': 'Rio Branco',
'estado': 'AC'
}]
}
def test_cep_com_rua(self):
self.assertCep('01330000')
def test_cep_sem_rua(self):
self.assertCep('85100000')
def test_cep_inexistente(self):
self.assertCep('99999999')
def test_cep_com_mais_de_um_resultado(self):
self.assertCep('75064590')
def test_ceps_com_complemento(self):
self.assertCep('12245230')
self.assertCep('69908768')
class CepTrackerTest(unittest.TestCase, PostmonBaseTest):
def setUp(self):
self.tracker = CepTracker.CepTracker()
def get_cep(self, cep):
return self.tracker.track(cep)
def assertCep(self, cep):
result = self.get_cep(cep)
expected = self.expected.get(cep, [])
self.assertEqual(len(expected), len(result))
for e, r in zip(expected, result):
for key, value in e.items():
self.assertIn(key, r)
self.assertEqual(value, r[key])
self.assertIn('v_date', r)
class CepTrackerMockTest(CepTrackerTest):
'''
O CepTrackerMockTest usa arquivos locais com os resultados
obtidos nos Correios. Assim é possível saber se os testes do
CepTrackerTest quebraram por problemas no código ou por alteração
nos Correios.
'''
def setUp(self):
self.tracker = CepTracker.CepTracker()
self.tracker._request = self._request_mock
def _request_mock(self, cep):
with open('test/assets/' + cep + '.html') as f:
return f.read().decode('latin-1')
class PostmonWebTest(unittest.TestCase, PostmonBaseTest):
'''
Teste do servidor do Postmon
'''
def setUp(self):
self.app = webtest.TestApp(bottle.app())
def get_cep(self, cep):
response = self.app.get('/cep/' + cep)
return response.json
def assertCep(self, cep):
expected = self.expected.get(cep, None)
try:
result = self.get_cep(cep)
except webtest.AppError as ex:
if not expected and '404' in ex.message and cep in ex.message:
return
raise ex
for k, v in expected[0].items():
self.assertEqual(v, result[k])
self.assertNotIn('v_date', result)
class PostmonWebJSONPTest(PostmonWebTest):
'''
Teste de requisições JSONP no servidor do Postmon
'''
def setUp(self):
self.jsonp_query_key = PostmonServer.jsonp_query_key
self.jsonp_func_name = 'func_name'
super(PostmonWebJSONPTest, self).setUp()
def get_cep(self, cep):
response = self.app.get('/cep/%s?%s=%s' %
(cep, self.jsonp_query_key, self.jsonp_func_name))
regexp = re.compile('^%s\((.*)\);$' % self.jsonp_func_name)
json_data = re.findall(regexp, response.body)[0]
return json.loads(json_data)
class PostmonV1WebTest(PostmonWebTest):
'''
Teste do servidor do Postmon no /v1
'''
def get_cep(self, cep):
response = self.app.get('/v1/cep/' + cep)
return response.json