Cartodb geocoder python module tests fixed

This commit is contained in:
Mario de Frutos
2016-01-21 18:07:27 +01:00
parent aced68096b
commit c74947b0a5
6 changed files with 237 additions and 163 deletions

View File

@@ -1,63 +1,90 @@
import test_helper
from mockredis import MockRedis
from cartodb_geocoder import user_service
from cartodb_geocoder import config_helper
from datetime import datetime
from datetime import datetime, date
from unittest import TestCase
from nose.tools import assert_raises
from datetime import timedelta
class TestUserService(TestCase):
NOKIA_GEOCODER = 'nokia'
NOKIA_GEOCODER = 'geocoder_here'
def setUp(self):
self.fake_redis_connection = MockRedis()
self.redis_conn = MockRedis()
def test_user_used_quota_for_a_month(self):
us = self.__build_user_service()
self.__increment_month_geocoder_uses('test_user', '20151111')
assert us.used_quota(self.NOKIA_GEOCODER, 2015, 11) == 20
def test_user_used_quota_for_a_day(self):
us = self.__build_user_service('test_user')
test_helper.increment_geocoder_uses(self.redis_conn, 'test_user',
amount=400)
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 400
def test_org_used_quota_for_a_month(self):
us = self.__build_user_service(organization=True)
self.__increment_month_geocoder_uses('test_user', '20151111', org=True)
assert us.used_quota(self.NOKIA_GEOCODER, 2015, 11) == 20
def test_org_used_quota_for_a_day(self):
us = self.__build_user_service('test_user', orgname='test_org')
test_helper.increment_geocoder_uses(self.redis_conn, 'test_user',
orgname='test_org',
amount=400)
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 400
def test_user_not_amount_in_used_quota_for_month_should_be_0(self):
us = self.__build_user_service()
assert us.used_quota(self.NOKIA_GEOCODER, 2015, 11) == 0
us = self.__build_user_service('test_user')
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 0
def test_org_not_amount_in_used_quota_for_month_should_be_0(self):
us = self.__build_user_service(organization=True)
assert us.used_quota(self.NOKIA_GEOCODER, 2015, 11) == 0
us = self.__build_user_service('test_user', orgname='test_org')
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 0
def test_should_increment_user_used_quota(self):
us = self.__build_user_service()
date = datetime.strptime("20151111", "%Y%m%d")
us.increment_service_use(self.NOKIA_GEOCODER, date=date, amount=1)
assert us.used_quota(self.NOKIA_GEOCODER, 2015, 11) == 1
assert us.used_quota(self.NOKIA_GEOCODER, 2015, 11, 11) == 1
def test_should_increment_user_used_quota_for_one_date(self):
us = self.__build_user_service('test_user')
us.increment_service_use(self.NOKIA_GEOCODER, 'success_responses')
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 1
us.increment_service_use(self.NOKIA_GEOCODER, 'empty_responses')
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 2
us.increment_service_use(self.NOKIA_GEOCODER, 'fail_responses')
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 2
def test_should_increment_org_used_quota(self):
us = self.__build_user_service(organization=True)
date = datetime.strptime("20151111", "%Y%m%d")
us.increment_service_use(self.NOKIA_GEOCODER, date=date, amount=1)
assert us.used_quota(self.NOKIA_GEOCODER, 2015, 11) == 1
assert us.used_quota(self.NOKIA_GEOCODER, 2015, 11, 11) == 1
us = self.__build_user_service('test_user', orgname='test_org')
us.increment_service_use(self.NOKIA_GEOCODER, 'success_responses')
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 1
us.increment_service_use(self.NOKIA_GEOCODER, 'empty_responses')
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 2
us.increment_service_use(self.NOKIA_GEOCODER, 'fail_responses')
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 2
def test_exception_if_not_redis_config(self):
assert_raises(Exception, user_service.UserService, 'user_id')
def test_should_increment_user_used_quota_in_for_multiples_dates(self):
two_days_ago = datetime.today() - timedelta(days=2)
one_day_ago = datetime.today() - timedelta(days=1)
one_day_after = datetime.today() + timedelta(days=1)
us = self.__build_user_service('test_user', end_date=one_day_ago)
us.increment_service_use(self.NOKIA_GEOCODER, 'success_responses',
date=date.today())
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 1
us.increment_service_use(self.NOKIA_GEOCODER, 'empty_responses',
date=one_day_ago)
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 2
us.increment_service_use(self.NOKIA_GEOCODER, 'empty_responses',
date=two_days_ago)
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 2
us.increment_service_use(self.NOKIA_GEOCODER, 'empty_responses',
date=one_day_after)
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 2
us.increment_service_use(self.NOKIA_GEOCODER, 'fail_responses')
assert us.used_quota(self.NOKIA_GEOCODER, date.today()) == 2
def __build_user_service(self, organization=False, service='nokia'):
is_organization = 'true' if organization else 'false'
user_config_json = '{{"is_organization": {0}, "entity_name": "test_user"}}'.format(is_organization)
user_config = config_helper.UserConfig(user_config_json, 'user_id')
return user_service.UserService(user_config, service, redis_connection = self.fake_redis_connection)
def __increment_month_geocoder_uses(self, entity_name, date_string, service='nokia', amount=20, org=False):
parent_tag = 'org' if org else 'user'
date = datetime.strptime(date_string, "%Y%m%d")
redis_name = "{0}:{1}:{2}:used_quota_month".format(parent_tag, entity_name, service)
redis_key_month = "{0}_{1}".format(date.year, date.month)
self.fake_redis_connection.hset(redis_name, redis_key_month, amount)
def __build_user_service(self, username, quota=100, service='heremaps',
orgname=None, soft_limit=False,
end_date=datetime.today()):
test_helper.build_redis_user_config(self.redis_conn, username,
quota=quota, service=service,
soft_limit=soft_limit,
end_date=end_date)
if orgname:
test_helper.build_redis_org_config(self.redis_conn, orgname,
quota=quota, end_date=end_date)
geocoder_config = config_helper.GeocoderConfig(self.redis_conn,
username, orgname,
'nokia_id', 'nokia_cod')
return user_service.UserService(geocoder_config, self.redis_conn)