use of io.spine.client.Topic in project core-java by SpineEventEngine.
the class StandShould method throw_invalid_topic_ex_packed_as_IAE_if_subscribing_to_unknown_type_changes.
@Test
public void throw_invalid_topic_ex_packed_as_IAE_if_subscribing_to_unknown_type_changes() {
final Stand stand = Stand.newBuilder().build();
checkTypesEmpty(stand);
// Customer type was NOT registered.
// So create a topic for an unknown type.
final Topic allCustomersTopic = requestFactory.topic().allOf(Customer.class);
try {
stand.subscribe(allCustomersTopic, StreamObservers.<Subscription>noOpObserver());
fail("Expected IllegalArgumentException upon subscribing to a topic " + "with unknown target, but got nothing");
} catch (IllegalArgumentException e) {
verifyUnsupportedTopicException(allCustomersTopic, e);
}
}
use of io.spine.client.Topic in project core-java by SpineEventEngine.
the class StandShould method trigger_subscription_callbacks_matching_by_id.
@Test
public void trigger_subscription_callbacks_matching_by_id() {
final Stand stand = prepareStandWithAggregateRepo(mock(StandStorage.class));
final Map<CustomerId, Customer> sampleCustomers = fillSampleCustomers(10);
final Topic someCustomers = requestFactory.topic().someOf(Customer.class, sampleCustomers.keySet());
final Set<Customer> callbackStates = newHashSet();
final MemoizeEntityUpdateCallback callback = new MemoizeEntityUpdateCallback() {
@Override
public void onStateChanged(Any newEntityState) {
super.onStateChanged(newEntityState);
final Customer customerInCallback = AnyPacker.unpack(newEntityState);
callbackStates.add(customerInCallback);
}
};
subscribeAndActivate(stand, someCustomers, callback);
for (Map.Entry<CustomerId, Customer> sampleEntry : sampleCustomers.entrySet()) {
final CustomerId customerId = sampleEntry.getKey();
final Customer customer = sampleEntry.getValue();
final Version stateVersion = Tests.newVersionWithNumber(1);
stand.update(asEnvelope(customerId, customer, stateVersion));
}
assertEquals(newHashSet(sampleCustomers.values()), callbackStates);
}
use of io.spine.client.Topic in project core-java by SpineEventEngine.
the class StandShould method allow_cancelling_subscriptions.
@Test
public void allow_cancelling_subscriptions() {
final Stand stand = prepareStandWithAggregateRepo(mock(StandStorage.class));
final Topic allCustomers = requestFactory.topic().allOf(Customer.class);
final MemoizeEntityUpdateCallback memoizeCallback = new MemoizeEntityUpdateCallback();
final Subscription subscription = subscribeAndActivate(stand, allCustomers, memoizeCallback);
stand.cancel(subscription, StreamObservers.<Response>noOpObserver());
final Map.Entry<CustomerId, Customer> sampleData = fillSampleCustomers(1).entrySet().iterator().next();
final CustomerId customerId = sampleData.getKey();
final Customer customer = sampleData.getValue();
final Version stateVersion = Tests.newVersionWithNumber(1);
stand.update(asEnvelope(customerId, customer, stateVersion));
assertNull(memoizeCallback.newEntityState);
}
use of io.spine.client.Topic in project core-java by SpineEventEngine.
the class StandShould method throw_invalid_topic_exception_packed_as_IAE_if_invalid_topic_message_passed.
@Test
public void throw_invalid_topic_exception_packed_as_IAE_if_invalid_topic_message_passed() {
final Stand stand = Stand.newBuilder().build();
final Topic invalidTopic = Topic.getDefaultInstance();
try {
stand.subscribe(invalidTopic, StreamObservers.<Subscription>noOpObserver());
fail("Expected IllegalArgumentException due to an invalid topic message, " + "but got nothing");
} catch (IllegalArgumentException e) {
verifyInvalidTopicException(invalidTopic, e);
}
}
use of io.spine.client.Topic in project core-java by SpineEventEngine.
the class SubscriptionServiceShould method cancel_subscription_on_topic.
@Test
public void cancel_subscription_on_topic() {
final BoundedContext boundedContext = setupBoundedContextWithProjectAggregateRepo();
final SubscriptionService subscriptionService = SubscriptionService.newBuilder().add(boundedContext).build();
final Target target = getProjectQueryTarget();
final Topic topic = requestFactory.topic().forTarget(target);
// Subscribe
final MemoizeStreamObserver<Subscription> subscribeObserver = new MemoizeStreamObserver<>();
subscriptionService.subscribe(topic, subscribeObserver);
// Activate subscription
final MemoizeStreamObserver<SubscriptionUpdate> activateSubscription = spy(new MemoizeStreamObserver<SubscriptionUpdate>());
subscriptionService.activate(subscribeObserver.streamFlowValue, activateSubscription);
// Cancel subscription
subscriptionService.cancel(subscribeObserver.streamFlowValue, new MemoizeStreamObserver<Response>());
// Post update to Stand
final ProjectId projectId = ProjectId.newBuilder().setId("some-other-id").build();
final Message projectState = Project.newBuilder().setId(projectId).build();
final int version = 1;
final VersionableEntity entity = mockEntity(projectId, projectState, version);
boundedContext.getStand().post(entity, requestFactory.createCommandContext());
// The update must not be handled by the observer
verify(activateSubscription, never()).onNext(any(SubscriptionUpdate.class));
verify(activateSubscription, never()).onCompleted();
}
Aggregations