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.CONTENT_TYPE; 010import static org.fcrepo.client.FedoraHeaderConstants.IF_STATE_TOKEN; 011import static org.fcrepo.client.FedoraHeaderConstants.LINK; 012import static org.fcrepo.client.TestUtils.baseUrl; 013import static org.junit.Assert.assertEquals; 014import static org.mockito.ArgumentMatchers.any; 015import static org.mockito.ArgumentMatchers.eq; 016import static org.mockito.Mockito.mock; 017import static org.mockito.Mockito.verify; 018import static org.mockito.Mockito.when; 019 020import java.io.InputStream; 021import java.net.URI; 022 023import org.apache.http.HttpEntity; 024import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; 025import org.apache.http.client.methods.HttpRequestBase; 026import org.junit.Before; 027import org.junit.Test; 028import org.junit.runner.RunWith; 029import org.mockito.ArgumentCaptor; 030import org.mockito.Captor; 031import org.mockito.Mock; 032import org.mockito.junit.MockitoJUnitRunner; 033 034/** 035 * @author bbpennel 036 */ 037@RunWith(MockitoJUnitRunner.class) 038public class PatchBuilderTest { 039 040 @Mock 041 private FcrepoClient client; 042 043 @Mock 044 private FcrepoResponse fcrepoResponse; 045 046 @Captor 047 private ArgumentCaptor<HttpRequestBase> requestCaptor; 048 049 private PatchBuilder testBuilder; 050 051 private URI uri; 052 053 @Before 054 public void setUp() throws Exception { 055 when(client.executeRequest(any(URI.class), any(HttpRequestBase.class))) 056 .thenReturn(fcrepoResponse); 057 058 uri = create(baseUrl); 059 testBuilder = new PatchBuilder(uri, client); 060 } 061 062 @Test 063 public void testWithBodyDefaultType() throws Exception { 064 final InputStream bodyStream = mock(InputStream.class); 065 066 testBuilder.body(bodyStream) 067 .perform(); 068 069 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 070 071 final HttpEntityEnclosingRequestBase request = (HttpEntityEnclosingRequestBase) requestCaptor.getValue(); 072 final HttpEntity bodyEntity = request.getEntity(); 073 assertEquals(bodyStream, bodyEntity.getContent()); 074 075 assertEquals("application/sparql-update", request.getFirstHeader(CONTENT_TYPE).getValue()); 076 } 077 078 @Test 079 public void testWithBodyCustomType() throws Exception { 080 final InputStream bodyStream = mock(InputStream.class); 081 082 testBuilder.body(bodyStream, "text/plain") 083 .perform(); 084 085 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 086 087 final HttpEntityEnclosingRequestBase request = (HttpEntityEnclosingRequestBase) requestCaptor.getValue(); 088 final HttpEntity bodyEntity = request.getEntity(); 089 assertEquals(bodyStream, bodyEntity.getContent()); 090 091 assertEquals("text/plain", request.getFirstHeader(CONTENT_TYPE).getValue()); 092 } 093 094 @Test 095 public void testStateToken() throws Exception { 096 final InputStream bodyStream = mock(InputStream.class); 097 final String token = "state"; 098 099 testBuilder.body(bodyStream) 100 .ifStateToken(token) 101 .perform(); 102 103 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 104 105 final HttpEntityEnclosingRequestBase request = (HttpEntityEnclosingRequestBase) requestCaptor.getValue(); 106 assertEquals(token, request.getFirstHeader(IF_STATE_TOKEN).getValue()); 107 } 108 109 @Test 110 public void testAddHeader() throws Exception { 111 testBuilder.addHeader("my-header", "head-val").perform(); 112 113 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 114 final HttpRequestBase request = requestCaptor.getValue(); 115 assertEquals("head-val", request.getFirstHeader("my-header").getValue()); 116 } 117 118 @Test 119 public void testAddLinkHeader() throws Exception { 120 final FcrepoLink link = FcrepoLink.fromUri("http://example.com/link").type("foo").build(); 121 testBuilder.addLinkHeader(link).perform(); 122 123 verify(client).executeRequest(eq(uri), requestCaptor.capture()); 124 final HttpRequestBase request = requestCaptor.getValue(); 125 assertEquals(link.toString(), request.getFirstHeader(LINK).getValue()); 126 } 127}