package eu.europeana.cloud.service.mcs.rest; import eu.europeana.cloud.common.model.File; import eu.europeana.cloud.common.response.ErrorInfo; import eu.europeana.cloud.common.response.RepresentationRevisionResponse; import eu.europeana.cloud.common.utils.RevisionUtils; import eu.europeana.cloud.common.web.ParamConstants; import eu.europeana.cloud.service.mcs.ApplicationContextUtils; import eu.europeana.cloud.service.mcs.RecordService; import eu.europeana.cloud.service.mcs.exception.RepresentationNotExistsException; import eu.europeana.cloud.service.mcs.exception.RevisionNotExistsException; import eu.europeana.cloud.service.mcs.rest.exceptionmappers.RevisionNotExistsExceptionMapper; import eu.europeana.cloud.service.mcs.status.McsErrorCode; import junitparams.JUnitParamsRunner; import junitparams.Parameters; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.test.JerseyTest; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.springframework.context.ApplicationContext; import javax.ws.rs.core.Application; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import static junitparams.JUnitParamsRunner.$; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.*; @RunWith(JUnitParamsRunner.class) public class RepresentationRevisionsResourceTest extends JerseyTest { private RecordService recordService; static final private String globalId = "1"; static final private String schema = "DC"; static final private String revisionProviderId = "ABC"; static final private String revisionName = "rev1"; static final private String version = "1.0"; static final private Date revisionTimestamp = new Date(); static final private RepresentationRevisionResponse representationResponse = new RepresentationRevisionResponse(globalId, schema, version, Arrays.asList(new File("1.xml", "text/xml", "91162629d258a876ee994e9233b2ad87", "2013-01-01", 12345, null)), revisionProviderId, revisionName, revisionTimestamp); @Override public Application configure() { return new ResourceConfig().registerClasses(RepresentationRevisionsResource.class) .registerClasses(RevisionNotExistsExceptionMapper.class) .property("contextConfigLocation", "classpath:testContext.xml"); } @Before public void mockUp() { ApplicationContext applicationContext = ApplicationContextUtils.getApplicationContext(); recordService = applicationContext.getBean(RecordService.class); Mockito.reset(recordService); } @SuppressWarnings("unused") private Object[] mimeTypes() { return $($(MediaType.APPLICATION_XML_TYPE), $(MediaType.APPLICATION_JSON_TYPE)); } @Test @Parameters(method = "mimeTypes") public void getRepresentationRevisionResponse(MediaType mediaType) throws Exception { RepresentationRevisionResponse expected = new RepresentationRevisionResponse(representationResponse); ArrayList<File> files = new ArrayList<>(); files.add(new File("1.xml", "text/xml", "91162629d258a876ee994e9233b2ad87", "2013-01-01", 12345L, URI.create("http://localhost:9998/records/" + globalId + "/representations/" + schema + "/versions/" + version + "/files/1.xml"))); expected.setFiles(files); when(recordService.getRepresentationRevision(globalId, schema, revisionProviderId, revisionName, null)).thenReturn(new RepresentationRevisionResponse(representationResponse)); Response response = target().path(URITools.getRepresentationRevisionsPath(globalId, schema, revisionName).toString()).queryParam(ParamConstants.F_REVISION_PROVIDER_ID, revisionProviderId).request(mediaType) .get(); assertThat(response.getStatus(), is(200)); assertThat(response.getMediaType(), is(mediaType)); RepresentationRevisionResponse entity = response.readEntity(RepresentationRevisionResponse.class); assertThat(entity, is(expected)); verify(recordService, times(1)).getRepresentationRevision(globalId, schema, revisionProviderId, revisionName, null); verifyNoMoreInteractions(recordService); } @Test public void getRepresentationReturns406ForUnsupportedFormat() { Response response = target().path(URITools.getRepresentationRevisionsPath(globalId, schema, revisionName).toString()).queryParam(ParamConstants.F_REVISION_PROVIDER_ID, revisionProviderId) .request(MediaType.APPLICATION_SVG_XML_TYPE).get(); assertThat(response.getStatus(), is(406)); } @Test public void getRepresentationRevisionsReturnsEmptyObjectIfRevisionDoesNotExists() throws Exception { when(recordService.getRepresentationRevision(globalId, schema, revisionProviderId, revisionName, null)).thenReturn(new RepresentationRevisionResponse()); Response response = target().path(URITools.getRepresentationRevisionsPath(globalId, schema, revisionName).toString()).queryParam(ParamConstants.F_REVISION_PROVIDER_ID, revisionProviderId) .request(MediaType.APPLICATION_XML).get(); RepresentationRevisionResponse expected = new RepresentationRevisionResponse(); assertThat(response.getStatus(), is(200)); RepresentationRevisionResponse entity = response.readEntity(RepresentationRevisionResponse.class); assertThat(entity, is(expected)); verify(recordService, times(1)).getRepresentationRevision(globalId, schema, revisionProviderId, revisionName, null); verifyNoMoreInteractions(recordService); } }