Commit 672894d6 authored by Noel Alonso's avatar Noel Alonso
Browse files

Añade métodos para procesar nuevos comandos

Añade test
parent e060ac44
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -24,18 +24,23 @@ import org.mapstruct.factory.Mappers;

import es.redmic.brokerlib.avro.common.Event;
import es.redmic.commandslib.aggregate.Aggregate;
import es.redmic.commandslib.exceptions.ItemLockedException;
import es.redmic.commandslib.usersettings.commands.CloneSettingsCommand;
import es.redmic.commandslib.usersettings.commands.DeleteSettingsCommand;
import es.redmic.commandslib.usersettings.commands.SaveSettingsCommand;
import es.redmic.commandslib.usersettings.commands.UpdateSettingsAccessedDateCommand;
import es.redmic.commandslib.usersettings.commands.UpdateSettingsCommand;
import es.redmic.commandslib.usersettings.statestore.SettingsStateStore;
import es.redmic.usersettingslib.dto.SettingsDTO;
import es.redmic.usersettingslib.events.SettingsEventTypes;
import es.redmic.usersettingslib.events.clone.CloneSettingsEvent;
import es.redmic.usersettingslib.events.common.PersistenceEvent;
import es.redmic.usersettingslib.events.common.SettingsCancelledEvent;
import es.redmic.usersettingslib.events.common.SettingsEvent;
import es.redmic.usersettingslib.events.delete.CheckDeleteSettingsEvent;
import es.redmic.usersettingslib.events.delete.SettingsDeletedEvent;
import es.redmic.usersettingslib.events.save.PartialSaveSettingsEvent;
import es.redmic.usersettingslib.events.update.UpdateSettingsAccessedDateEvent;
import es.redmic.usersettingslib.mapper.SettingsMapper;

public class PersistenceAggregate extends Aggregate {
@@ -104,6 +109,44 @@ public class PersistenceAggregate extends Aggregate {
		return evt;
	}

	public CloneSettingsEvent process(CloneSettingsCommand cmd) {

		assert settingsStateStore != null;

		String id = cmd.getPersistence().getId();

		if (exist(id)) {
			logger.error("Descartando clonado con nuevo " + id + ". Ya está registrado.");
			return null;
		}

		this.setAggregateId(id);

		CloneSettingsEvent evt = new CloneSettingsEvent(cmd.getPersistence());
		evt.setAggregateId(id);
		evt.setVersion(1);
		return evt;
	}

	public UpdateSettingsAccessedDateEvent process(UpdateSettingsAccessedDateCommand cmd) {

		assert settingsStateStore != null;

		String id = cmd.getSettingsId();

		Event state = getStateFromHistory(id);

		loadFromHistory(state);

		checkState(id, state.getType());

		UpdateSettingsAccessedDateEvent evt = new UpdateSettingsAccessedDateEvent();
		evt.setAggregateId(id);
		evt.setVersion(getVersion() + 1);
		evt.setUserId(state.getUserId());
		return evt;
	}

	public SettingsDTO getSettings() {
		return settings;
	}
@@ -144,7 +187,9 @@ public class PersistenceAggregate extends Aggregate {
			apply((SettingsCancelledEvent) event);
			break;
		default:
			// TODO: añadir exepción
			logger.debug("Evento no manejado ", event.getType());
			throw new ItemLockedException("id", event.getAggregateId());
		}
	}

+49 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ package es.redmic.commandslib.usersettings.persistence;
 */

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
@@ -36,15 +37,19 @@ import org.mockito.junit.MockitoJUnitRunner;

import es.redmic.commandslib.exceptions.ItemLockedException;
import es.redmic.commandslib.usersettings.aggregate.PersistenceAggregate;
import es.redmic.commandslib.usersettings.commands.CloneSettingsCommand;
import es.redmic.commandslib.usersettings.commands.DeleteSettingsCommand;
import es.redmic.commandslib.usersettings.commands.SaveSettingsCommand;
import es.redmic.commandslib.usersettings.commands.UpdateSettingsAccessedDateCommand;
import es.redmic.commandslib.usersettings.commands.UpdateSettingsCommand;
import es.redmic.commandslib.usersettings.statestore.SettingsStateStore;
import es.redmic.exception.data.ItemNotFoundException;
import es.redmic.usersettingslib.dto.PersistenceDTO;
import es.redmic.usersettingslib.events.SettingsEventTypes;
import es.redmic.usersettingslib.events.clone.CloneSettingsEvent;
import es.redmic.usersettingslib.events.delete.CheckDeleteSettingsEvent;
import es.redmic.usersettingslib.events.save.PartialSaveSettingsEvent;
import es.redmic.usersettingslib.events.update.UpdateSettingsAccessedDateEvent;
import es.redmic.usersettingslib.unit.utils.SettingsDataUtil;

@RunWith(MockitoJUnitRunner.class)
@@ -143,6 +148,50 @@ public class ProcessEventTest {
		assertTrue(evt.getVersion().equals(2));
	}

	@Test
	public void processCloneSettingsCommand_ReturnCloneSettingsEvent_IfProcessIsOk() {

		PersistenceDTO persistence = SettingsDataUtil.getPersistenceDTO(code);

		String serviceName = "/atlas/commands/layer/settings";
		CloneSettingsCommand command = new CloneSettingsCommand(persistence.getId(), serviceName);

		CloneSettingsEvent evt = agg.process(command);

		assertNotNull(evt);
		assertNotNull(evt.getDate());
		assertNotNull(evt.getId());
		assertNotNull(evt.getAggregateId());
		assertNotEquals(evt.getAggregateId(), persistence.getId());
		assertEquals(evt.getType(), SettingsEventTypes.CLONE);
		assertTrue(evt.getVersion().equals(1));
		assertEquals(evt.getAggregateId(), evt.getPersistence().getId());
		assertEquals(evt.getPersistence().getInserted(), evt.getPersistence().getUpdated());
		assertEquals(evt.getPersistence().getInserted(), evt.getPersistence().getAccessed());
		assertEquals(serviceName, evt.getPersistence().getService());
	}

	@Test
	public void processUpdateSettingsAccessedDateCommand_ReturnUpdateSettingsAccessedDateEvent_IfProcessIsOk() {

		when(settingsStateStore.get(any())).thenReturn(SettingsDataUtil.getSettingsSavedEvent(code));

		PersistenceDTO persistence = SettingsDataUtil.getPersistenceDTO(code);

		UpdateSettingsAccessedDateCommand command = new UpdateSettingsAccessedDateCommand(persistence.getId());

		UpdateSettingsAccessedDateEvent evt = agg.process(command);

		assertNotNull(evt);
		assertNotNull(evt.getDate());
		assertNotNull(evt.getId());
		assertNotNull(evt.getAggregateId());
		assertEquals(evt.getAggregateId(), persistence.getId());
		assertEquals(evt.getType(), SettingsEventTypes.UPDATE_ACCESSED_DATE);
		assertTrue(evt.getVersion().equals(2));
		assertEquals(evt.getAggregateId(), persistence.getId());
	}

	// Borrar un elemento ya borrado
	@Test(expected = ItemNotFoundException.class)
	public void processDeleteSettingsCommand_ThrowItemNotFoundException_IfItemIsDeleted() {