001/* 002 * The contents of this file are subject to the license and copyright 003 * detailed in the LICENSE and NOTICE files at the root of the source 004 * tree. 005 */ 006package org.fcrepo.client; 007 008import static java.net.URI.create; 009import static org.fcrepo.client.FedoraHeaderConstants.ACCEPT_DATETIME; 010import static org.fcrepo.client.FedoraHeaderConstants.CACHE_CONTROL; 011import static org.fcrepo.client.FedoraHeaderConstants.LINK; 012import static org.fcrepo.client.FedoraHeaderConstants.WANT_DIGEST; 013import static org.fcrepo.client.TestUtils.baseUrl; 014import static org.fcrepo.client.HeaderHelpers.UTC_RFC_1123_FORMATTER; 015import static org.junit.Assert.assertEquals; 016import static org.junit.Assert.assertFalse; 017import static org.mockito.ArgumentMatchers.any; 018import static org.mockito.ArgumentMatchers.eq; 019import static org.mockito.Mockito.verify; 020import static org.mockito.Mockito.when; 021 022import java.net.URI; 023import java.time.Instant; 024import java.time.LocalDateTime; 025import java.time.ZoneOffset; 026 027import org.apache.http.client.methods.HttpRequestBase; 028import org.junit.Before; 029import org.junit.Test; 030import org.junit.runner.RunWith; 031import org.mockito.ArgumentCaptor; 032import org.mockito.Captor; 033import org.mockito.Mock; 034import org.mockito.junit.MockitoJUnitRunner; 035 036/** 037 * @author escowles 038 */ 039@RunWith(MockitoJUnitRunner.class) 040public class HeadBuilderTest { 041 042 private final String HISTORIC_DATETIME = 043 UTC_RFC_1123_FORMATTER.format(LocalDateTime.of(2000, 1, 1, 0, 0).atZone(ZoneOffset.UTC)); 044 045 @Mock 046 private FcrepoClient client; 047 048 @Mock 049 private FcrepoResponse fcrepoResponse; 050 051 private HeadBuilder testBuilder; 052 053 private URI uri; 054 055 @Captor 056 private ArgumentCaptor<HttpRequestBase> requestCaptor; 057 058 @Before 059 public void setUp() throws Exception { 060 when(client.executeRequest(any(URI.class), any(HttpRequestBase.class))) 061 .thenReturn(fcrepoResponse); 062 063 uri = create(baseUrl); 064 testBuilder = new HeadBuilder(uri, client); 065 } 066 067 @Test 068 public void testHead() throws Exception { 069 testBuilder.perform(); 070 071 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 072 } 073 074 @Test 075 public void testDisableRedirects() throws Exception { 076 testBuilder.disableRedirects(); 077 assertFalse(testBuilder.request.getConfig().isRedirectsEnabled()); 078 } 079 080 @Test 081 public void testWantDigest() throws Exception { 082 testBuilder.wantDigest("md5").perform(); 083 084 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 085 final HttpRequestBase request = requestCaptor.getValue(); 086 assertEquals("md5", request.getFirstHeader(WANT_DIGEST).getValue()); 087 } 088 089 @Test 090 public void testNoCache() throws Exception { 091 testBuilder.noCache().perform(); 092 093 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 094 final HttpRequestBase request = requestCaptor.getValue(); 095 assertEquals("no-cache", request.getFirstHeader(CACHE_CONTROL).getValue()); 096 } 097 098 @Test 099 public void testAcceptDatetime() throws Exception { 100 testBuilder.acceptDatetime(HISTORIC_DATETIME).perform(); 101 102 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 103 final HttpRequestBase request = requestCaptor.getValue(); 104 assertEquals(HISTORIC_DATETIME, request.getFirstHeader(ACCEPT_DATETIME).getValue()); 105 } 106 107 @Test 108 public void testAcceptDatetimeInstant() throws Exception { 109 final Instant datetime = LocalDateTime.of(2000, 1, 1, 00, 00).atZone(ZoneOffset.UTC).toInstant(); 110 testBuilder.acceptDatetime(datetime).perform(); 111 112 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 113 final HttpRequestBase request = requestCaptor.getValue(); 114 assertEquals(HISTORIC_DATETIME, request.getFirstHeader(ACCEPT_DATETIME).getValue()); 115 } 116 117 @Test 118 public void testAddHeader() throws Exception { 119 testBuilder.addHeader("my-header", "head-val").perform(); 120 121 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 122 final HttpRequestBase request = requestCaptor.getValue(); 123 assertEquals("head-val", request.getFirstHeader("my-header").getValue()); 124 } 125 126 @Test 127 public void testAddLinkHeader() throws Exception { 128 final FcrepoLink link = FcrepoLink.fromUri("http://example.com/link").type("foo").build(); 129 testBuilder.addLinkHeader(link).perform(); 130 131 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 132 final HttpRequestBase request = requestCaptor.getValue(); 133 assertEquals(link.toString(), request.getFirstHeader(LINK).getValue()); 134 } 135}