@Test
  public void testQuery() throws Exception {
    SalesforceConnector connector = new SalesforceConnector();
    final SObject sObject1 = Mockito.mock(SObject.class);
    final SObject sObject2 = Mockito.mock(SObject.class);
    final SObject sObject3 = Mockito.mock(SObject.class);
    when(sObject1.getId()).thenReturn("1");
    when(sObject2.getId()).thenReturn("2");
    when(sObject3.getId()).thenReturn("3");
    QueryResult queryResult = Mockito.mock(QueryResult.class);
    when(queryResult.getRecords())
        .thenAnswer(
            new Answer<Object>() {
              int counter = 0;

              @Override
              public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
                SObject[] result = null;
                switch (counter) {
                  case 0:
                    result = new SObject[] {sObject1};
                    break;
                  case 1:
                    result = new SObject[] {sObject2, sObject3};
                    break;
                  case 2:
                    result = new SObject[] {};
                    break;
                }
                counter++;
                return result;
              }
            });
    when(queryResult.isDone()).thenReturn(false).thenReturn(true);
    when(queryResult.getQueryLocator()).thenReturn("001").thenReturn(null);

    PartnerConnection partnerConnection = Mockito.mock(PartnerConnection.class);
    BulkConnection bulkConnection = Mockito.mock(BulkConnection.class);
    connector.setBulkConnection(bulkConnection);
    connector.setConnection(partnerConnection);

    when(partnerConnection.query(eq(MOCK_QUERY))).thenReturn(queryResult);
    when(partnerConnection.queryMore("001")).thenReturn(queryResult);

    PagingDelegate<Map<String, Object>> delegate =
        connector.query(MOCK_QUERY, new PagingConfiguration(1));
    List<Map<String, Object>> result = delegate.getPage();
    assertEquals(1, result.size());

    result = delegate.getPage();
    assertEquals(2, result.size());

    assertNull(delegate.getPage());
  }