use of io.spine.core.TenantId in project core-java by SpineEventEngine.
the class CommandStoreShould method getProcessingStatus.
private ProcessingStatus getProcessingStatus(CommandEnvelope commandEnvelope) {
final TenantId tenantId = commandEnvelope.getCommandContext().getActorContext().getTenantId();
final TenantAwareFunction<CommandId, ProcessingStatus> func = new TenantAwareFunction<CommandId, ProcessingStatus>(tenantId) {
@Override
public ProcessingStatus apply(@Nullable CommandId input) {
return commandStore.getStatus(checkNotNull(input));
}
};
final ProcessingStatus result = func.execute(commandEnvelope.getId());
return result;
}
use of io.spine.core.TenantId in project core-java by SpineEventEngine.
the class CommandStoreShould method set_command_status_to_OK_when_handler_returns.
@Test
public void set_command_status_to_OK_when_handler_returns() {
commandBus.register(createProjectHandler);
final Command command = requestFactory.command().create(createProjectMessage());
commandBus.post(command, observer);
final TenantId tenantId = command.getContext().getActorContext().getTenantId();
final CommandId commandId = command.getId();
final ProcessingStatus status = getStatus(commandId, tenantId);
assertEquals(CommandStatus.OK, status.getCode());
}
use of io.spine.core.TenantId in project core-java by SpineEventEngine.
the class AggregateShould method create_single_event_for_a_pair_of_events_with_empty_for_an_event_react.
/**
* Ensures that a {@linkplain io.spine.server.tuple.Pair pair} with an empty second optional
* value returned from a reaction on an event stores a single event.
*
* <p>The first event is produced while handling a command by the
* {@link TaskAggregate#handle(AggAssignTask) TaskAggregate#handle(AggAssignTask)}.
* Then as a reaction to this event a single event should be fired as part of the pair by
* {@link TaskAggregate#on(AggTaskAssigned) TaskAggregate#on(AggTaskAssigned)}.
*/
@Test
public void create_single_event_for_a_pair_of_events_with_empty_for_an_event_react() {
final BoundedContext boundedContext = newTaskBoundedContext();
final TenantId tenantId = newTenantId();
final Command command = command(assignTask(), tenantId);
final MemoizingObserver<Ack> observer = memoizingObserver();
boundedContext.getCommandBus().post(command, observer);
assertNull(observer.getError());
final List<Ack> responses = observer.responses();
assertSize(1, responses);
final Ack response = responses.get(0);
final io.spine.core.Status status = response.getStatus();
final Error emptyError = Error.getDefaultInstance();
assertEquals(emptyError, status.getError());
final Rejection emptyRejection = Rejection.getDefaultInstance();
assertEquals(emptyRejection, status.getRejection());
final List<Event> events = readAllEvents(boundedContext, tenantId);
assertSize(2, events);
final Event sourceEvent = events.get(0);
final TypeUrl taskAssignedType = TypeUrl.from(AggTaskAssigned.getDescriptor());
assertEquals(typeUrlOf(sourceEvent), taskAssignedType);
final Event reactionEvent = events.get(1);
final TypeUrl userNotifiedType = TypeUrl.from(AggUserNotified.getDescriptor());
assertEquals(typeUrlOf(reactionEvent), userNotifiedType);
}
use of io.spine.core.TenantId in project core-java by SpineEventEngine.
the class AggregateShould method acknowledge_DuplicateCommandException_when_the_command_was_handled_since_last_snapshot.
@Test
public void acknowledge_DuplicateCommandException_when_the_command_was_handled_since_last_snapshot() {
final TenantId tenantId = newTenantId();
final Command createCommand = command(createProject, tenantId);
final CommandBus commandBus = boundedContext.getCommandBus();
final StreamObserver<Ack> noOpObserver = noOpObserver();
final MemoizingObserver<Ack> memoizingObserver = memoizingObserver();
commandBus.post(createCommand, noOpObserver);
commandBus.post(createCommand, memoizingObserver);
final List<Ack> responses = memoizingObserver.responses();
final Ack ack = responses.get(0);
assertTrue(ack.getStatus().hasError());
final String errorType = DuplicateCommandException.class.getCanonicalName();
assertEquals(errorType, ack.getStatus().getError().getType());
}
use of io.spine.core.TenantId in project core-java by SpineEventEngine.
the class AggregateShould method create_single_event_for_a_pair_of_events_with_empty_for_a_rejection_react.
/**
* Ensures that a {@linkplain io.spine.server.tuple.Pair pair} with an empty second optional
* value returned from a reaction on a rejection stores a single event.
*
* <p>The rejection is fired by the {@link TaskAggregate#handle(AggReassignTask)
* TaskAggregate.handle(AggReassignTask)}
* and handled by the {@link TaskAggregate#on(Rejections.AggCannotReassignUnassignedTask)
* TaskAggregate.on(AggCannotReassignUnassignedTask)}.
*/
@Test
public void create_single_event_for_a_pair_of_events_with_empty_for_a_rejection_react() {
final BoundedContext boundedContext = newTaskBoundedContext();
final TenantId tenantId = newTenantId();
final Command command = command(reassignTask(), tenantId);
final MemoizingObserver<Ack> observer = memoizingObserver();
boundedContext.getCommandBus().post(command, observer);
assertNull(observer.getError());
final List<Ack> responses = observer.responses();
assertSize(1, responses);
final Ack response = responses.get(0);
final io.spine.core.Status status = response.getStatus();
final Error emptyError = Error.getDefaultInstance();
assertEquals(emptyError, status.getError());
final Rejection emptyRejection = Rejection.getDefaultInstance();
assertEquals(emptyRejection, status.getRejection());
final List<Event> events = readAllEvents(boundedContext, tenantId);
assertSize(1, events);
final Event reactionEvent = events.get(0);
final TypeUrl userNotifiedType = TypeUrl.from(AggUserNotified.getDescriptor());
assertEquals(typeUrlOf(reactionEvent), userNotifiedType);
}
Aggregations