package eu.europeana.cloud.service.mcs.rest; import eu.europeana.cloud.common.model.DataProvider; import eu.europeana.cloud.common.model.Revision; import eu.europeana.cloud.common.response.CloudTagsResponse; import eu.europeana.cloud.common.response.ResultSlice; import eu.europeana.cloud.common.utils.RevisionUtils; import eu.europeana.cloud.service.mcs.ApplicationContextUtils; import eu.europeana.cloud.service.mcs.DataSetService; import eu.europeana.cloud.service.mcs.UISClientHandler; import eu.europeana.cloud.test.CassandraTestRunner; import org.glassfish.jersey.test.JerseyTest; import org.junit.After; 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.Path; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import static eu.europeana.cloud.common.web.ParamConstants.*; import static junit.framework.TestCase.assertNotNull; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.Matchers.hasItem; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; /** * DataSetResourceTest * * @author akrystian */ @RunWith(CassandraTestRunner.class) public class DataSetRevisionsResourceTest extends JerseyTest{ private DataSetService dataSetService; private WebTarget dataSetWebTarget; private UISClientHandler uisHandler; private SimpleDateFormat dateFormat; @Override public Application configure(){ return new JerseyConfig().property("contextConfigLocation", "classpath:spiedPersistentServicesTestContext.xml"); } @Before public void mockUp() throws Exception{ ApplicationContext applicationContext = ApplicationContextUtils.getApplicationContext(); uisHandler = applicationContext.getBean(UISClientHandler.class); dataSetService = applicationContext.getBean(DataSetService.class); dataSetWebTarget = target(DataSetRevisionsResource.class.getAnnotation(Path.class).value()); dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); } @After public void cleanUp() throws Exception{ Mockito.reset(uisHandler); } @Test public void shouldRetrieveCloudIdBelongToRevision() throws Exception{ // given String datasetId = "dataset"; String providerId = "providerId"; String revisionName = "revisionName"; String revisionProviderId = "revisionProviderId"; String representationName = "representationName"; String cloudId = "cloudId"; Revision revision = new Revision(revisionName, revisionProviderId, new Date(), true, false, false); Mockito.when(uisHandler.getProvider(providerId)).thenReturn(new DataProvider()); Mockito.when(uisHandler.existsProvider(providerId)).thenReturn(true); dataSetService.createDataSet(providerId, datasetId,""); dataSetService.addDataSetsRevisions(providerId, datasetId, revision, representationName, cloudId); // when dataSetWebTarget = dataSetWebTarget. resolveTemplate(P_DATASET, datasetId). resolveTemplate(P_PROVIDER, providerId). resolveTemplate(P_REVISION_NAME, revisionName). resolveTemplate(P_REVISION_PROVIDER_ID, revisionProviderId). resolveTemplate(P_REPRESENTATIONNAME, representationName). queryParam(F_REVISION_TIMESTAMP, dateFormat.format(revision.getCreationTimeStamp())). queryParam(F_LIMIT, 10); Response response = dataSetWebTarget.request().get(); //then assertThat(response.getStatus(),is(Response.Status.OK.getStatusCode())); List<CloudTagsResponse> cloudIds = response.readEntity(ResultSlice.class).getResults(); assertThat(cloudIds.size(),is(1)); assertThat(cloudIds.get(0).getCloudId(), is(cloudId)); } @Test public void shouldGetEmptyResultSetOnRetrievingNonExistingRevision() throws Exception{ // given String datasetId = "dataset"; String providerId = "providerId"; String revisionName = "revisionName"; String revisionName2 = "revisionName2"; String revisionProviderId = "revisionProviderId"; String representationName = "representationName"; Revision revision = new Revision(revisionName, revisionProviderId, new Date(), true, false, false); Revision revision2 = new Revision(revisionName2, revisionProviderId, new Date(), true, false, false); String cloudId = "cloudId"; Mockito.when(uisHandler.getProvider(providerId)).thenReturn(new DataProvider()); Mockito.when(uisHandler.existsProvider(providerId)).thenReturn(true); dataSetService.createDataSet(providerId, datasetId,""); dataSetService.addDataSetsRevisions(providerId, datasetId, revision, representationName, cloudId); // when dataSetWebTarget = dataSetWebTarget. resolveTemplate(P_DATASET, datasetId). resolveTemplate(P_PROVIDER, providerId). resolveTemplate(P_CLOUDID, cloudId). resolveTemplate(P_REVISION_NAME, revisionName2). resolveTemplate(P_REVISION_PROVIDER_ID, revisionProviderId). resolveTemplate(P_REPRESENTATIONNAME, representationName). queryParam(F_REVISION_TIMESTAMP, dateFormat.format(revision2.getCreationTimeStamp())). queryParam(F_LIMIT, 1); Response response = dataSetWebTarget.request().get(); //then assertThat(response.getStatus(),is(Response.Status.OK.getStatusCode())); List<CloudTagsResponse> cloudIds = response.readEntity(ResultSlice.class).getResults(); assertThat(cloudIds.size(),is(0)); } @Test public void shouldGetEmptyResultSetOnRetrievingNonExistingRevision2() throws Exception{ // given String datasetId = "dataset"; String providerId = "providerId"; String revisionName = "revisionName"; String revisionProviderId = "revisionProviderId"; String representationName = "representationName"; String revisionTimestamp = "2016-12-02T01:08:28.059"; Mockito.when(uisHandler.getProvider(providerId)).thenReturn(new DataProvider()); Mockito.when(uisHandler.existsProvider(providerId)).thenReturn(true); dataSetService.createDataSet(providerId, datasetId,""); // when dataSetWebTarget = dataSetWebTarget. resolveTemplate(P_DATASET, datasetId). resolveTemplate(P_PROVIDER, providerId). resolveTemplate(P_REVISION_NAME, revisionName). resolveTemplate(P_REVISION_PROVIDER_ID, revisionProviderId). resolveTemplate(P_REPRESENTATIONNAME, representationName). queryParam(F_REVISION_TIMESTAMP, revisionTimestamp). queryParam(F_LIMIT, 10); Response response = dataSetWebTarget.request().get(); //then assertThat(response.getStatus(),is(Response.Status.OK.getStatusCode())); List<CloudTagsResponse> cloudIds = response.readEntity(ResultSlice.class).getResults(); assertThat(cloudIds.size(),is(0)); } @Test public void shouldResultWithNotDefinedStart() throws Exception{ // given String datasetId = "dataset"; String providerId = "providerId"; String representationName = "representationName"; String revisionName = "revisionName"; String revisionProviderId = "revisionProviderId"; Revision revision = new Revision(revisionName, revisionProviderId, new Date(), true, false, false); String cloudId = "cloudId"; String cloudId2 = "cloudId2"; String cloudId3 = "cloudId3"; Mockito.when(uisHandler.getProvider(providerId)).thenReturn(new DataProvider()); Mockito.when(uisHandler.existsProvider(providerId)).thenReturn(true); dataSetService.createDataSet(providerId, datasetId,""); dataSetService.addDataSetsRevisions(providerId, datasetId, revision, representationName, cloudId); dataSetService.addDataSetsRevisions(providerId, datasetId, revision, representationName, cloudId2); dataSetService.addDataSetsRevisions(providerId, datasetId, revision, representationName, cloudId3); // when dataSetWebTarget = dataSetWebTarget. resolveTemplate(P_PROVIDER, providerId). resolveTemplate(P_DATASET, datasetId). resolveTemplate(P_REPRESENTATIONNAME, representationName). resolveTemplate(P_REVISION_NAME, revisionName). resolveTemplate(P_REVISION_PROVIDER_ID, revisionProviderId). queryParam(F_REVISION_TIMESTAMP, dateFormat.format(revision.getCreationTimeStamp())). queryParam(F_LIMIT, 1); Response response = dataSetWebTarget.request().get(); //then assertThat(response.getStatus(),is(Response.Status.OK.getStatusCode())); List<CloudTagsResponse> cloudIds = response.readEntity(ResultSlice.class).getResults(); assertThat(cloudIds.size(), is(1)); assertThat(cloudIds.get(0).getCloudId(), is(cloudId)); } @Test public void shouldRetrieveCloudIdsPageByPage() throws Exception{ // given String datasetId = "dataset"; String providerId = "providerId"; String representationName = "representationName"; String revisionName = "revisionName"; String revisionProviderId = "revisionProviderId"; Mockito.when(uisHandler.getProvider(providerId)).thenReturn(new DataProvider()); Mockito.when(uisHandler.existsProvider(providerId)).thenReturn(true); dataSetService.createDataSet(providerId, datasetId,""); Revision revision = new Revision(revisionName, revisionProviderId, new Date(), true, false, false); String cloudId = "cloudId"; String cloudId2 = "cloudId2"; String cloudId3 = "cloudId3"; dataSetService.addDataSetsRevisions(providerId, datasetId, revision, representationName, cloudId); dataSetService.addDataSetsRevisions(providerId, datasetId, revision, representationName, cloudId2); dataSetService.addDataSetsRevisions(providerId, datasetId, revision, representationName, cloudId3); // when get first page (set page size to 1) WebTarget target = dataSetWebTarget. resolveTemplate(P_PROVIDER, providerId). resolveTemplate(P_DATASET, datasetId). resolveTemplate(P_REPRESENTATIONNAME, representationName). resolveTemplate(P_REVISION_NAME, revisionName). resolveTemplate(P_REVISION_PROVIDER_ID, revisionProviderId). queryParam(F_REVISION_TIMESTAMP, dateFormat.format(revision.getCreationTimeStamp())). queryParam(F_LIMIT, 1); Response response = target.request().get(); // then assertThat(response.getStatus(),is(Response.Status.OK.getStatusCode())); ResultSlice<CloudTagsResponse> slice = response.readEntity(ResultSlice.class); List<CloudTagsResponse> cloudIds = slice.getResults(); assertThat(cloudIds.size(), is(1)); assertThat(cloudIds.get(0).getCloudId(), is(cloudId)); assertNotNull(slice.getNextSlice()); // when get second page target = dataSetWebTarget. resolveTemplate(P_PROVIDER, providerId). resolveTemplate(P_DATASET, datasetId). resolveTemplate(P_REPRESENTATIONNAME, representationName). resolveTemplate(P_REVISION_NAME, revisionName). resolveTemplate(P_REVISION_PROVIDER_ID, revisionProviderId). queryParam(F_REVISION_TIMESTAMP, dateFormat.format(revision.getCreationTimeStamp())). queryParam(F_START_FROM, slice.getNextSlice()). queryParam(F_LIMIT, 1); response = target.request().get(); // then assertThat(response.getStatus(),is(Response.Status.OK.getStatusCode())); slice = response.readEntity(ResultSlice.class); cloudIds = slice.getResults(); assertThat(cloudIds.size(), is(1)); assertThat(cloudIds.get(0).getCloudId(), is(cloudId2)); assertNotNull(slice.getNextSlice()); // when get last page target = dataSetWebTarget. resolveTemplate(P_PROVIDER, providerId). resolveTemplate(P_DATASET, datasetId). resolveTemplate(P_REPRESENTATIONNAME, representationName). resolveTemplate(P_REVISION_NAME, revisionName). resolveTemplate(P_REVISION_PROVIDER_ID, revisionProviderId). queryParam(F_REVISION_TIMESTAMP, dateFormat.format(revision.getCreationTimeStamp())). queryParam(F_START_FROM, slice.getNextSlice()). queryParam(F_LIMIT, 1); response = target.request().get(); // then assertThat(response.getStatus(),is(Response.Status.OK.getStatusCode())); slice = response.readEntity(ResultSlice.class); cloudIds = slice.getResults(); assertThat(cloudIds.size(), is(1)); assertThat(cloudIds.get(0).getCloudId(), is(cloudId3)); assertNull(slice.getNextSlice()); } }