package eu.europeana.cloud.service.dls.listeners; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import eu.europeana.cloud.common.model.CompoundDataSetId; import eu.europeana.cloud.common.web.ParamConstants; import eu.europeana.cloud.service.dls.solr.SolrDAO; import eu.europeana.cloud.service.mcs.messages.RemoveAssignmentMessage; import java.util.Collections; 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 AssignmentRemovedMessageProcessorTest { @Autowired AssignmentRemovedMessageProcessor listener; @Autowired SolrDAO solrDAO; private static final Gson gson = new Gson(); @Before public void cleanUp() { Mockito.reset(solrDAO); } @Test public void shouldCallRremoveAssignment() throws Exception { // given String cloudId = "id123123"; String representationName = "rn"; String dataSet = "dataset"; String provider = "provider123"; CompoundDataSetId ds = new CompoundDataSetId(provider, dataSet); RemoveAssignmentMessage message = new RemoveAssignmentMessage( prepareRemoveAssginmentMessage(cloudId, representationName, ds)); // when listener.processMessage(message); // then verify(solrDAO, times(1)).removeAssignment(cloudId, representationName, Collections.singletonList(ds)); verifyNoMoreInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedMessageWithNullBody() throws Exception { // given RemoveAssignmentMessage message = new RemoveAssignmentMessage(null); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedEmptyMessage() throws Exception { // given RemoveAssignmentMessage message = new RemoveAssignmentMessage(""); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedNullCloudId() throws Exception { // given String cloudId = null; String representationName = "rn"; String dataSet = "dataset"; String provider = "provider123"; CompoundDataSetId ds = new CompoundDataSetId(provider, dataSet); RemoveAssignmentMessage message = new RemoveAssignmentMessage( prepareRemoveAssginmentMessage(cloudId, representationName, ds)); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedEmptyCloudId() throws Exception { // given String cloudId = ""; String representationName = "rn"; String dataSet = "dataset"; String provider = "provider123"; CompoundDataSetId ds = new CompoundDataSetId(provider, dataSet); RemoveAssignmentMessage message = new RemoveAssignmentMessage( prepareRemoveAssginmentMessage(cloudId, representationName, ds)); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedNullRepresentationName() throws Exception { // given String cloudId = "id123123"; String representationName = null; String dataSet = "dataset"; String provider = "provider123"; CompoundDataSetId ds = new CompoundDataSetId(provider, dataSet); RemoveAssignmentMessage message = new RemoveAssignmentMessage( prepareRemoveAssginmentMessage(cloudId, representationName, ds)); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedEmptyRepresentationName() throws Exception { // given String cloudId = "id123123"; String representationName = ""; String dataSet = "dataset"; String provider = "provider123"; CompoundDataSetId ds = new CompoundDataSetId(provider, dataSet); RemoveAssignmentMessage message = new RemoveAssignmentMessage( prepareRemoveAssginmentMessage(cloudId, representationName, ds)); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedNullCompundDataSetId() throws Exception { // given String cloudId = "id123123"; String representationName = "rn"; RemoveAssignmentMessage message = new RemoveAssignmentMessage( prepareRemoveAssginmentMessage(cloudId, representationName, null)); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedNullDataSet() throws Exception { // given // given String cloudId = "id123123"; String representationName = "rn"; String dataSet = null; String provider = "provider123"; CompoundDataSetId ds = new CompoundDataSetId(provider, dataSet); RemoveAssignmentMessage message = new RemoveAssignmentMessage( prepareRemoveAssginmentMessage(cloudId, representationName, ds)); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedEmptyDataSet() throws Exception { // given String cloudId = "id123123"; String representationName = "rn"; String dataSet = ""; String provider = "provider123"; CompoundDataSetId ds = new CompoundDataSetId(provider, dataSet); RemoveAssignmentMessage message = new RemoveAssignmentMessage( prepareRemoveAssginmentMessage(cloudId, representationName, ds)); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedNullProvider() throws Exception { // given String cloudId = "id123123"; String representationName = "rn"; String dataSet = "dataset"; String provider = null; CompoundDataSetId ds = new CompoundDataSetId(provider, dataSet); RemoveAssignmentMessage message = new RemoveAssignmentMessage( prepareRemoveAssginmentMessage(cloudId, representationName, ds)); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } @Test public void shouldNotCallDAOWhenReceivedEmptyProvider() throws Exception { // given String cloudId = "id123123"; String representationName = "rn"; String dataSet = "dataset"; String provider = ""; CompoundDataSetId ds = new CompoundDataSetId(provider, dataSet); RemoveAssignmentMessage message = new RemoveAssignmentMessage( prepareRemoveAssginmentMessage(cloudId, representationName, ds)); // when listener.processMessage(message); // then verifyZeroInteractions(solrDAO); } private String prepareRemoveAssginmentMessage(String cloudId, String representationName, CompoundDataSetId dataSetId) { JsonElement elem = gson.toJsonTree(dataSetId, CompoundDataSetId.class); JsonObject jo = new JsonObject(); jo.add(ParamConstants.F_DATASET_PROVIDER_ID, elem); jo.addProperty(ParamConstants.P_CLOUDID, cloudId); jo.addProperty(ParamConstants.P_REPRESENTATIONNAME, representationName); return jo.toString(); } }