package br.com.caelum.restfulie.http.apache; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.Iterator; import java.util.List; import org.apache.http.HttpResponse; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import br.com.caelum.restfulie.Link; import br.com.caelum.restfulie.RestClient; import br.com.caelum.restfulie.http.Header; import br.com.caelum.restfulie.http.Headers; @RunWith(MockitoJUnitRunner.class) public class ApacheHeadersTest { @Mock private HttpResponse response; @Mock private org.apache.http.Header header; @Mock private RestClient client; @Test public void shouldGetJustTheFirstInformation() { Headers headers = new ApacheHeaders(response, client); when(response.getHeaders("Content-Type")).thenReturn(headers()); assertEquals("text/html", headers.getMain("Content-Type")); } @Test public void shouldReturnEmptyWhenNoneContentTypeIsDeclared() { Headers headers = new ApacheHeaders(response, client); assertEquals("", headers.getFirst("Content-Type")); } private org.apache.http.Header[] headers() { return new org.apache.http.Header[]{ new ContentTypeHeader("text/html"), new ContentTypeHeader("text/xml") }; } @Test public void shouldReturnsAllTheLinksOfTheHeader() { //Given when(header.getName()).thenReturn("link"); when(header.getValue()).thenReturn("<http://amundsen.com/examples/mazes/2d/five-by-five/5:east>; rel=\"current\",<http://amundsen.com/examples/mazes/2d/five-by-five/0:west>; rel=\"west\",<http://amundsen.com/examples/mazes/2d/five-by-five/10:east>; rel=\"east\""); when(response.getHeaders("link")).thenReturn(new org.apache.http.Header[] {header}); //When List<Link> links = new ApacheHeaders(response,client).getLinks(); //Then assertThat(links.size(), is(equalTo(3))); assertThat(links.get(0).getHref(), is(equalTo("http://amundsen.com/examples/mazes/2d/five-by-five/5:east"))); assertThat(links.get(0).getRel(), is(equalTo("current"))); assertThat(links.get(1).getHref(), is(equalTo("http://amundsen.com/examples/mazes/2d/five-by-five/0:west"))); assertThat(links.get(1).getRel(), is(equalTo("west"))); assertThat(links.get(2).getHref(), is(equalTo("http://amundsen.com/examples/mazes/2d/five-by-five/10:east"))); assertThat(links.get(2).getRel(), is(equalTo("east"))); } @Test public void shouldReturnALinkGivenTheRelValue() { //Given when(header.getName()).thenReturn("link"); when(header.getValue()).thenReturn("<http://amundsen.com/examples/mazes/2d/five-by-five/5:east>; rel=\"current\",<http://amundsen.com/examples/mazes/2d/five-by-five/0:west>; rel=\"west\",<http://amundsen.com/examples/mazes/2d/five-by-five/10:east>; rel=\"east\""); when(response.getHeaders("link")).thenReturn(new org.apache.http.Header[] {header}); //When Link link = new ApacheHeaders(response,client).getLink("west"); //Then assertThat(link.getHref(), is(equalTo("http://amundsen.com/examples/mazes/2d/five-by-five/0:west"))); assertThat(link.getRel(), is(equalTo("west"))); }; @Test public void shouldBeIterable() { when(header.getName()).thenReturn("Accept"); when(header.getValue()).thenReturn("application/xml"); org.apache.http.Header apacheHeader2 = mock(org.apache.http.Header.class); when(apacheHeader2.getName()).thenReturn("Content-type"); when(apacheHeader2.getValue()).thenReturn("application/xml"); when(response.getAllHeaders()).thenReturn(new org.apache.http.Header[] {header,apacheHeader2}); Headers headers = new ApacheHeaders(response,client); for(Header h : headers) { System.out.println(h.getName()); System.out.println(h.getValue()); } Iterator<Header> iterator = headers.iterator(); Header header = iterator.next(); assertThat("Accept", is(equalTo(header.getName()))); assertThat("application/xml", is(equalTo(header.getValue()))); Header header2 = iterator.next(); assertThat("Content-type", is(equalTo(header2.getName()))); assertThat("application/xml", is(equalTo(header2.getValue()))); } }