package br.com.caelum.restfulie.feature;
import static br.com.caelum.restfulie.feature.Features.retryWhenUnavaiable;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.net.URI;
import java.net.URISyntaxException;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import br.com.caelum.restfulie.Response;
import br.com.caelum.restfulie.Restfulie;
import br.com.caelum.restfulie.http.Request;
import br.com.caelum.restfulie.request.RequestChain;
@RunWith(MockitoJUnitRunner.class)
public class RetryWhenUnavailableTest {
@Mock
private Request request;
@Mock
private RequestChain chain;
@Mock
private Response response;
@Test
public void shouldRetryWhenCode503() throws URISyntaxException {
String verb = "get";
URI uri = new URI("http://someplace.com");
when(chain.next(request, verb, uri, null)).thenReturn(response);
when(response.getCode()).thenReturn(503);
new RetryWhenUnavailable().process(chain, request, verb, uri, null);
verify(chain, times(2)).next(request, verb, uri, null);
}
@Test
public void shouldNotRetryWhenUnkonwCode() throws URISyntaxException {
String verb = "get";
URI uri = new URI("http://someplace.com");
when(chain.next(request, verb, uri, null)).thenReturn(response);
when(response.getCode()).thenReturn(200);
new RetryWhenUnavailable().process(chain, request, verb, uri, null);
verify(chain, times(1)).next(request, verb, uri, null);
}
@Ignore
public void dslText() {
Restfulie.at("here").with(retryWhenUnavaiable()).get();
}
}