Commit 943b7b3c authored by Noel Alonso's avatar Noel Alonso
Browse files

Limita los estados cargados en el agregado

Cambia tests
parent 793dfe47
Loading
Loading
Loading
Loading
+18 −28
Original line number Diff line number Diff line
@@ -119,60 +119,43 @@ public class VesselAggregate extends Aggregate {
	}

	@Override
	public void loadFromHistory(Event history) {
	public void loadFromHistory(Event event) {

		logger.debug("Cargando último estado del vessel ", history.getAggregateId());
		logger.debug("Cargando último estado del vessel ", event.getAggregateId());

		String eventType = history.getType();
		check(event);

		String eventType = event.getType();

		switch (eventType) {
		case "CREATE":
			logger.debug("En fase de creación");
			apply((VesselEvent) history);
			break;
		case "CREATED":
			logger.debug("Item creado");
			apply((VesselEvent) history);
			break;
		case "UPDATE":
			logger.debug("En fase de modificación");
			apply((VesselEvent) history);
			apply((VesselEvent) event);
			break;
		case "UPDATED":
			logger.debug("Item modificado");
			apply((VesselEvent) history);
			apply((VesselEvent) event);
			break;
		case "DELETED":
			logger.debug("Item borrado");
			apply((VesselDeletedEvent) history);
			apply((VesselDeletedEvent) event);
			break;
		// CANCELLED
		case "CREATE_CANCELLED":
			logger.debug("Compensación por creación fallida");
			apply((CreateVesselCancelledEvent) history);
			apply((CreateVesselCancelledEvent) event);
			break;
		case "UPDATE_CANCELLED":
		case "DELETE_CANCELLED":
			logger.debug("Compensación por edición/borrado fallido");
			apply((VesselEvent) history);
			break;
		case "UPDATE_VESSELTYPE":
			logger.debug("En fase de edición parcial de veseltype en vessel");
			apply(history);
			apply((VesselEvent) event);
			break;
		default:
			super._loadFromHistory(history);
			logger.debug("Evento no manejado ", event.getType());
			break;
		}
	}

	public void apply(UpdateVesselTypeInVesselEvent event) {
		if (this.vessel == null)
			this.vessel = new VesselDTO();
		this.vessel.setType(event.getVesselType());
		super.apply(event);
	}

	public void apply(CreateVesselCancelledEvent event) {
		this.deleted = true;
		apply(event);
@@ -183,6 +166,13 @@ public class VesselAggregate extends Aggregate {
		super.apply(event);
	}

	public void apply(UpdateVesselTypeInVesselEvent event) {
		if (this.vessel == null)
			this.vessel = new VesselDTO();
		this.vessel.setType(event.getVesselType());
		super.apply(event);
	}

	public void apply(VesselEvent event) {
		this.vessel = event.getVessel();
		super.apply(event);
+20 −32
Original line number Diff line number Diff line
@@ -115,55 +115,53 @@ public class VesselTrackingAggregate extends Aggregate {
	}

	@Override
	public void loadFromHistory(Event history) {
	public void loadFromHistory(Event event) {

		logger.debug("Cargando último estado del vesselTracking ", history.getAggregateId());
		logger.debug("Cargando último estado del vesselTracking ", event.getAggregateId());

		String eventType = history.getType();
		check(event);

		// TODO: Si se trata de un evento no final, controlar el error.
		String eventType = event.getType();

		switch (eventType) {
		case "CREATE":
			logger.debug("En fase de creación");
			apply((VesselTrackingEvent) history);
			break;
		case "CREATED":
			logger.debug("Item creado");
			apply((VesselTrackingEvent) history);
			break;
		case "UPDATE":
			logger.debug("En fase de modificación");
			apply((VesselTrackingEvent) history);
			apply((VesselTrackingEvent) event);
			break;
		case "UPDATED":
			logger.debug("Item modificado");
			apply((VesselTrackingEvent) history);
			apply((VesselTrackingEvent) event);
			break;
		case "DELETED":
			logger.debug("Item borrado");
			apply((VesselTrackingDeletedEvent) history);
			apply((VesselTrackingDeletedEvent) event);
			break;
		// CANCELLED
		case "CREATE_CANCELLED":
			logger.debug("Compensación por creación fallida");
			apply(history);
			apply(event);
			break;
		case "UPDATE_CANCELLED":
		case "DELETE_CANCELLED":
			logger.debug("Compensación por edición/borrado fallido");
			apply((VesselTrackingEvent) history);
			break;
		case "UPDATE_VESSELTYPE":
			logger.debug("En fase de edición parcial de veseltype en vessel");
			apply(history);
			apply((VesselTrackingEvent) event);
			break;
		default:
			super._loadFromHistory(history);
			logger.debug("Evento no manejado ", event.getType());
			break;
		}
	}

	public void apply(CreateVesselTrackingCancelledEvent event) {
		this.deleted = true;
		apply(event);
	}

	public void apply(VesselTrackingDeletedEvent event) {
		this.deleted = true;
		super.apply(event);
	}

	public void apply(UpdateVesselInVesselTrackingEvent event) {
		if (this.vesselTracking == null)
			this.vesselTracking = new VesselTrackingDTO();
@@ -177,16 +175,6 @@ public class VesselTrackingAggregate extends Aggregate {
		super.apply(event);
	}

	public void apply(CreateVesselTrackingCancelledEvent event) {
		this.deleted = true;
		apply(event);
	}

	public void apply(VesselTrackingDeletedEvent event) {
		this.deleted = true;
		super.apply(event);
	}

	public void apply(VesselTrackingEvent event) {
		this.vesselTracking = event.getVesselTracking();
		super.apply(event);
+11 −17
Original line number Diff line number Diff line
@@ -99,45 +99,39 @@ public class VesselTypeAggregate extends Aggregate {
	}

	@Override
	public void loadFromHistory(Event history) {
	public void loadFromHistory(Event event) {

		logger.debug("Cargando último estado del vessel type ", history.getAggregateId());
		logger.debug("Cargando último estado del vessel type ", event.getAggregateId());

		String eventType = history.getType();
		check(event);

		String eventType = event.getType();

		switch (eventType) {
		case "CREATE":
			logger.debug("En fase de creación");
			apply((VesselTypeEvent) history);
			break;
		case "CREATED":
			logger.debug("Item creado");
			apply((VesselTypeEvent) history);
			break;
		case "UPDATE":
			logger.debug("En fase de modificación");
			apply((VesselTypeEvent) history);
			apply((VesselTypeEvent) event);
			break;
		case "UPDATED":
			logger.debug("Item modificado");
			apply((VesselTypeEvent) history);
			apply((VesselTypeEvent) event);
			break;
		case "DELETED":
			logger.debug("Item borrado");
			apply((VesselTypeDeletedEvent) history);
			apply((VesselTypeDeletedEvent) event);
			break;
		// CANCELLED
		case "CREATE_CANCELLED":
			logger.debug("Compensación por creación fallida");
			apply((CreateVesselTypeCancelledEvent) history);
			apply((CreateVesselTypeCancelledEvent) event);
			break;
		case "UPDATE_CANCELLED":
		case "DELETE_CANCELLED":
			logger.debug("Compensación por edición/borrado fallido");
			apply((VesselTypeEvent) history);
			apply((VesselTypeEvent) event);
			break;
		default:
			super._loadFromHistory(history);
			logger.debug("Evento no manejado ", event.getType());
		}
	}

+27 −65
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;

import es.redmic.brokerlib.avro.common.Event;
import es.redmic.commandslib.exceptions.ItemLockedException;
import es.redmic.vesselslib.events.vessel.common.VesselEvent;
import es.redmic.vesselslib.events.vessel.create.CreateVesselEvent;
import es.redmic.vesselslib.events.vessel.create.VesselCreatedEvent;
@@ -23,16 +24,6 @@ import es.redmic.vesselslib.events.vessel.update.VesselUpdatedEvent;
@RunWith(MockitoJUnitRunner.class)
public class ApplyEventTest extends AggregateBaseTest {

	@Test
	public void applyCreateVesselEvent_ChangeAggrefateState_IfProcessIsOk() {

		CreateVesselEvent evt = getCreateVesselEvent();

		agg.apply(evt);

		checkCreateOrUpdateState(evt);
	}

	@Test
	public void applyVesselCreatedEvent_ChangeAggrefateState_IfProcessIsOk() {

@@ -40,17 +31,7 @@ public class ApplyEventTest extends AggregateBaseTest {

		agg.apply(evt);

		checkCreateOrUpdateState(evt);
	}

	@Test
	public void applyUpdateVesselEvent_ChangeAggregateState_IfProcessIsOk() {

		UpdateVesselEvent evt = getUpdateVesselEvent();

		agg.apply(evt);

		checkCreateOrUpdateState(evt);
		checkCreatedOrUpdatedState(evt);
	}

	@Test
@@ -60,17 +41,7 @@ public class ApplyEventTest extends AggregateBaseTest {

		agg.apply(evt);

		checkCreateOrUpdateState(evt);
	}

	@Test
	public void applyDeleteVesselEvent_ChangeAggregateState_IfProcessIsOk() {

		DeleteVesselEvent evt = getDeleteVesselEvent();

		agg.apply(evt);

		checkDeleteState(evt);
		checkCreatedOrUpdatedState(evt);
	}

	@Test
@@ -84,59 +55,49 @@ public class ApplyEventTest extends AggregateBaseTest {
	}

	@Test
	public void loadFromHistory_ChangeAggregateStateToCreate_IfEventIsCreate() {
	public void loadFromHistory_ChangeAggregateStateToCreated_IfEventIsCreated() {

		CreateVesselEvent evt = getCreateVesselEvent();
		VesselCreatedEvent evt = getVesselCreatedEvent();

		agg.loadFromHistory(evt);

		checkCreateOrUpdateState(evt);
		checkCreatedOrUpdatedState(evt);
	}

	@Test
	public void loadFromHistory_ChangeAggregateStateToUpdate_IfEventIsUpdate() {
	@Test(expected = ItemLockedException.class)
	public void loadFromHistory_ThrowItemLockedException_IfEventIsCreate() {

		UpdateVesselEvent evt = getUpdateVesselEvent();
		CreateVesselEvent evt = getCreateVesselEvent();

		agg.loadFromHistory(evt);

		checkCreateOrUpdateState(evt);
	}

	@Test
	public void loadFromHistory_ChangeAggregateStateToDelete_IfEventIsDelete() {
	public void loadFromHistory_ChangeAggregateStateToUpdated_IfEventIsUpdated() {

		DeleteVesselEvent evt = getDeleteVesselEvent();
		VesselUpdatedEvent evt = getVesselUpdatedEvent();

		agg.loadFromHistory(evt);

		checkDeleteState(evt);
		checkCreatedOrUpdatedState(evt);
	}

	@Test
	public void loadFromHistory_ChangeAggregateStateToDelete_IfLastEventIsDelete() {

		List<Event> history = new ArrayList<>();

		history.add(getCreateVesselEvent());
		history.add(getUpdateVesselEvent());
		history.add(getDeleteVesselEvent());

		history.add(getDeleteVesselEvent());
	@Test(expected = ItemLockedException.class)
	public void loadFromHistory_ThrowItemLockedException_IfEventIsUpdate() {

		agg.loadFromHistory(history);
		UpdateVesselEvent evt = getUpdateVesselEvent();

		checkDeleteState((DeleteVesselEvent) history.get(3));
		agg.loadFromHistory(evt);
	}

	@Test
	public void loadFromHistory_ChangeAggregateStateToDeleted_IfEventIsDelete() {
	public void loadFromHistory_ChangeAggregateStateToDeleted_IfEventIsDeleted() {

		List<Event> history = new ArrayList<>();

		history.add(getCreateVesselEvent());
		history.add(getUpdateVesselEvent());
		history.add(getDeleteVesselEvent());
		history.add(getVesselCreatedEvent());
		history.add(getVesselUpdatedEvent());
		history.add(getVesselDeletedEvent());

		history.add(getVesselDeletedEvent());

@@ -145,18 +106,19 @@ public class ApplyEventTest extends AggregateBaseTest {
		checkDeletedState((VesselDeletedEvent) history.get(3));
	}

	private void checkCreateOrUpdateState(VesselEvent evt) {
	@Test(expected = ItemLockedException.class)
	public void loadFromHistory_ThrowItemLockedException_IfEventIsDelete() {

		assertEquals(agg.getVersion(), evt.getVersion());
		assertEquals(agg.getAggregateId(), evt.getAggregateId());
		assertEquals(agg.getVessel(), evt.getVessel());
		assertFalse(agg.isDeleted());
		DeleteVesselEvent evt = getDeleteVesselEvent();

		agg.loadFromHistory(evt);
	}

	private void checkDeleteState(DeleteVesselEvent evt) {
	private void checkCreatedOrUpdatedState(VesselEvent evt) {

		assertEquals(agg.getVersion(), evt.getVersion());
		assertEquals(agg.getAggregateId(), evt.getAggregateId());
		assertEquals(agg.getVessel(), evt.getVessel());
		assertFalse(agg.isDeleted());
	}

+27 −65
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;

import es.redmic.brokerlib.avro.common.Event;
import es.redmic.commandslib.exceptions.ItemLockedException;
import es.redmic.vesselslib.events.vesseltracking.common.VesselTrackingEvent;
import es.redmic.vesselslib.events.vesseltracking.create.CreateVesselTrackingEvent;
import es.redmic.vesselslib.events.vesseltracking.create.VesselTrackingCreatedEvent;
@@ -23,16 +24,6 @@ import es.redmic.vesselslib.events.vesseltracking.update.VesselTrackingUpdatedEv
@RunWith(MockitoJUnitRunner.class)
public class ApplyEventTest extends AggregateBaseTest {

	@Test
	public void applyCreateVesselTrackingEvent_ChangeAggrefateState_IfProcessIsOk() {

		CreateVesselTrackingEvent evt = getCreateVesselTrackingEvent();

		agg.apply(evt);

		checkCreateOrUpdateState(evt);
	}

	@Test
	public void applyVesselTrackingCreatedEvent_ChangeAggrefateState_IfProcessIsOk() {

@@ -40,17 +31,7 @@ public class ApplyEventTest extends AggregateBaseTest {

		agg.apply(evt);

		checkCreateOrUpdateState(evt);
	}

	@Test
	public void applyUpdateVesselTrackingEvent_ChangeAggregateState_IfProcessIsOk() {

		UpdateVesselTrackingEvent evt = getUpdateVesselTrackingEvent();

		agg.apply(evt);

		checkCreateOrUpdateState(evt);
		checkCreatedOrUpdatedState(evt);
	}

	@Test
@@ -60,17 +41,7 @@ public class ApplyEventTest extends AggregateBaseTest {

		agg.apply(evt);

		checkCreateOrUpdateState(evt);
	}

	@Test
	public void applyDeleteVesselTrackingEvent_ChangeAggregateState_IfProcessIsOk() {

		DeleteVesselTrackingEvent evt = getDeleteVesselTrackingEvent();

		agg.apply(evt);

		checkDeleteState(evt);
		checkCreatedOrUpdatedState(evt);
	}

	@Test
@@ -84,59 +55,49 @@ public class ApplyEventTest extends AggregateBaseTest {
	}

	@Test
	public void loadFromHistory_ChangeAggregateStateToCreate_IfEventIsCreate() {
	public void loadFromHistory_ChangeAggregateStateToCreated_IfEventIsCreated() {

		CreateVesselTrackingEvent evt = getCreateVesselTrackingEvent();
		VesselTrackingCreatedEvent evt = getVesselTrackingCreatedEvent();

		agg.loadFromHistory(evt);

		checkCreateOrUpdateState(evt);
		checkCreatedOrUpdatedState(evt);
	}

	@Test
	public void loadFromHistory_ChangeAggregateStateToUpdate_IfEventIsUpdate() {
	@Test(expected = ItemLockedException.class)
	public void loadFromHistory_ThrowItemLockedException_IfEventIsCreate() {

		UpdateVesselTrackingEvent evt = getUpdateVesselTrackingEvent();
		CreateVesselTrackingEvent evt = getCreateVesselTrackingEvent();

		agg.loadFromHistory(evt);

		checkCreateOrUpdateState(evt);
	}

	@Test
	public void loadFromHistory_ChangeAggregateStateToDelete_IfEventIsDelete() {
	public void loadFromHistory_ChangeAggregateStateToUpdated_IfEventIsUpdated() {

		DeleteVesselTrackingEvent evt = getDeleteVesselTrackingEvent();
		VesselTrackingUpdatedEvent evt = getVesselTrackingUpdatedEvent();

		agg.loadFromHistory(evt);

		checkDeleteState(evt);
		checkCreatedOrUpdatedState(evt);
	}

	@Test
	public void loadFromHistory_ChangeAggregateStateToDelete_IfLastEventIsDelete() {

		List<Event> history = new ArrayList<>();

		history.add(getCreateVesselTrackingEvent());
		history.add(getUpdateVesselTrackingEvent());
		history.add(getDeleteVesselTrackingEvent());

		history.add(getDeleteVesselTrackingEvent());
	@Test(expected = ItemLockedException.class)
	public void loadFromHistory_ThrowItemLockedException_IfEventIsUpdate() {

		agg.loadFromHistory(history);
		UpdateVesselTrackingEvent evt = getUpdateVesselTrackingEvent();

		checkDeleteState((DeleteVesselTrackingEvent) history.get(3));
		agg.loadFromHistory(evt);
	}

	@Test
	public void loadFromHistory_ChangeAggregateStateToDeleted_IfEventIsDelete() {
	public void loadFromHistory_ChangeAggregateStateToDeleted_IfEventIsDeleted() {

		List<Event> history = new ArrayList<>();

		history.add(getCreateVesselTrackingEvent());
		history.add(getUpdateVesselTrackingEvent());
		history.add(getDeleteVesselTrackingEvent());
		history.add(getVesselTrackingCreatedEvent());
		history.add(getVesselTrackingUpdatedEvent());
		history.add(getVesselTrackingDeletedEvent());

		history.add(getVesselTrackingDeletedEvent());

@@ -145,18 +106,19 @@ public class ApplyEventTest extends AggregateBaseTest {
		checkDeletedState((VesselTrackingDeletedEvent) history.get(3));
	}

	private void checkCreateOrUpdateState(VesselTrackingEvent evt) {
	@Test(expected = ItemLockedException.class)
	public void loadFromHistory_ThrowItemLockedException_IfEventIsDelete() {

		assertEquals(agg.getVersion(), evt.getVersion());
		assertEquals(agg.getAggregateId(), evt.getAggregateId());
		assertEquals(agg.getVesselTracking(), evt.getVesselTracking());
		assertFalse(agg.isDeleted());
		DeleteVesselTrackingEvent evt = getDeleteVesselTrackingEvent();

		agg.loadFromHistory(evt);
	}

	private void checkDeleteState(DeleteVesselTrackingEvent evt) {
	private void checkCreatedOrUpdatedState(VesselTrackingEvent evt) {

		assertEquals(agg.getVersion(), evt.getVersion());
		assertEquals(agg.getAggregateId(), evt.getAggregateId());
		assertEquals(agg.getVesselTracking(), evt.getVesselTracking());
		assertFalse(agg.isDeleted());
	}

Loading