@Test
public void testGetMultiLevelNestedQueryPropertyNames() throws Throwable {

    ServiceDocumentDescription desc = Builder.create().buildDescription(
            ComplexServiceState.class);
    Set<String> queryPropertyNames = QueryTaskUtils.getExpandedQueryPropertyNames(desc);
    Set<String> expectedPropertyNames = new HashSet<>();
    expectedPropertyNames.add("name");
    expectedPropertyNames.add("innerServices.item.nameInner");
    expectedPropertyNames.add("singleInnerService.nameInner");
    expectedPropertyNames.add("singleInnerService.singleInnerService.nameSecondInner");
    assertEquals(expectedPropertyNames, queryPropertyNames);
}