package eu.europeana.cloud.service.dls.listeners;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import eu.europeana.cloud.common.model.CompoundDataSetId;
import eu.europeana.cloud.common.model.File;
import eu.europeana.cloud.common.model.Representation;
import eu.europeana.cloud.common.model.Revision;
import eu.europeana.cloud.common.web.ParamConstants;
import eu.europeana.cloud.service.dls.solr.SolrDAO;
import eu.europeana.cloud.service.mcs.messages.InsertRepresentationPersistentMessage;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = { "classpath:/testContext.xml" })
public class RepresentationVersionAddedPersistentMessageProcessorTest {
@Autowired
RepresentationVersionAddedPersistentMessageProcessor listener;
@Autowired
SolrDAO solrDAO;
private static final Gson gson = new GsonBuilder().setDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSSZZ").create();
@Before
public void cleanUp() {
Mockito.reset(solrDAO);
}
@Test
public void shouldCallInsertRepresentation()
throws Exception {
//given
String providerId = "Provider001";
String cloudId = "25DG622J4VM";
String representationName = "representation01";
String versionId = "b95fcda0-994a-11e3-bfe1-1c6f653f6012";
ArrayList<File> files = new ArrayList<>();
ArrayList<Revision> revisions = new ArrayList<>();
boolean persistent = false;
Date creationDate = Calendar.getInstance().getTime();
Representation representation = new Representation(cloudId, representationName, versionId, null, null, providerId, files,revisions, persistent, creationDate);
String dataSetId1 = "dataSet1";
String dataSetId2 = "dataSet2";
Collection<CompoundDataSetId> dataSetIds = new ArrayList<>();
dataSetIds.add(new CompoundDataSetId(providerId, dataSetId1));
dataSetIds.add(new CompoundDataSetId(providerId, dataSetId2));
InsertRepresentationPersistentMessage message = new InsertRepresentationPersistentMessage(prepareInsertPersistentRepresentationMessage(representation, dataSetIds));
//when
listener.processMessage(message);
//then
verify(solrDAO, times(1)).insertRepresentation(representation, dataSetIds);
verifyNoMoreInteractions(solrDAO);
}
@Test
public void shouldNotCallDAOWhenReceivedMessageWithNullBody()
throws Exception {
// given
InsertRepresentationPersistentMessage message = new InsertRepresentationPersistentMessage(
null);
// when
listener.processMessage(message);
// then
verifyZeroInteractions(solrDAO);
}
@Test
public void shouldNotCallDAOWhenReceivedEmptyMessage() throws Exception {
// given
InsertRepresentationPersistentMessage message = new InsertRepresentationPersistentMessage(
"");
// when
listener.processMessage(message);
// then
verifyZeroInteractions(solrDAO);
}
@Test
public void shouldNotCallDAOWhenReceivedNullMap() throws Exception {
// given
HashMap<String, Object> map = null;
InsertRepresentationPersistentMessage message = new InsertRepresentationPersistentMessage(
gson.toJson(map));
// when
listener.processMessage(message);
// then
verifyZeroInteractions(solrDAO);
}
@Test
public void shouldNotCallDAOWhenReceivedEmptyMap()
throws Exception {
//given
HashMap<String, Object> map = new LinkedHashMap<>();
InsertRepresentationPersistentMessage message = new InsertRepresentationPersistentMessage(gson.toJson(map));
//when
listener.processMessage(message);
//then
verifyZeroInteractions(solrDAO);
}
@Test
public void shouldNotCallDAOWhenReceivedNullRepresentation()
throws Exception {
//given
String providerId = "Provider001";
String dataSetId1 = "dataSet1";
String dataSetId2 = "dataSet2";
Collection<CompoundDataSetId> dataSetIds = new ArrayList<>();
dataSetIds.add(new CompoundDataSetId(providerId, dataSetId1));
dataSetIds.add(new CompoundDataSetId(providerId, dataSetId2));
InsertRepresentationPersistentMessage message = new InsertRepresentationPersistentMessage(prepareInsertPersistentRepresentationMessage(null, dataSetIds));
//when
listener.processMessage(message);
//then
verifyZeroInteractions(solrDAO);
}
@Test
public void shouldNotCallDAOWhenReceivedNullDataSetIds()
throws Exception {
//given
String providerId = "Provider001";
String cloudId = "25DG622J4VM";
String representationName = "representation01";
String versionId = "b95fcda0-994a-11e3-bfe1-1c6f653f6012";
ArrayList<File> files = new ArrayList<>();
ArrayList<Revision> revisions = new ArrayList<>();
boolean persistent = false;
Date creationDate = Calendar.getInstance().getTime();
Representation representation = new Representation(cloudId, representationName, versionId, null, null, providerId, files,revisions, persistent, creationDate);
InsertRepresentationPersistentMessage message = new InsertRepresentationPersistentMessage(prepareInsertPersistentRepresentationMessage(representation, null));
//when
listener.processMessage(message);
//then
verifyZeroInteractions(solrDAO);
}
private String prepareInsertPersistentRepresentationMessage(Representation representation, Collection<CompoundDataSetId> dataSetIds) {
HashMap<String, Object> map = new LinkedHashMap<>();
map.put(ParamConstants.F_REPRESENTATION, representation);
map.put(ParamConstants.F_DATASETS, dataSetIds);
return gson.toJson(map);
}
}