use of io.spine.client.Query in project core-java by SpineEventEngine.
the class StandShould method throw_invalid_query_exception_packed_as_IAE_if_invalid_query_message_passed.
@Test
public void throw_invalid_query_exception_packed_as_IAE_if_invalid_query_message_passed() {
final Stand stand = Stand.newBuilder().build();
final Query invalidQuery = Query.getDefaultInstance();
try {
stand.execute(invalidQuery, StreamObservers.<QueryResponse>noOpObserver());
fail("Expected IllegalArgumentException due to invalid query message passed," + " but got nothing");
} catch (IllegalArgumentException e) {
verifyInvalidQueryException(invalidQuery, e);
}
}
use of io.spine.client.Query in project core-java by SpineEventEngine.
the class StandShould method throw_invalid_query_exception_packed_as_IAE_if_querying_unknown_type.
@Test
public void throw_invalid_query_exception_packed_as_IAE_if_querying_unknown_type() {
final Stand stand = Stand.newBuilder().build();
checkTypesEmpty(stand);
// Customer type was NOT registered.
// So create a query for an unknown type.
final Query readAllCustomers = requestFactory.query().all(Customer.class);
try {
stand.execute(readAllCustomers, StreamObservers.<QueryResponse>noOpObserver());
fail("Expected IllegalArgumentException upon executing query with unknown target," + " but got nothing");
} catch (IllegalArgumentException e) {
verifyUnsupportedQueryTargetException(readAllCustomers, e);
}
}
use of io.spine.client.Query in project core-java by SpineEventEngine.
the class StandShould method handle_mistakes_in_query_silently.
@Test
public void handle_mistakes_in_query_silently() {
//noinspection ZeroLengthArrayAllocation
final Stand stand = prepareStandWithAggregateRepo(createStandStorage());
final Customer sampleCustomer = getSampleCustomer();
final Version stateVersion = Tests.newVersionWithNumber(1);
stand.update(asEnvelope(sampleCustomer.getId(), sampleCustomer, stateVersion));
// FieldMask with invalid type URLs.
final String[] paths = { "invalid_type_url_example", Project.getDescriptor().getFields().get(2).getFullName() };
final Query customerQuery = requestFactory.query().allWithMask(Customer.class, paths);
final MemoizeQueryResponseObserver observer = new MemoizeQueryResponseObserver() {
@Override
public void onNext(QueryResponse value) {
super.onNext(value);
final List<Any> messages = value.getMessagesList();
assertFalse(messages.isEmpty());
final Customer customer = AnyPacker.unpack(messages.get(0));
assertNotEquals(customer, null);
assertFalse(customer.hasId());
assertFalse(customer.hasName());
assertTrue(customer.getNicknamesList().isEmpty());
}
};
stand.execute(customerQuery, observer);
verifyObserver(observer);
}
use of io.spine.client.Query in project core-java by SpineEventEngine.
the class QueryBuilderShould method create_queries_with_all_arguments.
@SuppressWarnings("OverlyLongMethod")
// A big test case covering the query arguments co-living
@Test
public void create_queries_with_all_arguments() {
final Class<? extends Message> testEntityClass = TestEntity.class;
final int id1 = 314;
final int id2 = 271;
final String columnName1 = "column1";
final Object columnValue1 = 42;
final String columnName2 = "column2";
final Object columnValue2 = newMessageId();
final String fieldName = "TestEntity.secondField";
final Query query = factory().query().select(testEntityClass).withMask(fieldName).byId(id1, id2).where(eq(columnName1, columnValue1), eq(columnName2, columnValue2)).build();
assertNotNull(query);
// Check FieldMask
final FieldMask mask = query.getFieldMask();
final Collection<String> fieldNames = mask.getPathsList();
assertSize(1, fieldNames);
assertContains(fieldName, fieldNames);
final Target target = query.getTarget();
assertFalse(target.getIncludeAll());
final EntityFilters entityFilters = target.getFilters();
// Check IDs
final EntityIdFilter idFilter = entityFilters.getIdFilter();
final Collection<EntityId> idValues = idFilter.getIdsList();
final Function<EntityId, Integer> transformer = new EntityIdUnpacker<>(int.class);
final Collection<Integer> intIdValues = transform(idValues, transformer);
assertSize(2, idValues);
assertThat(intIdValues, containsInAnyOrder(id1, id2));
// Check query params
final Map<String, Any> columnFilters = entityFilters.getColumnFilterMap();
assertSize(2, columnFilters);
final Any actualValue1 = columnFilters.get(columnName1);
assertNotNull(actualValue1);
final int actualGenericValue1 = TypeConverter.toObject(actualValue1, int.class);
assertEquals(columnValue1, actualGenericValue1);
final Any actualValue2 = columnFilters.get(columnName2);
assertNotNull(actualValue2);
final Message actualGenericValue2 = TypeConverter.toObject(actualValue2, ProjectId.class);
assertEquals(columnValue2, actualGenericValue2);
}
use of io.spine.client.Query in project core-java by SpineEventEngine.
the class QueryBuilderShould method persist_only_last_field_mask.
@Test
public void persist_only_last_field_mask() {
final Iterable<String> iterableFields = singleton("TestEntity.firstField");
final String[] arrayFields = { "TestEntity.secondField" };
final Query query = factory().query().select(TestEntity.class).withMask(iterableFields).withMask(arrayFields).build();
assertNotNull(query);
final FieldMask mask = query.getFieldMask();
final Collection<String> maskFields = mask.getPathsList();
assertSize(arrayFields.length, maskFields);
assertThat(maskFields, contains(arrayFields));
}
Aggregations