Loading vessels-commands/src/main/java/es/redmic/vesselscommands/aggregate/VesselAggregate.java +43 −137 Original line number Diff line number Diff line package es.redmic.vesselscommands.aggregate; import es.redmic.brokerlib.avro.common.Event; import es.redmic.brokerlib.avro.common.SimpleEvent; import es.redmic.commandslib.aggregate.Aggregate; import es.redmic.commandslib.exceptions.HistoryNotFoundException; import es.redmic.commandslib.exceptions.ItemLockedException; import es.redmic.exception.data.ItemNotFoundException; import es.redmic.exception.database.DBNotFoundException; import es.redmic.vesselscommands.commands.CreateVesselCommand; import es.redmic.vesselscommands.commands.DeleteVesselCommand; Loading @@ -15,15 +11,10 @@ import es.redmic.vesselslib.dto.VesselDTO; import es.redmic.vesselslib.events.vessel.VesselEventTypes; import es.redmic.vesselslib.events.vessel.common.VesselEvent; import es.redmic.vesselslib.events.vessel.create.CreateVesselCancelledEvent; import es.redmic.vesselslib.events.vessel.create.CreateVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.create.CreateVesselEvent; import es.redmic.vesselslib.events.vessel.create.VesselCreatedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselEvent; import es.redmic.vesselslib.events.vessel.delete.VesselDeletedEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselEvent; import es.redmic.vesselslib.events.vessel.update.VesselUpdatedEvent; public class VesselAggregate extends Aggregate { Loading @@ -39,28 +30,16 @@ public class VesselAggregate extends Aggregate { assert vesselStateStore != null; String vesselId = cmd.getVessel().getId(); String id = cmd.getVessel().getId(); if (vesselId != null) { // comprueba que el MMSI no esté introducido Event state = vesselStateStore.getVessel(vesselId); if (state != null) { loadFromHistory(state); if (!isDeleted()) { logger.info("Descartando barco " + vesselId + ". El barco ya está registrado."); if (exist(id)) { logger.info("Descartando inserción de " + id + ". El item ya está registrado."); return null; // Se lanza excepción en el origen no aquí } reset(); } } this.setAggregateId(vesselId); this.setAggregateId(id); CreateVesselEvent evt = new CreateVesselEvent(cmd.getVessel()); evt.setAggregateId(vesselId); evt.setAggregateId(id); evt.setVersion(1); return evt; } Loading @@ -69,29 +48,16 @@ public class VesselAggregate extends Aggregate { assert vesselStateStore != null; String vesselId = cmd.getVessel().getId(); Event state = vesselStateStore.getVessel(vesselId); String id = cmd.getVessel().getId(); if (state == null) { logger.error("Intentando modificar un elemento del cual no se tiene historial, ", vesselId); throw new HistoryNotFoundException(VesselEventTypes.UPDATE.toString(), vesselId); } Event state = getStateFromHistory(id); loadFromHistory(state); if (this.deleted) { logger.error("Intentando modificar un elemento eliminado, ", vesselId); throw new ItemNotFoundException("id", vesselId); } if (VesselEventTypes.isLocked(state.getType())) { logger.error("Intentando modificar un elemento bloqueado por una edición en curso, ", vesselId); throw new ItemLockedException("id", vesselId); } checkState(id, state.getType()); UpdateVesselEvent evt = new UpdateVesselEvent(cmd.getVessel()); evt.setAggregateId(vesselId); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } Loading @@ -100,29 +66,16 @@ public class VesselAggregate extends Aggregate { assert vesselStateStore != null; String vesselId = cmd.getVesselId(); Event state = vesselStateStore.getVessel(vesselId); String id = cmd.getVesselId(); if (state == null) { logger.error("Intentando eliminar un elemento del cual no se tiene historial, " + vesselId); throw new HistoryNotFoundException(VesselEventTypes.DELETE.toString(), vesselId); } Event state = getStateFromHistory(id); loadFromHistory(state); if (this.deleted) { logger.error("Intentando eliminar un elemento que ya está eliminado, ", vesselId); throw new ItemNotFoundException("id", vesselId); } if (VesselEventTypes.isLocked(state.getType())) { logger.error("Intentando eliminar un elemento bloqueado por una edición en curso, ", vesselId); throw new ItemLockedException("id", vesselId); } checkState(id, state.getType()); DeleteVesselEvent evt = new DeleteVesselEvent(); evt.setAggregateId(vesselId); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } Loading @@ -135,7 +88,7 @@ public class VesselAggregate extends Aggregate { CreateVesselCommand cmd = new CreateVesselCommand(type); Event state = vesselStateStore.getVessel(cmd.getVessel().getId()); Event state = getItemFromStateStore(cmd.getVessel().getId()); if (state == null) { throw new DBNotFoundException("id", cmd.getVessel().getId()); Loading @@ -146,6 +99,18 @@ public class VesselAggregate extends Aggregate { return getVessel(); } @Override protected boolean isLocked(String eventType) { return VesselEventTypes.isLocked(eventType); } @Override protected Event getItemFromStateStore(String id) { return vesselStateStore.getVessel(id); } @Override public void loadFromHistory(Event history) { Loading @@ -155,113 +120,54 @@ public class VesselAggregate extends Aggregate { switch (eventType) { case "CREATE": apply((CreateVesselEvent) history); break; case "CREATE_CONFIRMED": apply((CreateVesselConfirmedEvent) history); logger.debug("En fase de creación"); apply((VesselEvent) history); break; case "CREATED": apply((VesselCreatedEvent) history); logger.debug("Item creado"); apply((VesselEvent) history); break; case "UPDATE": apply((UpdateVesselEvent) history); break; case "UPDATE_CONFIRMED": apply((UpdateVesselConfirmedEvent) history); logger.debug("En fase de modificación"); apply((VesselEvent) history); break; case "UPDATED": apply((VesselUpdatedEvent) history); break; case "DELETE": apply((DeleteVesselEvent) history); break; case "DELETE_CONFIRMED": apply((DeleteVesselConfirmedEvent) history); logger.debug("Item modificado"); apply((VesselEvent) history); break; case "DELETED": logger.debug("Item borrado"); apply((VesselDeletedEvent) history); break; // FAILED case "CREATE_FAILED": case "UPDATE_FAILED": case "DELETE_FAILED": logger.debug("Evento fallido"); _apply((SimpleEvent) history); break; // CANCELLED case "CREATE_CANCELLED": logger.debug("Compensación por creación fallida"); apply((CreateVesselCancelledEvent) history); break; case "UPDATE_CANCELLED": case "DELETE_CANCELLED": logger.debug("Compensación por edición/borrado fallido"); _apply((VesselEvent) history); apply((VesselEvent) history); break; default: logger.debug("Evento no manejado ", history.getType()); super._loadFromHistory(history); break; } } public void apply(CreateVesselEvent event) { logger.debug("En fase de creación"); _apply(event); } public void apply(CreateVesselConfirmedEvent event) { logger.debug("Creación confirmada"); _apply(event); } public void apply(VesselCreatedEvent event) { logger.debug("Item creado"); _apply(event); } public void apply(CreateVesselCancelledEvent event) { logger.debug("Compensación por creación fallida"); this.deleted = true; setVersion(event.getVersion()); setAggregateId(event.getAggregateId()); } public void apply(UpdateVesselEvent event) { logger.debug("En fase de modificación"); _apply(event); } public void apply(UpdateVesselConfirmedEvent event) { logger.debug("Modificación confirmada"); _apply(event); } public void apply(VesselUpdatedEvent event) { logger.debug("Item modificado"); _apply(event); } public void apply(DeleteVesselEvent event) { logger.debug("En fase de borrado"); this.deleted = true; _apply(event); } public void apply(DeleteVesselConfirmedEvent event) { logger.debug("Borrado confirmado"); this.deleted = true; _apply(event); apply(event); } public void apply(VesselDeletedEvent event) { logger.debug("Item borrado"); this.deleted = true; _apply(event); super.apply(event); } private void _apply(VesselEvent event) { public void apply(VesselEvent event) { this.vessel = event.getVessel(); setVersion(event.getVersion()); setAggregateId(event.getAggregateId()); super.apply(event); } @Override Loading vessels-commands/src/main/java/es/redmic/vesselscommands/aggregate/VesselTypeAggregate.java +42 −133 Original line number Diff line number Diff line package es.redmic.vesselscommands.aggregate; import es.redmic.brokerlib.avro.common.Event; import es.redmic.brokerlib.avro.common.SimpleEvent; import es.redmic.commandslib.aggregate.Aggregate; import es.redmic.commandslib.exceptions.HistoryNotFoundException; import es.redmic.commandslib.exceptions.ItemLockedException; import es.redmic.exception.data.ItemNotFoundException; import es.redmic.exception.database.DBNotFoundException; import es.redmic.vesselscommands.commands.CreateVesselTypeCommand; import es.redmic.vesselscommands.commands.DeleteVesselTypeCommand; Loading @@ -15,15 +11,10 @@ import es.redmic.vesselslib.dto.VesselTypeDTO; import es.redmic.vesselslib.events.vesseltype.VesselTypeEventTypes; import es.redmic.vesselslib.events.vesseltype.common.VesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.create.CreateVesselTypeCancelledEvent; import es.redmic.vesselslib.events.vesseltype.create.CreateVesselTypeConfirmedEvent; import es.redmic.vesselslib.events.vesseltype.create.CreateVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.create.VesselTypeCreatedEvent; import es.redmic.vesselslib.events.vesseltype.delete.DeleteVesselTypeConfirmedEvent; import es.redmic.vesselslib.events.vesseltype.delete.DeleteVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.delete.VesselTypeDeletedEvent; import es.redmic.vesselslib.events.vesseltype.update.UpdateVesselTypeConfirmedEvent; import es.redmic.vesselslib.events.vesseltype.update.UpdateVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.update.VesselTypeUpdatedEvent; public class VesselTypeAggregate extends Aggregate { Loading @@ -40,26 +31,17 @@ public class VesselTypeAggregate extends Aggregate { assert vesselTypeStateStore != null; String vesselTypeId = cmd.getVesselType().getId(); String id = cmd.getVesselType().getId(); Event state = vesselTypeStateStore.getVesselType(vesselTypeId); if (state != null) { loadFromHistory(state); if (!isDeleted()) { logger.info("Descartando vessel type " + vesselTypeId + ". Ya está registrado."); if (exist(id)) { logger.info("Descartando vessel type " + id + ". Ya está registrado."); return null; // Se lanza excepción en el origen no aquí } reset(); } this.setAggregateId(vesselTypeId); this.setAggregateId(id); CreateVesselTypeEvent evt = new CreateVesselTypeEvent(cmd.getVesselType()); evt.setAggregateId(vesselTypeId); evt.setAggregateId(id); evt.setVersion(1); return evt; } Loading @@ -68,29 +50,16 @@ public class VesselTypeAggregate extends Aggregate { assert vesselTypeStateStore != null; String vesselTypeId = cmd.getVesselType().getId(); String id = cmd.getVesselType().getId(); Event state = vesselTypeStateStore.getVesselType(vesselTypeId); if (state == null) { logger.error("Intentando modificar un elemento del cual no se tiene historial", vesselTypeId); throw new HistoryNotFoundException(VesselTypeEventTypes.UPDATE, vesselTypeId); } Event state = getStateFromHistory(id); loadFromHistory(state); if (this.deleted) { logger.error("Intentando editar un elemento que ya está eliminado, ", vesselTypeId); throw new ItemNotFoundException("id", vesselTypeId); } if (VesselTypeEventTypes.isLocked(state.getType())) { logger.error("Intentando modificar un elemento bloqueado por una edición en curso, ", vesselTypeId); throw new ItemLockedException("id", vesselTypeId); } checkState(id, state.getType()); UpdateVesselTypeEvent evt = new UpdateVesselTypeEvent(cmd.getVesselType()); evt.setAggregateId(vesselTypeId); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } Loading @@ -99,29 +68,16 @@ public class VesselTypeAggregate extends Aggregate { assert vesselTypeStateStore != null; String vesselTypeId = cmd.getVesselTypeId(); String id = cmd.getVesselTypeId(); Event state = vesselTypeStateStore.getVesselType(vesselTypeId); if (state == null) { logger.error("Intentando eliminar un elemento del cual no se tiene historial, " + vesselTypeId); throw new HistoryNotFoundException(VesselTypeEventTypes.UPDATE, vesselTypeId); } Event state = getStateFromHistory(id); loadFromHistory(state); if (this.deleted) { logger.error("Intentando eliminar un elemento que ya está eliminado, ", vesselTypeId); throw new ItemNotFoundException("id", vesselTypeId); } if (VesselTypeEventTypes.isLocked(state.getType())) { logger.error("Intentando eliminar un elemento bloqueado por una edición en curso, ", vesselTypeId); throw new ItemLockedException("id", vesselTypeId); } checkState(id, state.getType()); DeleteVesselTypeEvent evt = new DeleteVesselTypeEvent(); evt.setAggregateId(vesselTypeId); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } Loading @@ -145,6 +101,18 @@ public class VesselTypeAggregate extends Aggregate { return getVesselType(); } @Override protected boolean isLocked(String eventType) { return VesselTypeEventTypes.isLocked(eventType); } @Override protected Event getItemFromStateStore(String id) { return vesselTypeStateStore.getVesselType(id); } @Override public void loadFromHistory(Event history) { Loading @@ -154,112 +122,53 @@ public class VesselTypeAggregate extends Aggregate { switch (eventType) { case "CREATE": apply((CreateVesselTypeEvent) history); break; case "CREATE_CONFIRMED": apply((CreateVesselTypeConfirmedEvent) history); logger.debug("En fase de creación"); apply((VesselTypeEvent) history); break; case "CREATED": apply((VesselTypeCreatedEvent) history); logger.debug("Item creado"); apply((VesselTypeEvent) history); break; case "UPDATE": apply((UpdateVesselTypeEvent) history); break; case "UPDATE_CONFIRMED": apply((UpdateVesselTypeConfirmedEvent) history); logger.debug("En fase de modificación"); apply((VesselTypeEvent) history); break; case "UPDATED": apply((VesselTypeUpdatedEvent) history); break; case "DELETE": apply((DeleteVesselTypeEvent) history); break; case "DELETE_CONFIRMED": apply((DeleteVesselTypeConfirmedEvent) history); logger.debug("Item modificado"); apply((VesselTypeEvent) history); break; case "DELETED": logger.debug("Item borrado"); apply((VesselTypeDeletedEvent) history); break; // FAILED case "CREATE_FAILED": case "UPDATE_FAILED": case "DELETE_FAILED": logger.debug("Evento fallido"); _apply((SimpleEvent) history); break; // CANCELLED case "CREATE_CANCELLED": logger.debug("Compensación por creación fallida"); apply((CreateVesselTypeCancelledEvent) history); break; case "UPDATE_CANCELLED": case "DELETE_CANCELLED": logger.debug("Compensación por edición/borrado fallido"); _apply((VesselTypeEvent) history); apply((VesselTypeEvent) history); break; default: break; } super._loadFromHistory(history); } public void apply(CreateVesselTypeEvent event) { logger.debug("En fase de creación"); _apply(event); } public void apply(CreateVesselTypeConfirmedEvent event) { logger.debug("Creación confirmada"); _apply(event); } public void apply(VesselTypeCreatedEvent event) { logger.debug("Item creado"); _apply(event); } public void apply(CreateVesselTypeCancelledEvent event) { logger.debug("Compensación por creación fallida"); this.deleted = true; setVersion(event.getVersion()); setAggregateId(event.getAggregateId()); } public void apply(UpdateVesselTypeEvent event) { logger.debug("En fase de modificación"); _apply(event); } public void apply(UpdateVesselTypeConfirmedEvent event) { logger.debug("Modificación confirmada"); _apply(event); } public void apply(VesselTypeUpdatedEvent event) { logger.debug("Item modificado"); _apply(event); } public void apply(DeleteVesselTypeEvent event) { logger.debug("En fase de borrado"); this.deleted = true; _apply(event); } public void apply(DeleteVesselTypeConfirmedEvent event) { logger.debug("Borrado confirmado"); this.deleted = true; _apply(event); apply(event); } public void apply(VesselTypeDeletedEvent event) { logger.debug("Item borrado"); this.deleted = true; _apply(event); super.apply(event); } private void _apply(VesselTypeEvent event) { public void apply(VesselTypeEvent event) { this.vesselType = event.getVesselType(); setVersion(event.getVersion()); setAggregateId(event.getAggregateId()); super.apply(event); } @Override Loading vessels-commands/src/test/java/es/redmic/test/vesselscommands/unit/aggregate/vessel/ApplyEventTest.java +63 −14 Original line number Diff line number Diff line Loading @@ -12,35 +12,59 @@ import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; import es.redmic.brokerlib.avro.common.Event; import es.redmic.vesselslib.events.vessel.common.VesselEvent; import es.redmic.vesselslib.events.vessel.create.CreateVesselEvent; import es.redmic.vesselslib.events.vessel.create.VesselCreatedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselEvent; import es.redmic.vesselslib.events.vessel.delete.VesselDeletedEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselEvent; import es.redmic.vesselslib.events.vessel.update.VesselUpdatedEvent; @RunWith(MockitoJUnitRunner.class) public class ApplyEventTest extends AggregateBaseTest { @Test public void applyVesselCreateEvent_ChangeAggrefateState_IfProcessIsOk() { public void applyCreateVesselEvent_ChangeAggrefateState_IfProcessIsOk() { CreateVesselEvent evt = getCreateVesselEvent(); agg.apply(evt); checkCreateState(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselUpdateEvent_ChangeAggregateState_IfProcessIsOk() { public void applyVesselCreatedEvent_ChangeAggrefateState_IfProcessIsOk() { VesselCreatedEvent evt = getVesselCreatedEvent(); agg.apply(evt); checkCreateOrUpdateState(evt); } @Test public void applyUpdateVesselEvent_ChangeAggregateState_IfProcessIsOk() { UpdateVesselEvent evt = getUpdateVesselEvent(); agg.apply(evt); checkUpdateState(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselUpdatedEvent_ChangeAggregateState_IfProcessIsOk() { VesselUpdatedEvent evt = getVesselUpdatedEvent(); agg.apply(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselDeleteEvent_ChangeAggregateState_IfProcessIsOk() { public void applyDeleteVesselEvent_ChangeAggregateState_IfProcessIsOk() { DeleteVesselEvent evt = getDeleteVesselEvent(); Loading @@ -49,6 +73,16 @@ public class ApplyEventTest extends AggregateBaseTest { checkDeleteState(evt); } @Test public void applyVesselDeletedEvent_ChangeAggregateState_IfProcessIsOk() { VesselDeletedEvent evt = getVesselDeletedEvent(); agg.apply(evt); checkDeletedState(evt); } @Test public void loadFromHistory_ChangeAggregateStateToCreate_IfEventIsCreate() { Loading @@ -56,7 +90,7 @@ public class ApplyEventTest extends AggregateBaseTest { agg.loadFromHistory(evt); checkCreateState(evt); checkCreateOrUpdateState(evt); } @Test Loading @@ -66,7 +100,7 @@ public class ApplyEventTest extends AggregateBaseTest { agg.loadFromHistory(evt); checkUpdateState(evt); checkCreateOrUpdateState(evt); } @Test Loading @@ -88,14 +122,30 @@ public class ApplyEventTest extends AggregateBaseTest { history.add(getUpdateVesselEvent()); history.add(getDeleteVesselEvent()); DeleteVesselEvent evt = getDeleteVesselEvent(); history.add(getDeleteVesselEvent()); agg.loadFromHistory(evt); agg.loadFromHistory(history); checkDeleteState(evt); checkDeleteState((DeleteVesselEvent) history.get(3)); } @Test public void loadFromHistory_ChangeAggregateStateToDeleted_IfEventIsDelete() { List<Event> history = new ArrayList<>(); history.add(getCreateVesselEvent()); history.add(getUpdateVesselEvent()); history.add(getDeleteVesselEvent()); history.add(getVesselDeletedEvent()); agg.loadFromHistory(history); checkDeletedState((VesselDeletedEvent) history.get(3)); } private void checkCreateState(CreateVesselEvent evt) { private void checkCreateOrUpdateState(VesselEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); Loading @@ -103,15 +153,14 @@ public class ApplyEventTest extends AggregateBaseTest { assertFalse(agg.isDeleted()); } private void checkUpdateState(UpdateVesselEvent evt) { private void checkDeleteState(DeleteVesselEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); assertEquals(agg.getVessel(), evt.getVessel()); assertFalse(agg.isDeleted()); } private void checkDeleteState(DeleteVesselEvent evt) { private void checkDeletedState(VesselDeletedEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); Loading vessels-commands/src/test/java/es/redmic/test/vesselscommands/unit/aggregate/vesseltype/ApplyEventTest.java +62 −14 Original line number Diff line number Diff line Loading @@ -12,35 +12,59 @@ import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; import es.redmic.brokerlib.avro.common.Event; import es.redmic.vesselslib.events.vesseltype.common.VesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.create.CreateVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.create.VesselTypeCreatedEvent; import es.redmic.vesselslib.events.vesseltype.delete.DeleteVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.delete.VesselTypeDeletedEvent; import es.redmic.vesselslib.events.vesseltype.update.UpdateVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.update.VesselTypeUpdatedEvent; @RunWith(MockitoJUnitRunner.class) public class ApplyEventTest extends AggregateBaseTest { @Test public void applyVesselTypeCreateEvent_ChangeAggrefateState_IfProcessIsOk() { public void applyCreateVesselTypeEvent_ChangeAggrefateState_IfProcessIsOk() { CreateVesselTypeEvent evt = getCreateVesselTypeEvent(); agg.apply(evt); checkCreateState(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselTypeUpdateEvent_ChangeAggregateState_IfProcessIsOk() { public void applyVesselTypeCreatedEvent_ChangeAggrefateState_IfProcessIsOk() { VesselTypeCreatedEvent evt = getVesselTypeCreatedEvent(); agg.apply(evt); checkCreateOrUpdateState(evt); } @Test public void applyUpdateVesselTypeEvent_ChangeAggregateState_IfProcessIsOk() { UpdateVesselTypeEvent evt = getUpdateVesselTypeEvent(); agg.apply(evt); checkUpdateState(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselTypeUpdatedEvent_ChangeAggregateState_IfProcessIsOk() { VesselTypeUpdatedEvent evt = getVesselTypeUpdatedEvent(); agg.apply(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselTypeDeleteEvent_ChangeAggregateState_IfProcessIsOk() { public void applyDeleteVesselTypeEvent_ChangeAggregateState_IfProcessIsOk() { DeleteVesselTypeEvent evt = getDeleteVesselTypeEvent(); Loading @@ -49,6 +73,16 @@ public class ApplyEventTest extends AggregateBaseTest { checkDeleteState(evt); } @Test public void applyVesselTypeDeletedEvent_ChangeAggregateState_IfProcessIsOk() { VesselTypeDeletedEvent evt = getVesselTypeDeletedEvent(); agg.apply(evt); checkDeletedState(evt); } @Test public void loadFromHistory_ChangeAggregateStateToCreate_IfEventIsCreate() { Loading @@ -56,7 +90,7 @@ public class ApplyEventTest extends AggregateBaseTest { agg.loadFromHistory(evt); checkCreateState(evt); checkCreateOrUpdateState(evt); } @Test Loading @@ -66,7 +100,7 @@ public class ApplyEventTest extends AggregateBaseTest { agg.loadFromHistory(evt); checkUpdateState(evt); checkCreateOrUpdateState(evt); } @Test Loading @@ -88,14 +122,29 @@ public class ApplyEventTest extends AggregateBaseTest { history.add(getUpdateVesselTypeEvent()); history.add(getDeleteVesselTypeEvent()); DeleteVesselTypeEvent evt = getDeleteVesselTypeEvent(); history.add(getDeleteVesselTypeEvent()); agg.loadFromHistory(evt); agg.loadFromHistory(history); checkDeleteState(evt); checkDeleteState((DeleteVesselTypeEvent) history.get(3)); } private void checkCreateState(CreateVesselTypeEvent evt) { @Test public void loadFromHistory_ChangeAggregateStateToDeleted_IfLastEventIsDelete() { List<Event> history = new ArrayList<>(); history.add(getCreateVesselTypeEvent()); history.add(getUpdateVesselTypeEvent()); history.add(getVesselTypeDeletedEvent()); agg.loadFromHistory(history); checkDeletedState((VesselTypeDeletedEvent) history.get(2)); } private void checkCreateOrUpdateState(VesselTypeEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); Loading @@ -103,15 +152,14 @@ public class ApplyEventTest extends AggregateBaseTest { assertFalse(agg.isDeleted()); } private void checkUpdateState(UpdateVesselTypeEvent evt) { private void checkDeleteState(DeleteVesselTypeEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); assertEquals(agg.getVesselType(), evt.getVesselType()); assertFalse(agg.isDeleted()); } private void checkDeleteState(DeleteVesselTypeEvent evt) { private void checkDeletedState(VesselTypeDeletedEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); Loading Loading
vessels-commands/src/main/java/es/redmic/vesselscommands/aggregate/VesselAggregate.java +43 −137 Original line number Diff line number Diff line package es.redmic.vesselscommands.aggregate; import es.redmic.brokerlib.avro.common.Event; import es.redmic.brokerlib.avro.common.SimpleEvent; import es.redmic.commandslib.aggregate.Aggregate; import es.redmic.commandslib.exceptions.HistoryNotFoundException; import es.redmic.commandslib.exceptions.ItemLockedException; import es.redmic.exception.data.ItemNotFoundException; import es.redmic.exception.database.DBNotFoundException; import es.redmic.vesselscommands.commands.CreateVesselCommand; import es.redmic.vesselscommands.commands.DeleteVesselCommand; Loading @@ -15,15 +11,10 @@ import es.redmic.vesselslib.dto.VesselDTO; import es.redmic.vesselslib.events.vessel.VesselEventTypes; import es.redmic.vesselslib.events.vessel.common.VesselEvent; import es.redmic.vesselslib.events.vessel.create.CreateVesselCancelledEvent; import es.redmic.vesselslib.events.vessel.create.CreateVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.create.CreateVesselEvent; import es.redmic.vesselslib.events.vessel.create.VesselCreatedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselEvent; import es.redmic.vesselslib.events.vessel.delete.VesselDeletedEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselConfirmedEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselEvent; import es.redmic.vesselslib.events.vessel.update.VesselUpdatedEvent; public class VesselAggregate extends Aggregate { Loading @@ -39,28 +30,16 @@ public class VesselAggregate extends Aggregate { assert vesselStateStore != null; String vesselId = cmd.getVessel().getId(); String id = cmd.getVessel().getId(); if (vesselId != null) { // comprueba que el MMSI no esté introducido Event state = vesselStateStore.getVessel(vesselId); if (state != null) { loadFromHistory(state); if (!isDeleted()) { logger.info("Descartando barco " + vesselId + ". El barco ya está registrado."); if (exist(id)) { logger.info("Descartando inserción de " + id + ". El item ya está registrado."); return null; // Se lanza excepción en el origen no aquí } reset(); } } this.setAggregateId(vesselId); this.setAggregateId(id); CreateVesselEvent evt = new CreateVesselEvent(cmd.getVessel()); evt.setAggregateId(vesselId); evt.setAggregateId(id); evt.setVersion(1); return evt; } Loading @@ -69,29 +48,16 @@ public class VesselAggregate extends Aggregate { assert vesselStateStore != null; String vesselId = cmd.getVessel().getId(); Event state = vesselStateStore.getVessel(vesselId); String id = cmd.getVessel().getId(); if (state == null) { logger.error("Intentando modificar un elemento del cual no se tiene historial, ", vesselId); throw new HistoryNotFoundException(VesselEventTypes.UPDATE.toString(), vesselId); } Event state = getStateFromHistory(id); loadFromHistory(state); if (this.deleted) { logger.error("Intentando modificar un elemento eliminado, ", vesselId); throw new ItemNotFoundException("id", vesselId); } if (VesselEventTypes.isLocked(state.getType())) { logger.error("Intentando modificar un elemento bloqueado por una edición en curso, ", vesselId); throw new ItemLockedException("id", vesselId); } checkState(id, state.getType()); UpdateVesselEvent evt = new UpdateVesselEvent(cmd.getVessel()); evt.setAggregateId(vesselId); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } Loading @@ -100,29 +66,16 @@ public class VesselAggregate extends Aggregate { assert vesselStateStore != null; String vesselId = cmd.getVesselId(); Event state = vesselStateStore.getVessel(vesselId); String id = cmd.getVesselId(); if (state == null) { logger.error("Intentando eliminar un elemento del cual no se tiene historial, " + vesselId); throw new HistoryNotFoundException(VesselEventTypes.DELETE.toString(), vesselId); } Event state = getStateFromHistory(id); loadFromHistory(state); if (this.deleted) { logger.error("Intentando eliminar un elemento que ya está eliminado, ", vesselId); throw new ItemNotFoundException("id", vesselId); } if (VesselEventTypes.isLocked(state.getType())) { logger.error("Intentando eliminar un elemento bloqueado por una edición en curso, ", vesselId); throw new ItemLockedException("id", vesselId); } checkState(id, state.getType()); DeleteVesselEvent evt = new DeleteVesselEvent(); evt.setAggregateId(vesselId); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } Loading @@ -135,7 +88,7 @@ public class VesselAggregate extends Aggregate { CreateVesselCommand cmd = new CreateVesselCommand(type); Event state = vesselStateStore.getVessel(cmd.getVessel().getId()); Event state = getItemFromStateStore(cmd.getVessel().getId()); if (state == null) { throw new DBNotFoundException("id", cmd.getVessel().getId()); Loading @@ -146,6 +99,18 @@ public class VesselAggregate extends Aggregate { return getVessel(); } @Override protected boolean isLocked(String eventType) { return VesselEventTypes.isLocked(eventType); } @Override protected Event getItemFromStateStore(String id) { return vesselStateStore.getVessel(id); } @Override public void loadFromHistory(Event history) { Loading @@ -155,113 +120,54 @@ public class VesselAggregate extends Aggregate { switch (eventType) { case "CREATE": apply((CreateVesselEvent) history); break; case "CREATE_CONFIRMED": apply((CreateVesselConfirmedEvent) history); logger.debug("En fase de creación"); apply((VesselEvent) history); break; case "CREATED": apply((VesselCreatedEvent) history); logger.debug("Item creado"); apply((VesselEvent) history); break; case "UPDATE": apply((UpdateVesselEvent) history); break; case "UPDATE_CONFIRMED": apply((UpdateVesselConfirmedEvent) history); logger.debug("En fase de modificación"); apply((VesselEvent) history); break; case "UPDATED": apply((VesselUpdatedEvent) history); break; case "DELETE": apply((DeleteVesselEvent) history); break; case "DELETE_CONFIRMED": apply((DeleteVesselConfirmedEvent) history); logger.debug("Item modificado"); apply((VesselEvent) history); break; case "DELETED": logger.debug("Item borrado"); apply((VesselDeletedEvent) history); break; // FAILED case "CREATE_FAILED": case "UPDATE_FAILED": case "DELETE_FAILED": logger.debug("Evento fallido"); _apply((SimpleEvent) history); break; // CANCELLED case "CREATE_CANCELLED": logger.debug("Compensación por creación fallida"); apply((CreateVesselCancelledEvent) history); break; case "UPDATE_CANCELLED": case "DELETE_CANCELLED": logger.debug("Compensación por edición/borrado fallido"); _apply((VesselEvent) history); apply((VesselEvent) history); break; default: logger.debug("Evento no manejado ", history.getType()); super._loadFromHistory(history); break; } } public void apply(CreateVesselEvent event) { logger.debug("En fase de creación"); _apply(event); } public void apply(CreateVesselConfirmedEvent event) { logger.debug("Creación confirmada"); _apply(event); } public void apply(VesselCreatedEvent event) { logger.debug("Item creado"); _apply(event); } public void apply(CreateVesselCancelledEvent event) { logger.debug("Compensación por creación fallida"); this.deleted = true; setVersion(event.getVersion()); setAggregateId(event.getAggregateId()); } public void apply(UpdateVesselEvent event) { logger.debug("En fase de modificación"); _apply(event); } public void apply(UpdateVesselConfirmedEvent event) { logger.debug("Modificación confirmada"); _apply(event); } public void apply(VesselUpdatedEvent event) { logger.debug("Item modificado"); _apply(event); } public void apply(DeleteVesselEvent event) { logger.debug("En fase de borrado"); this.deleted = true; _apply(event); } public void apply(DeleteVesselConfirmedEvent event) { logger.debug("Borrado confirmado"); this.deleted = true; _apply(event); apply(event); } public void apply(VesselDeletedEvent event) { logger.debug("Item borrado"); this.deleted = true; _apply(event); super.apply(event); } private void _apply(VesselEvent event) { public void apply(VesselEvent event) { this.vessel = event.getVessel(); setVersion(event.getVersion()); setAggregateId(event.getAggregateId()); super.apply(event); } @Override Loading
vessels-commands/src/main/java/es/redmic/vesselscommands/aggregate/VesselTypeAggregate.java +42 −133 Original line number Diff line number Diff line package es.redmic.vesselscommands.aggregate; import es.redmic.brokerlib.avro.common.Event; import es.redmic.brokerlib.avro.common.SimpleEvent; import es.redmic.commandslib.aggregate.Aggregate; import es.redmic.commandslib.exceptions.HistoryNotFoundException; import es.redmic.commandslib.exceptions.ItemLockedException; import es.redmic.exception.data.ItemNotFoundException; import es.redmic.exception.database.DBNotFoundException; import es.redmic.vesselscommands.commands.CreateVesselTypeCommand; import es.redmic.vesselscommands.commands.DeleteVesselTypeCommand; Loading @@ -15,15 +11,10 @@ import es.redmic.vesselslib.dto.VesselTypeDTO; import es.redmic.vesselslib.events.vesseltype.VesselTypeEventTypes; import es.redmic.vesselslib.events.vesseltype.common.VesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.create.CreateVesselTypeCancelledEvent; import es.redmic.vesselslib.events.vesseltype.create.CreateVesselTypeConfirmedEvent; import es.redmic.vesselslib.events.vesseltype.create.CreateVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.create.VesselTypeCreatedEvent; import es.redmic.vesselslib.events.vesseltype.delete.DeleteVesselTypeConfirmedEvent; import es.redmic.vesselslib.events.vesseltype.delete.DeleteVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.delete.VesselTypeDeletedEvent; import es.redmic.vesselslib.events.vesseltype.update.UpdateVesselTypeConfirmedEvent; import es.redmic.vesselslib.events.vesseltype.update.UpdateVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.update.VesselTypeUpdatedEvent; public class VesselTypeAggregate extends Aggregate { Loading @@ -40,26 +31,17 @@ public class VesselTypeAggregate extends Aggregate { assert vesselTypeStateStore != null; String vesselTypeId = cmd.getVesselType().getId(); String id = cmd.getVesselType().getId(); Event state = vesselTypeStateStore.getVesselType(vesselTypeId); if (state != null) { loadFromHistory(state); if (!isDeleted()) { logger.info("Descartando vessel type " + vesselTypeId + ". Ya está registrado."); if (exist(id)) { logger.info("Descartando vessel type " + id + ". Ya está registrado."); return null; // Se lanza excepción en el origen no aquí } reset(); } this.setAggregateId(vesselTypeId); this.setAggregateId(id); CreateVesselTypeEvent evt = new CreateVesselTypeEvent(cmd.getVesselType()); evt.setAggregateId(vesselTypeId); evt.setAggregateId(id); evt.setVersion(1); return evt; } Loading @@ -68,29 +50,16 @@ public class VesselTypeAggregate extends Aggregate { assert vesselTypeStateStore != null; String vesselTypeId = cmd.getVesselType().getId(); String id = cmd.getVesselType().getId(); Event state = vesselTypeStateStore.getVesselType(vesselTypeId); if (state == null) { logger.error("Intentando modificar un elemento del cual no se tiene historial", vesselTypeId); throw new HistoryNotFoundException(VesselTypeEventTypes.UPDATE, vesselTypeId); } Event state = getStateFromHistory(id); loadFromHistory(state); if (this.deleted) { logger.error("Intentando editar un elemento que ya está eliminado, ", vesselTypeId); throw new ItemNotFoundException("id", vesselTypeId); } if (VesselTypeEventTypes.isLocked(state.getType())) { logger.error("Intentando modificar un elemento bloqueado por una edición en curso, ", vesselTypeId); throw new ItemLockedException("id", vesselTypeId); } checkState(id, state.getType()); UpdateVesselTypeEvent evt = new UpdateVesselTypeEvent(cmd.getVesselType()); evt.setAggregateId(vesselTypeId); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } Loading @@ -99,29 +68,16 @@ public class VesselTypeAggregate extends Aggregate { assert vesselTypeStateStore != null; String vesselTypeId = cmd.getVesselTypeId(); String id = cmd.getVesselTypeId(); Event state = vesselTypeStateStore.getVesselType(vesselTypeId); if (state == null) { logger.error("Intentando eliminar un elemento del cual no se tiene historial, " + vesselTypeId); throw new HistoryNotFoundException(VesselTypeEventTypes.UPDATE, vesselTypeId); } Event state = getStateFromHistory(id); loadFromHistory(state); if (this.deleted) { logger.error("Intentando eliminar un elemento que ya está eliminado, ", vesselTypeId); throw new ItemNotFoundException("id", vesselTypeId); } if (VesselTypeEventTypes.isLocked(state.getType())) { logger.error("Intentando eliminar un elemento bloqueado por una edición en curso, ", vesselTypeId); throw new ItemLockedException("id", vesselTypeId); } checkState(id, state.getType()); DeleteVesselTypeEvent evt = new DeleteVesselTypeEvent(); evt.setAggregateId(vesselTypeId); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } Loading @@ -145,6 +101,18 @@ public class VesselTypeAggregate extends Aggregate { return getVesselType(); } @Override protected boolean isLocked(String eventType) { return VesselTypeEventTypes.isLocked(eventType); } @Override protected Event getItemFromStateStore(String id) { return vesselTypeStateStore.getVesselType(id); } @Override public void loadFromHistory(Event history) { Loading @@ -154,112 +122,53 @@ public class VesselTypeAggregate extends Aggregate { switch (eventType) { case "CREATE": apply((CreateVesselTypeEvent) history); break; case "CREATE_CONFIRMED": apply((CreateVesselTypeConfirmedEvent) history); logger.debug("En fase de creación"); apply((VesselTypeEvent) history); break; case "CREATED": apply((VesselTypeCreatedEvent) history); logger.debug("Item creado"); apply((VesselTypeEvent) history); break; case "UPDATE": apply((UpdateVesselTypeEvent) history); break; case "UPDATE_CONFIRMED": apply((UpdateVesselTypeConfirmedEvent) history); logger.debug("En fase de modificación"); apply((VesselTypeEvent) history); break; case "UPDATED": apply((VesselTypeUpdatedEvent) history); break; case "DELETE": apply((DeleteVesselTypeEvent) history); break; case "DELETE_CONFIRMED": apply((DeleteVesselTypeConfirmedEvent) history); logger.debug("Item modificado"); apply((VesselTypeEvent) history); break; case "DELETED": logger.debug("Item borrado"); apply((VesselTypeDeletedEvent) history); break; // FAILED case "CREATE_FAILED": case "UPDATE_FAILED": case "DELETE_FAILED": logger.debug("Evento fallido"); _apply((SimpleEvent) history); break; // CANCELLED case "CREATE_CANCELLED": logger.debug("Compensación por creación fallida"); apply((CreateVesselTypeCancelledEvent) history); break; case "UPDATE_CANCELLED": case "DELETE_CANCELLED": logger.debug("Compensación por edición/borrado fallido"); _apply((VesselTypeEvent) history); apply((VesselTypeEvent) history); break; default: break; } super._loadFromHistory(history); } public void apply(CreateVesselTypeEvent event) { logger.debug("En fase de creación"); _apply(event); } public void apply(CreateVesselTypeConfirmedEvent event) { logger.debug("Creación confirmada"); _apply(event); } public void apply(VesselTypeCreatedEvent event) { logger.debug("Item creado"); _apply(event); } public void apply(CreateVesselTypeCancelledEvent event) { logger.debug("Compensación por creación fallida"); this.deleted = true; setVersion(event.getVersion()); setAggregateId(event.getAggregateId()); } public void apply(UpdateVesselTypeEvent event) { logger.debug("En fase de modificación"); _apply(event); } public void apply(UpdateVesselTypeConfirmedEvent event) { logger.debug("Modificación confirmada"); _apply(event); } public void apply(VesselTypeUpdatedEvent event) { logger.debug("Item modificado"); _apply(event); } public void apply(DeleteVesselTypeEvent event) { logger.debug("En fase de borrado"); this.deleted = true; _apply(event); } public void apply(DeleteVesselTypeConfirmedEvent event) { logger.debug("Borrado confirmado"); this.deleted = true; _apply(event); apply(event); } public void apply(VesselTypeDeletedEvent event) { logger.debug("Item borrado"); this.deleted = true; _apply(event); super.apply(event); } private void _apply(VesselTypeEvent event) { public void apply(VesselTypeEvent event) { this.vesselType = event.getVesselType(); setVersion(event.getVersion()); setAggregateId(event.getAggregateId()); super.apply(event); } @Override Loading
vessels-commands/src/test/java/es/redmic/test/vesselscommands/unit/aggregate/vessel/ApplyEventTest.java +63 −14 Original line number Diff line number Diff line Loading @@ -12,35 +12,59 @@ import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; import es.redmic.brokerlib.avro.common.Event; import es.redmic.vesselslib.events.vessel.common.VesselEvent; import es.redmic.vesselslib.events.vessel.create.CreateVesselEvent; import es.redmic.vesselslib.events.vessel.create.VesselCreatedEvent; import es.redmic.vesselslib.events.vessel.delete.DeleteVesselEvent; import es.redmic.vesselslib.events.vessel.delete.VesselDeletedEvent; import es.redmic.vesselslib.events.vessel.update.UpdateVesselEvent; import es.redmic.vesselslib.events.vessel.update.VesselUpdatedEvent; @RunWith(MockitoJUnitRunner.class) public class ApplyEventTest extends AggregateBaseTest { @Test public void applyVesselCreateEvent_ChangeAggrefateState_IfProcessIsOk() { public void applyCreateVesselEvent_ChangeAggrefateState_IfProcessIsOk() { CreateVesselEvent evt = getCreateVesselEvent(); agg.apply(evt); checkCreateState(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselUpdateEvent_ChangeAggregateState_IfProcessIsOk() { public void applyVesselCreatedEvent_ChangeAggrefateState_IfProcessIsOk() { VesselCreatedEvent evt = getVesselCreatedEvent(); agg.apply(evt); checkCreateOrUpdateState(evt); } @Test public void applyUpdateVesselEvent_ChangeAggregateState_IfProcessIsOk() { UpdateVesselEvent evt = getUpdateVesselEvent(); agg.apply(evt); checkUpdateState(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselUpdatedEvent_ChangeAggregateState_IfProcessIsOk() { VesselUpdatedEvent evt = getVesselUpdatedEvent(); agg.apply(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselDeleteEvent_ChangeAggregateState_IfProcessIsOk() { public void applyDeleteVesselEvent_ChangeAggregateState_IfProcessIsOk() { DeleteVesselEvent evt = getDeleteVesselEvent(); Loading @@ -49,6 +73,16 @@ public class ApplyEventTest extends AggregateBaseTest { checkDeleteState(evt); } @Test public void applyVesselDeletedEvent_ChangeAggregateState_IfProcessIsOk() { VesselDeletedEvent evt = getVesselDeletedEvent(); agg.apply(evt); checkDeletedState(evt); } @Test public void loadFromHistory_ChangeAggregateStateToCreate_IfEventIsCreate() { Loading @@ -56,7 +90,7 @@ public class ApplyEventTest extends AggregateBaseTest { agg.loadFromHistory(evt); checkCreateState(evt); checkCreateOrUpdateState(evt); } @Test Loading @@ -66,7 +100,7 @@ public class ApplyEventTest extends AggregateBaseTest { agg.loadFromHistory(evt); checkUpdateState(evt); checkCreateOrUpdateState(evt); } @Test Loading @@ -88,14 +122,30 @@ public class ApplyEventTest extends AggregateBaseTest { history.add(getUpdateVesselEvent()); history.add(getDeleteVesselEvent()); DeleteVesselEvent evt = getDeleteVesselEvent(); history.add(getDeleteVesselEvent()); agg.loadFromHistory(evt); agg.loadFromHistory(history); checkDeleteState(evt); checkDeleteState((DeleteVesselEvent) history.get(3)); } @Test public void loadFromHistory_ChangeAggregateStateToDeleted_IfEventIsDelete() { List<Event> history = new ArrayList<>(); history.add(getCreateVesselEvent()); history.add(getUpdateVesselEvent()); history.add(getDeleteVesselEvent()); history.add(getVesselDeletedEvent()); agg.loadFromHistory(history); checkDeletedState((VesselDeletedEvent) history.get(3)); } private void checkCreateState(CreateVesselEvent evt) { private void checkCreateOrUpdateState(VesselEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); Loading @@ -103,15 +153,14 @@ public class ApplyEventTest extends AggregateBaseTest { assertFalse(agg.isDeleted()); } private void checkUpdateState(UpdateVesselEvent evt) { private void checkDeleteState(DeleteVesselEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); assertEquals(agg.getVessel(), evt.getVessel()); assertFalse(agg.isDeleted()); } private void checkDeleteState(DeleteVesselEvent evt) { private void checkDeletedState(VesselDeletedEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); Loading
vessels-commands/src/test/java/es/redmic/test/vesselscommands/unit/aggregate/vesseltype/ApplyEventTest.java +62 −14 Original line number Diff line number Diff line Loading @@ -12,35 +12,59 @@ import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; import es.redmic.brokerlib.avro.common.Event; import es.redmic.vesselslib.events.vesseltype.common.VesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.create.CreateVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.create.VesselTypeCreatedEvent; import es.redmic.vesselslib.events.vesseltype.delete.DeleteVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.delete.VesselTypeDeletedEvent; import es.redmic.vesselslib.events.vesseltype.update.UpdateVesselTypeEvent; import es.redmic.vesselslib.events.vesseltype.update.VesselTypeUpdatedEvent; @RunWith(MockitoJUnitRunner.class) public class ApplyEventTest extends AggregateBaseTest { @Test public void applyVesselTypeCreateEvent_ChangeAggrefateState_IfProcessIsOk() { public void applyCreateVesselTypeEvent_ChangeAggrefateState_IfProcessIsOk() { CreateVesselTypeEvent evt = getCreateVesselTypeEvent(); agg.apply(evt); checkCreateState(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselTypeUpdateEvent_ChangeAggregateState_IfProcessIsOk() { public void applyVesselTypeCreatedEvent_ChangeAggrefateState_IfProcessIsOk() { VesselTypeCreatedEvent evt = getVesselTypeCreatedEvent(); agg.apply(evt); checkCreateOrUpdateState(evt); } @Test public void applyUpdateVesselTypeEvent_ChangeAggregateState_IfProcessIsOk() { UpdateVesselTypeEvent evt = getUpdateVesselTypeEvent(); agg.apply(evt); checkUpdateState(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselTypeUpdatedEvent_ChangeAggregateState_IfProcessIsOk() { VesselTypeUpdatedEvent evt = getVesselTypeUpdatedEvent(); agg.apply(evt); checkCreateOrUpdateState(evt); } @Test public void applyVesselTypeDeleteEvent_ChangeAggregateState_IfProcessIsOk() { public void applyDeleteVesselTypeEvent_ChangeAggregateState_IfProcessIsOk() { DeleteVesselTypeEvent evt = getDeleteVesselTypeEvent(); Loading @@ -49,6 +73,16 @@ public class ApplyEventTest extends AggregateBaseTest { checkDeleteState(evt); } @Test public void applyVesselTypeDeletedEvent_ChangeAggregateState_IfProcessIsOk() { VesselTypeDeletedEvent evt = getVesselTypeDeletedEvent(); agg.apply(evt); checkDeletedState(evt); } @Test public void loadFromHistory_ChangeAggregateStateToCreate_IfEventIsCreate() { Loading @@ -56,7 +90,7 @@ public class ApplyEventTest extends AggregateBaseTest { agg.loadFromHistory(evt); checkCreateState(evt); checkCreateOrUpdateState(evt); } @Test Loading @@ -66,7 +100,7 @@ public class ApplyEventTest extends AggregateBaseTest { agg.loadFromHistory(evt); checkUpdateState(evt); checkCreateOrUpdateState(evt); } @Test Loading @@ -88,14 +122,29 @@ public class ApplyEventTest extends AggregateBaseTest { history.add(getUpdateVesselTypeEvent()); history.add(getDeleteVesselTypeEvent()); DeleteVesselTypeEvent evt = getDeleteVesselTypeEvent(); history.add(getDeleteVesselTypeEvent()); agg.loadFromHistory(evt); agg.loadFromHistory(history); checkDeleteState(evt); checkDeleteState((DeleteVesselTypeEvent) history.get(3)); } private void checkCreateState(CreateVesselTypeEvent evt) { @Test public void loadFromHistory_ChangeAggregateStateToDeleted_IfLastEventIsDelete() { List<Event> history = new ArrayList<>(); history.add(getCreateVesselTypeEvent()); history.add(getUpdateVesselTypeEvent()); history.add(getVesselTypeDeletedEvent()); agg.loadFromHistory(history); checkDeletedState((VesselTypeDeletedEvent) history.get(2)); } private void checkCreateOrUpdateState(VesselTypeEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); Loading @@ -103,15 +152,14 @@ public class ApplyEventTest extends AggregateBaseTest { assertFalse(agg.isDeleted()); } private void checkUpdateState(UpdateVesselTypeEvent evt) { private void checkDeleteState(DeleteVesselTypeEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); assertEquals(agg.getVesselType(), evt.getVesselType()); assertFalse(agg.isDeleted()); } private void checkDeleteState(DeleteVesselTypeEvent evt) { private void checkDeletedState(VesselTypeDeletedEvent evt) { assertEquals(agg.getVersion(), evt.getVersion()); assertEquals(agg.getAggregateId(), evt.getAggregateId()); Loading