### Question:
ApiServicesRetryStrategy implements ApiRetryStrategy { @Override public boolean shouldRetryOnError(long clientCustomerId, Throwable throwable) { return checkRateExceededErrorAndUpdateWaitTime(clientCustomerId, throwable); } ApiServicesRetryStrategy(); @VisibleForTesting  ApiServicesRetryStrategy(
      DateProvider dateProvider,
      RandomProvider waitTimeNoiseFactor,
      int maxAttemptsOnRateExceededError,
      int maxWaitTimeOnRateExceededError); static ApiServicesRetryStrategy newInstance(); @Override boolean canDoThisAttempt(int kthAttempt); @Override boolean shouldRetryOnError(long clientCustomerId, Throwable throwable); @Override long calcWaitTimeBeforeCall(long clientCustomerId, int kthAttempt, Throwable throwable); static final String MAX_ATTEMPTS_ON_RATE_EXCEEDED_ERROR_PROPERTY; @VisibleForTesting static final int MAX_ATTEMPTS_ON_RATE_EXCEEDED_ERROR_DEFAULT; static final String MAX_WAIT_TIME_ON_RATE_EXCEEDED_ERROR_PROPERTY; @VisibleForTesting static final int MAX_WAIT_TIME_ON_RATE_EXCEEDED_ERROR_DEFAULT; }### Answer:
@Test public void ApiServicesRetryStrategy_shouldRetryOnError_retriesAccountLimit() { assertThat(retries.shouldRetryOnError(123, accountException)).isTrue(); }
@Test public void ApiServicesRetryStrategy_shouldRetryOnError_retriesDeveloperLimit() { assertThat(retries.shouldRetryOnError(123, developerException)).isTrue(); }
@Test public void ApiServicesRetryStrategy_shouldRetryOnError_noRetryInvalidException() { assertThat(retries.shouldRetryOnError(123, noRetryException)).isFalse(); }