def test_that_when_exceed_rate_limit_request_fails( notify_db, notify_db_session, key_type, mocker): with freeze_time("2016-01-01 12:00:00.000000"): if key_type == 'live': api_key_type = 'normal' else: api_key_type = key_type mocker.patch('app.redis_store.exceeded_rate_limit', return_value=True) mocker.patch('app.notifications.validators.services_dao') service = create_service(notify_db, notify_db_session, restricted=True) api_key = sample_api_key(notify_db, notify_db_session, service=service, key_type=api_key_type) with pytest.raises(RateLimitError) as e: check_service_over_api_rate_limit(service, api_key) assert app.redis_store.exceeded_rate_limit.called_with( "{}-{}".format(str(service.id), api_key.key_type), service.rate_limit, 60 ) assert e.value.status_code == 429 assert e.value.message == 'Exceeded rate limit for key type {} of {} requests per {} seconds'.format( key_type.upper(), service.rate_limit, 60 ) assert e.value.fields == []
def test_should_not_rate_limit_if_limiting_is_disabled(notify_db, notify_db_session, mocker): with freeze_time("2016-01-01 12:00:00.000000"): current_app.config["API_RATE_LIMIT_ENABLED"] = False mocker.patch("app.redis_store.exceeded_rate_limit", return_value=False) mocker.patch("app.notifications.validators.services_dao") service = create_service(notify_db, notify_db_session, restricted=True) api_key = sample_api_key(notify_db, notify_db_session, service=service) check_service_over_api_rate_limit(service, api_key) assert not app.redis_store.exceeded_rate_limit.called
def test_that_when_not_exceeded_rate_limit_request_succeeds( notify_db, notify_db_session, mocker): with freeze_time("2016-01-01 12:00:00.000000"): mocker.patch("app.redis_store.exceeded_rate_limit", return_value=False) mocker.patch("app.notifications.validators.services_dao") service = create_service(notify_db, notify_db_session, restricted=True) api_key = sample_api_key(notify_db, notify_db_session, service=service, key_type="normal") check_service_over_api_rate_limit(service, api_key) assert app.redis_store.exceeded_rate_limit.called_with( "{}-{}".format(str(service.id), api_key.key_type), 3000, 60)