Commit 484175de authored by Noel Alonso's avatar Noel Alonso
Browse files

Implementa comprobación de borrado + tests

De este modo, se comprueba que un themeInspire no está referenciado en
layer para poder ser borrado
parent 9888ee46
Loading
Loading
Loading
Loading
+37 −1
Original line number Diff line number Diff line
@@ -58,12 +58,15 @@ import es.redmic.atlaslib.events.layer.refresh.RefreshLayerEvent;
import es.redmic.atlaslib.events.layer.update.LayerUpdatedEvent;
import es.redmic.atlaslib.events.layer.update.UpdateLayerCancelledEvent;
import es.redmic.atlaslib.events.layer.update.UpdateLayerEnrichedEvent;
import es.redmic.atlaslib.events.themeinspire.ThemeInspireEventFactory;
import es.redmic.atlaslib.events.themeinspire.ThemeInspireEventTypes;
import es.redmic.atlaslib.events.themeinspire.update.ThemeInspireUpdatedEvent;
import es.redmic.brokerlib.alert.AlertService;
import es.redmic.brokerlib.avro.common.Event;
import es.redmic.commandslib.commands.CommandHandler;
import es.redmic.commandslib.streaming.common.StreamConfig;
import es.redmic.commandslib.streaming.common.StreamConfig.Builder;
import es.redmic.exception.common.ExceptionType;
import es.redmic.exception.factory.ExceptionFactory;
import es.redmic.restlib.config.UserService;

@@ -295,7 +298,7 @@ public class LayerCommandHandler extends CommandHandler {
				ExceptionFactory.getException(event.getExceptionType(), event.getArguments()));
	}

	@KafkaListener(topics = "${broker.topic.theme.inspire.updated}")
	@KafkaListener(topics = "${broker.topic.theme.inspire.updated}", groupId = "LayerCommandHandlerPostUpdate")
	private void listen(ThemeInspireUpdatedEvent event) {

		KeyValueIterator<String, Event> iteratble = layerStateStore.getAll();
@@ -318,4 +321,37 @@ public class LayerCommandHandler extends CommandHandler {
		}
		iteratble.close();
	}

	@KafkaListener(topics = "${broker.topic.theme-inspire}", groupId = "LayerCommandHandlerCheckDelete")
	private void listen(Event event) {

		if (event.getType().equals(ThemeInspireEventTypes.CHECK_DELETE)) {

			KeyValueIterator<String, Event> iteratble = layerStateStore.getAll();
			while (iteratble.hasNext()) {
				final KeyValue<String, Event> next = iteratble.next();

				Event layerEvent = next.value;

				if (LayerEventTypes.isSnapshot(layerEvent.getType())) {

					ThemeInspireDTO themeInspire = ((LayerEvent) layerEvent).getLayer().getThemeInspire();

					if (themeInspire.getId().equals(event.getAggregateId())) {

						publishToKafka(
								ThemeInspireEventFactory.getEvent(event, ThemeInspireEventTypes.DELETE_CHECK_FAILED,
										ExceptionType.ES_DELETE_ITEM_REFERENCED_ERROR.name(), null),
								themeInspireTopic);

						return;
					}
				}
			}
			publishToKafka(ThemeInspireEventFactory.getEvent(event, ThemeInspireEventTypes.DELETE_CHECKED),
					themeInspireTopic);
			iteratble.close();

		}
	}
}
+1 −3
Original line number Diff line number Diff line
@@ -101,13 +101,11 @@ public class ThemeInspireEventStreams extends EventSourcingStreams {
	}

	/**
	 * Comprueba si themeInspire está referenciado en atlas para cancelar el borrado
	 * En este caso el borrado se compueba en el handler de layer
	 */

	@Override
	protected void processDeleteStream(KStream<String, Event> events) {
		// TODO Auto-generated method stub

	}

	/**
+22 −16
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ import org.springframework.util.concurrent.ListenableFuture;
import es.redmic.atlascommands.AtlasCommandsApplication;
import es.redmic.atlascommands.handler.ThemeInspireCommandHandler;
import es.redmic.atlaslib.dto.themeinspire.ThemeInspireDTO;
import es.redmic.atlaslib.events.layer.create.LayerCreatedEvent;
import es.redmic.atlaslib.events.themeinspire.ThemeInspireEventTypes;
import es.redmic.atlaslib.events.themeinspire.create.CreateThemeInspireCancelledEvent;
import es.redmic.atlaslib.events.themeinspire.create.CreateThemeInspireConfirmedEvent;
@@ -73,9 +74,11 @@ import es.redmic.atlaslib.events.themeinspire.update.UpdateThemeInspireCancelled
import es.redmic.atlaslib.events.themeinspire.update.UpdateThemeInspireConfirmedEvent;
import es.redmic.atlaslib.events.themeinspire.update.UpdateThemeInspireEvent;
import es.redmic.atlaslib.events.themeinspire.update.UpdateThemeInspireFailedEvent;
import es.redmic.atlaslib.unit.utils.LayerDataUtil;
import es.redmic.atlaslib.unit.utils.ThemeInspireDataUtil;
import es.redmic.brokerlib.avro.common.Event;
import es.redmic.brokerlib.listener.SendListener;
import es.redmic.exception.common.ExceptionType;
import es.redmic.exception.data.DeleteItemException;
import es.redmic.exception.data.ItemAlreadyExistException;
import es.redmic.exception.data.ItemNotFoundException;
@@ -102,8 +105,8 @@ public class ThemeInspireCommandHandlerTest extends KafkaBaseIntegrationTest {
	@Value("${broker.topic.theme-inspire}")
	private String theme_inspire_topic;

	@Value("${broker.topic.atlas}")
	private String atlas_topic;
	@Value("${broker.topic.layer}")
	private String layer_topic;

	@Autowired
	private KafkaTemplate<String, Event> kafkaTemplate;
@@ -289,7 +292,7 @@ public class ThemeInspireCommandHandlerTest extends KafkaBaseIntegrationTest {
	// Envía un evento de comprobación de que el elemento puede ser borrado y debe
	// provocar un evento DeleteThemeInspireCheckFailedEvent ya que está
	// referenciado
	/*-@Test
	@Test
	public void checkDeleteThemeInspireEvent_SendDeleteThemeInspireCheckFailedEvent_IfReceivesSuccess()
			throws InterruptedException {

@@ -297,16 +300,17 @@ public class ThemeInspireCommandHandlerTest extends KafkaBaseIntegrationTest {

		CheckDeleteThemeInspireEvent event = ThemeInspireDataUtil.getCheckDeleteThemeInspireEvent(code + "5a");

		AtlasCreatedEvent atlasWithThemeInspireEvent = AtlasDataUtil.getAtlasCreatedEvent(1);
		atlasWithThemeInspireEvent.getAtlas().setType(ThemeInspireDataUtil.getThemeInspire(code + "5a"));
		LayerCreatedEvent layerEvent = LayerDataUtil.getLayerCreatedEvent();
		layerEvent.getLayer().setThemeInspire(ThemeInspireDataUtil.getThemeInspire(code + "5a"));

		kafkaTemplate.send(atlas_topic, atlasWithThemeInspireEvent.getAggregateId(), atlasWithThemeInspireEvent);
		kafkaTemplate.send(layer_topic, layerEvent.getAggregateId(), layerEvent);

		Thread.sleep(4000);

		kafkaTemplate.send(theme_inspire_topic, event.getAggregateId(), event);

		Event confirm = (Event) blockingQueue.poll(60, TimeUnit.SECONDS);
		DeleteThemeInspireCheckFailedEvent confirm = (DeleteThemeInspireCheckFailedEvent) blockingQueue.poll(60,
				TimeUnit.SECONDS);

		assertNotNull(confirm);
		assertEquals(ThemeInspireEventTypes.DELETE_CHECK_FAILED, confirm.getType());
@@ -314,7 +318,9 @@ public class ThemeInspireCommandHandlerTest extends KafkaBaseIntegrationTest {
		assertEquals(event.getUserId(), confirm.getUserId());
		assertEquals(event.getSessionId(), confirm.getSessionId());
		assertEquals(event.getVersion(), confirm.getVersion());
	}-*/
		assertEquals(ExceptionType.ES_DELETE_ITEM_REFERENCED_ERROR.name(), confirm.getExceptionType());

	}

	// Envía un evento de error de borrado y debe provocar un evento Cancelled con
	// el item dentro
+8 −1
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.reflect.Whitebox;
import org.springframework.beans.factory.annotation.Autowired;
@@ -66,6 +67,7 @@ import org.springframework.util.concurrent.ListenableFuture;

import es.redmic.atlascommands.AtlasCommandsApplication;
import es.redmic.atlascommands.handler.ThemeInspireCommandHandler;
import es.redmic.atlascommands.statestore.LayerStateStore;
import es.redmic.atlascommands.statestore.ThemeInspireStateStore;
import es.redmic.atlaslib.dto.themeinspire.ThemeInspireDTO;
import es.redmic.atlaslib.events.themeinspire.create.CreateThemeInspireConfirmedEvent;
@@ -105,6 +107,9 @@ public class ThemeInspireRestTest extends DocumentationCommandBaseTest {

	ThemeInspireStateStore themeInspireStateStore;

	@Mock
	LayerStateStore layerStateStore;

	protected static BlockingQueue<Object> blockingQueue;

	@Autowired
@@ -218,12 +223,14 @@ public class ThemeInspireRestTest extends DocumentationCommandBaseTest {
		assertEquals(event.getAggregateId(), expectedEvent.getAggregateId());
	}

	// @Test
	@Test
	public void deleteThemeInspire_SendDeleteThemeInspireEvent_IfCommandWasSuccess() throws Exception {

		when(themeInspireStateStore.get(anyString()))
				.thenReturn(ThemeInspireDataUtil.getThemeInspireUpdatedEvent(CODE));

		when(layerStateStore.get(anyString())).thenReturn(null);

		// @formatter:off
		
		String id = ThemeInspireDataUtil.PREFIX + CODE;