From e1a7d1751cf48b562e28cc3f04f23ee9eccd2969 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Thu, 20 Oct 2016 15:36:36 +0200 Subject: [PATCH] Fix corner case: used_quota == monthly_quota #281 --- .../cartodb_services/metrics/quota.py | 8 ++++---- .../test/metrics/test_quota.py | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/server/lib/python/cartodb_services/cartodb_services/metrics/quota.py b/server/lib/python/cartodb_services/cartodb_services/metrics/quota.py index 16c1df7..ea54508 100644 --- a/server/lib/python/cartodb_services/cartodb_services/metrics/quota.py +++ b/server/lib/python/cartodb_services/cartodb_services/metrics/quota.py @@ -93,7 +93,7 @@ class QuotaChecker: current_used = self._user_service.used_quota(service_type, today) soft_geocoding_limit = self._user_service_config.soft_geocoding_limit - if soft_geocoding_limit or (user_quota > 0 and current_used <= user_quota): + if soft_geocoding_limit or (user_quota > 0 and current_used < user_quota): return True else: return False @@ -105,7 +105,7 @@ class QuotaChecker: current_used = self._user_service.used_quota(service_type, today) soft_isolines_limit = self._user_service_config.soft_isolines_limit - if soft_isolines_limit or (user_quota > 0 and current_used <= user_quota): + if soft_isolines_limit or (user_quota > 0 and current_used < user_quota): return True else: return False @@ -117,7 +117,7 @@ class QuotaChecker: current_used = self._user_service.used_quota(service_type, today) soft_limit = self._user_service_config.soft_limit - if soft_limit or (user_quota > 0 and current_used <= user_quota): + if soft_limit or (user_quota > 0 and current_used < user_quota): return True else: return False @@ -129,7 +129,7 @@ class QuotaChecker: service_type = self._user_service_config.service_type current_used = self._user_service.used_quota(service_type, today) - if soft_limit or (user_quota > 0 and current_used <= user_quota): + if soft_limit or (user_quota > 0 and current_used < user_quota): return True else: return False diff --git a/server/lib/python/cartodb_services/test/metrics/test_quota.py b/server/lib/python/cartodb_services/test/metrics/test_quota.py index 924ccd7..8dfff65 100644 --- a/server/lib/python/cartodb_services/test/metrics/test_quota.py +++ b/server/lib/python/cartodb_services/test/metrics/test_quota.py @@ -51,6 +51,24 @@ class TestQuotaChecker(TestCase): checker = QuotaChecker(user_service_config, redis_conn) assert checker.check() == False + def test_routing_quota_check_fails_right_in_the_limit(self): + """ + I have 1000 credits and I just spent 1000 today. I should not pass + the check to perform the 1001th routing operation. + """ + user_service_config = RoutingConfigMock( + username = self.USERNAME, + organization = None, + service_type = self.SERVICE_TYPE, + monthly_quota = 1000, + period_end_date = datetime.today(), + soft_limit = False + ) + redis_conn = MockRedis() + redis_conn.zincrby(self.REDIS_KEY, self.PERIOD_END_DATE.day, 1000) + checker = QuotaChecker(user_service_config, redis_conn) + assert checker.check() == False + def test_routing_quota_check_passes_if_no_quota_but_soft_limit(self): user_service_config = RoutingConfigMock( username = self.USERNAME,