/**
   * Tests that when a repeated ORDER BY clause is added to the selector, it is actually ignored.
   */
  @Test
  public void testOrderBySubstitution() {
    SelectorBuilder builder = new SelectorBuilder();

    builder = builder.orderAscBy(CampaignField.BidType).orderDescBy(CampaignField.Amount);
    Selector selector = builder.build();

    assertNotNull(selector.getOrdering());
    assertEquals(2, selector.getOrdering().length);

    builder.orderAscBy(CampaignField.BidType);
    selector = builder.build();

    assertNotNull(selector.getOrdering());
    assertEquals(2, selector.getOrdering().length);

    OrderBy orderBy = selector.getOrdering()[0];

    assertEquals("BidType", orderBy.getField());
    assertEquals(SortOrder.ASCENDING, orderBy.getSortOrder());

    orderBy = selector.getOrdering()[1];

    assertEquals("Amount", orderBy.getField());
    assertEquals(SortOrder.DESCENDING, orderBy.getSortOrder());
  }
  /** Tests the order by criteria */
  @Test
  public void testOrderByBuild() {
    SelectorBuilder builder = new SelectorBuilder();

    builder = builder.orderAscBy(CampaignField.BidType);
    Selector selector = builder.build();

    assertNotNull(selector.getOrdering());
    assertEquals(1, selector.getOrdering().length);

    OrderBy orderBy = selector.getOrdering()[0];

    assertEquals("BidType", orderBy.getField());
    assertEquals(SortOrder.ASCENDING, orderBy.getSortOrder());

    builder.orderAscBy(CampaignField.Amount).orderDescBy(CampaignField.BidType);
    selector = builder.build();

    assertNotNull(selector.getOrdering());
    assertEquals(3, selector.getOrdering().length);

    orderBy = selector.getOrdering()[0];

    assertEquals("BidType", orderBy.getField());
    assertEquals(SortOrder.ASCENDING, orderBy.getSortOrder());

    orderBy = selector.getOrdering()[1];

    assertEquals("Amount", orderBy.getField());
    assertEquals(SortOrder.ASCENDING, orderBy.getSortOrder());

    orderBy = selector.getOrdering()[2];

    assertEquals("BidType", orderBy.getField());
    assertEquals(SortOrder.DESCENDING, orderBy.getSortOrder());

    // Removing the OrderBy for BidType
    selector = builder.removeOrderBy("BidType").build();

    assertNotNull(selector.getOrdering());
    assertEquals(1, selector.getOrdering().length);

    orderBy = selector.getOrdering()[0];

    assertEquals("Amount", orderBy.getField());
    assertEquals(SortOrder.ASCENDING, orderBy.getSortOrder());
  }