Fix corner case: used_quota == monthly_quota #281
This commit is contained in:
@@ -93,7 +93,7 @@ class QuotaChecker:
|
|||||||
current_used = self._user_service.used_quota(service_type, today)
|
current_used = self._user_service.used_quota(service_type, today)
|
||||||
soft_geocoding_limit = self._user_service_config.soft_geocoding_limit
|
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
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
@@ -105,7 +105,7 @@ class QuotaChecker:
|
|||||||
current_used = self._user_service.used_quota(service_type, today)
|
current_used = self._user_service.used_quota(service_type, today)
|
||||||
soft_isolines_limit = self._user_service_config.soft_isolines_limit
|
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
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
@@ -117,7 +117,7 @@ class QuotaChecker:
|
|||||||
current_used = self._user_service.used_quota(service_type, today)
|
current_used = self._user_service.used_quota(service_type, today)
|
||||||
soft_limit = self._user_service_config.soft_limit
|
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
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
@@ -129,7 +129,7 @@ class QuotaChecker:
|
|||||||
service_type = self._user_service_config.service_type
|
service_type = self._user_service_config.service_type
|
||||||
current_used = self._user_service.used_quota(service_type, today)
|
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
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|||||||
@@ -51,6 +51,24 @@ class TestQuotaChecker(TestCase):
|
|||||||
checker = QuotaChecker(user_service_config, redis_conn)
|
checker = QuotaChecker(user_service_config, redis_conn)
|
||||||
assert checker.check() == False
|
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):
|
def test_routing_quota_check_passes_if_no_quota_but_soft_limit(self):
|
||||||
user_service_config = RoutingConfigMock(
|
user_service_config = RoutingConfigMock(
|
||||||
username = self.USERNAME,
|
username = self.USERNAME,
|
||||||
|
|||||||
Reference in New Issue
Block a user