//	Paging
  @Test
  public void testPageListOfAssets() throws Exception {

    // add 3 stories
    Asset storyAsset = createDisposableStory();
    storyAsset.setAttributeValue(nameDef, "Paging Test - Story1");
    storyAsset.setAttributeValue(scopeDef, APIClientLegacyIntegrationTestSuiteIT.get_projectId());
    services.save(storyAsset);
    storyAsset = createDisposableStory();
    storyAsset.setAttributeValue(nameDef, "Paging Test - Story2");
    storyAsset.setAttributeValue(scopeDef, APIClientLegacyIntegrationTestSuiteIT.get_projectId());
    services.save(storyAsset);
    storyAsset = createDisposableStory();
    storyAsset.setAttributeValue(nameDef, "Paging Test - Story3");
    storyAsset.setAttributeValue(scopeDef, APIClientLegacyIntegrationTestSuiteIT.get_projectId());
    services.save(storyAsset);

    Query query = new Query(storyType);
    IAttributeDefinition nameAttribute = storyType.getAttributeDefinition("Name");
    IAttributeDefinition estimateAttribute = storyType.getAttributeDefinition("Estimate");
    query.getSelection().add(nameAttribute);
    query.getSelection().add(estimateAttribute);
    QueryResult result = services.retrieve(query);

    Assert.assertTrue(result.getAssets().length > 2);

    query.getPaging().setPageSize(2);
    query.getPaging().setStart(0);
    result = services.retrieve(query);

    Assert.assertTrue(result.getAssets().length == 2);
  }
  // Sort query
  @Test
  public void testSortStories() throws Exception {

    // add 3 stories
    Asset storyAsset = createDisposableStory();
    storyAsset.setAttributeValue(nameDef, "MM-Story");
    storyAsset.setAttributeValue(scopeDef, APIClientLegacyIntegrationTestSuiteIT.get_projectId());
    services.save(storyAsset);
    storyAsset = createDisposableStory();
    storyAsset.setAttributeValue(nameDef, "AA-Story");
    storyAsset.setAttributeValue(scopeDef, APIClientLegacyIntegrationTestSuiteIT.get_projectId());
    services.save(storyAsset);
    storyAsset = createDisposableStory();
    storyAsset.setAttributeValue(nameDef, "HH-Story");
    storyAsset.setAttributeValue(scopeDef, APIClientLegacyIntegrationTestSuiteIT.get_projectId());
    services.save(storyAsset);

    IAssetType storyType = metaModel.getAssetType("Story");
    Query query = new Query(storyType);
    IAttributeDefinition nameAttribute = storyType.getAttributeDefinition("Name");
    query.getSelection().add(nameAttribute);
    query.getOrderBy().minorSort(nameAttribute, Order.Ascending);

    QueryResult result = services.retrieve(query);

    Asset first_story = result.getAssets()[0];

    Assert.assertEquals("AA-Story", first_story.getAttribute(nameAttribute).getValue().toString());
  }
  @BeforeClass
  public static void beforeClass() {

    metaModel = APIClientLegacyIntegrationTestSuiteIT.get_metaModel();
    services = APIClientLegacyIntegrationTestSuiteIT.get_services();
    storyType = metaModel.getAssetType("Story");

    nameDef = storyType.getAttributeDefinition("Name");
    scopeDef = storyType.getAttributeDefinition("Scope");
    momentDef = storyType.getAttributeDefinition("Moment");
    attributesToQuery = new LinkedList<IAttributeDefinition>();
    attributesToQuery.add(nameDef);
    attributesToQuery.add(scopeDef);
    attributesToQuery.add(momentDef);
  }
  // asof
  @Test
  @Ignore
  public void testAsof() throws Exception {
    Asset storyAsset = createDisposableStory();
    storyAsset.setAttributeValue(nameDef, "Test Asof");
    storyAsset.setAttributeValue(scopeDef, APIClientLegacyIntegrationTestSuiteIT.get_projectId());
    services.save(storyAsset);

    IAssetType storyType = metaModel.getAssetType("Story");
    Query query = new Query(storyType, true);
    IAttributeDefinition nameAttribute = storyType.getAttributeDefinition("Name");
    IAttributeDefinition createDateAttribute = storyType.getAttributeDefinition("CreateDate");

    query.getSelection().add(nameAttribute);
    query.getSelection().add(createDateAttribute);
    AttributeSelection selection = new AttributeSelection();
    selection.add(nameAttribute);
    query.setFind(new QueryFind("Test Asof", selection));
    Date date = (Date) Calendar.getInstance().getTime();
    query.setAsOf(date);
    QueryResult result = services.retrieve(query);

    //	Assert.assertNotNull(result);

    Assert.assertEquals(
        "Test Asof", result.getAssets()[0].getAttribute(nameAttribute).getValue().toString());
  }
  @Test
  public void testQueryStoryChangesWithInequalityFilter() throws Exception {

    Asset storyAsset = createDisposableStory();
    storyAsset.setAttributeValue(nameDef, InitialStoryName);
    storyAsset.setAttributeValue(scopeDef, APIClientLegacyIntegrationTestSuiteIT.get_projectId());
    services.save(storyAsset);

    storyAsset = getAssetsByOid(storyAsset.getOid().getMomentless(), attributesToQuery)[0];
    Object moment1 = storyAsset.getAttribute(momentDef).getValue();

    storyAsset.setAttributeValue(nameDef, ChangedStoryName);
    services.save(storyAsset);

    storyAsset.setAttributeValue(nameDef, FinalStoryName);
    services.save(storyAsset);
    storyAsset = getAssetsByOid(storyAsset.getOid().getMomentless(), attributesToQuery)[0];
    Object moment3 = storyAsset.getAttribute(momentDef).getValue();

    FilterTerm filter = new FilterTerm(momentDef);
    filter.greaterOrEqual(moment1);
    Asset[] assets =
        getAssetsByOid(storyAsset.getOid().getMomentless(), attributesToQuery, filter, true);
    Assert.assertEquals(3, assets.length);
    Assert.assertTrue(nameMatch(InitialStoryName, assets));
    Assert.assertTrue(nameMatch(ChangedStoryName, assets));
    Assert.assertTrue(nameMatch(FinalStoryName, assets));

    filter = new FilterTerm(momentDef);
    filter.greater(moment1);
    assets = getAssetsByOid(storyAsset.getOid().getMomentless(), attributesToQuery, filter, true);
    Assert.assertEquals(2, assets.length);
    Assert.assertFalse(nameMatch(InitialStoryName, assets));
    Assert.assertTrue(nameMatch(ChangedStoryName, assets));
    Assert.assertTrue(nameMatch(FinalStoryName, assets));

    FilterTerm lessFilter = new FilterTerm(momentDef);
    lessFilter.less(moment3);
    FilterTerm greaterFilter = new FilterTerm(momentDef);
    greaterFilter.greater(moment1);
    GroupFilterTerm groupFilter = new AndFilterTerm(lessFilter, greaterFilter);
    assets =
        getAssetsByOid(storyAsset.getOid().getMomentless(), attributesToQuery, groupFilter, true);
    Assert.assertEquals(1, assets.length);
    Assert.assertFalse(nameMatch(InitialStoryName, assets));
    Assert.assertTrue(nameMatch(ChangedStoryName, assets));
    Assert.assertFalse(nameMatch(FinalStoryName, assets));
  }
  // query History
  @Test
  public void testQueryStoryHistoryByMoment() throws Exception {
    Asset storyAsset = createDisposableStory();
    storyAsset.setAttributeValue(nameDef, InitialStoryName);
    storyAsset.setAttributeValue(scopeDef, APIClientLegacyIntegrationTestSuiteIT.get_projectId());
    services.save(storyAsset);

    storyAsset = getAssetsByOid(storyAsset.getOid().getMomentless(), attributesToQuery)[0];
    Object moment = storyAsset.getAttribute(momentDef).getValue();
    Assert.assertEquals(storyAsset.getAttribute(nameDef).getValue(), InitialStoryName);

    storyAsset.setAttributeValue(nameDef, ChangedStoryName);
    services.save(storyAsset);

    storyAsset = getAssetsByOid(storyAsset.getOid().getMomentless(), attributesToQuery)[0];
    Assert.assertEquals(storyAsset.getAttribute(nameDef).getValue(), ChangedStoryName);

    FilterTerm filter = new FilterTerm(momentDef);
    filter.equal(moment);
    storyAsset =
        getAssetsByOid(storyAsset.getOid().getMomentless(), attributesToQuery, filter, true)[0];
    Assert.assertEquals(storyAsset.getAttribute(nameDef).getValue(), InitialStoryName);
  }
 private Asset createDisposableStory() throws V1Exception {
   Asset story =
       services.createNew(storyType, APIClientLegacyIntegrationTestSuiteIT.get_projectId());
   //		assetsToDispose.add(story);
   return story;
 }