function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Dev87Dev87 

apex Class Test : System.QueryException: SOQL offset must be a non-negative value

I have test class
@isTest
public class ListeAppelsTest
{
  public static List<Campaign> newCampaign;
  static void init() {
  newCampaign = new List<Campaign>();
   } 
 public static testMethod void ListeAppels()
 {
   // Set test page passing initial parameters.
        PageReference aPage = Page.ListeAppels;
        aPage.getParameters().put('filterCampaignId', '999');
        aPage.getParameters().put('filterStatus', '1');
        aPage.getParameters().put('filterUserId', '0');
        aPage.getParameters().put('filterSearch', '0678945312');
        integer counter = 0;
        test.setCurrentPage(aPage);
        init();
       Test.startTest();
    //---------------------------------------------------------
        List<Account> accounts = new List<Account>();
        List<Contact> contacts = new List<Contact>();
        List<CampaignMember> campaignMembers = new List<CampaignMember>();
         Campaign csource = new Campaign (
                    Name = 'CSource' , Nom_Evenement__c='Agence'
                );
                insert csource;

        for (Integer i=1;i<40; i++) {
                Campaign c = new Campaign (
                    Name = 'Test' + i, Nom_Evenement__c='Agence', CampagneSource__c=csource.id
                );
                newCampaign.add(c);
        }
        insert newCampaign;
        Integer i = 0;
        for(Campaign campaign : newCampaign) {
            
                for(Integer index = 0; index < 3; index++){
                    Account act1 = new Account(Name = 'Test'+index+i, Description=campaign.Id);
                    accounts.add(act1);
                }
            i++;
        }
        insert accounts;
        
        for(Account account: accounts){
            Contact cntct = new Contact(LastName = account.Name,phone='0678945313', mobilephone='0678945313',accountId = account.Id, Email='testContact@domain.com', Description = account.Description,Type_de_contact__c='Speaker');
            contacts.add(cntct);
        }
        insert contacts;
        
Integer integ = 0;
        for(Contact contact: contacts){
            integ++;
            String happel = null;
            String pappel = null;
            if(integ ==1){
                pappel='2';
            } else if(integ==2){
                pappel=':2';
            }else if(integ==3){
                pappel='44:99';
            }else if(integ==4){
                pappel='aa:99';
            }else if(integ==5){
                pappel='aa:bb';
            } else
            if(integ ==11){
                happel='2';
            } else if(integ==12){
                happel=':2';
            }else if(integ==13){
                happel='44:99';
            }else if(integ==14){
                happel='aa:99';
            }else if(integ==15){
                happel='aa:bb';
            }
            
            CampaignMember cm = null;
            if(integ<=5) {
                cm= New CampaignMember(CampaignId=contact.Description,ContactId=contact.Id,Status='Sent', Heure_Dernier_Appel__c=pappel);
            } else if (integ >= 10 && integ <= 15) {
                cm= New CampaignMember(CampaignId=contact.Description,ContactId=contact.Id,Status='Sent', Heure_Prochain_Appel__c=happel);
            } else {
                cm= New CampaignMember(CampaignId=contact.Description,ContactId=contact.Id,Status='Sent');
            }
            campaignMembers.add(cm);
        }
        insert campaignMembers;
       // Récuperation des CampaignMembers en Base
        List<Id> newCampaignIds = new List<Id>();
        for (Campaign C : newCampaign) {
            newCampaignIds.add(C.Id);

        }
        
        newCampaign = [
            SELECT Id, Name
            FROM Campaign
            WHERE Id IN :newCampaignIds
        ];
        upsert newCampaign;

        //---------------------------------------------------------
       Account act = new Account();
           act = new Account(Name = 'Test0');
            upsert act;
        Apexpages.StandardController sc = new Apexpages.standardController(act);
       
        // Instantiate the extension
        ListeAppels ext = new ListeAppels();
        
        CampaignMembers =  ext.sortListCM(campaignMembers);
        ext.getData();
        ext.UpdateRecords();
    
        ext.userOwnerGroup();
        ext.getBooleanValue('Non');
        ext.getBooleanValue('Oui');
        ext.Next();
        ext.End();
        ext.Previous();
        ext.Beginning();
        ext.getDisablePrevious();
        ext.getDisableNext();
      ext.getCampaignIDList();
        ext.getDisableNext();
        ext.getDisablePrevious();
        ext.getTotalPages();
        ext.getCmTotal();
        ext.getPageNumber();
       Boolean bln = ext.getBooleanValue('Oui');
        bln = ext.getBooleanValue('Non');
        string url = ext.getSfInstance() ;
        Set<Id> usersForGroup = ext.usersForGroup;
        List<SelectOption> CampaignItems = new List<SelectOption>();
        CampaignItems.add(new SelectOption('', '-- Campagne --'));
       // System.assertEquals(CampaignItems, ext.getCampaignItems());
        
        List<SelectOption> StatusItems = new List<SelectOption>();
        Schema.DescribeFieldResult fieldResult = CampaignMember.Status.getDescribe();
        List<Schema.PicklistEntry> plv = fieldResult.getPickListValues();
        StatusItems.add(new SelectOption('', '-- Statut --'));
        for (Schema.PickListEntry s: plv){
            StatusItems.add(new SelectOption(s.getValue(), s.getLabel()));
        }
       // System.assertEquals(StatusItems, ext.getStatusItems());
        Map<String,List<SelectOption>> StatusByCampaign = new Map<String,List<SelectOption>>();
       // System.assertEquals(StatusByCampaign, ext.StatusByCampaign);
        List<SelectOption> StatusItemsEmpty = new List<SelectOption>();
       // System.assertEquals(StatusItemsEmpty, ext.getStatusItemsFromCampaign(''));
        Set<Id> setGpId = new Set<Id>();
        setGpId = ext.getGroupUserIds(setGpId);
       // System.assertEquals(setGpId, ext.getGroupUserIds(setGpId));

        List<SelectOption> ContactTypes = new List<SelectOption>();
        Schema.DescribeFieldResult fieldResultcCType = CampaignMember.Type_de_contact__c.getDescribe();
        List<Schema.PicklistEntry> plvct = fieldResultcCType.getPickListValues();
        ContactTypes.add(new SelectOption('', '-- Type de contact --'));
        for (Schema.PickListEntry ct: plvct){
            ContactTypes.add(new SelectOption(ct.getValue(), ct.getLabel()));
        }
  //      System.assertEquals(ContactTypes, ext.getContactType());
        ext.filterCampaignId ='97989U';
        ext.filterSearch ='Test';
        
        ext.filterStatus ='New';
           ext.filterContactType ='Speaker';
        aPage.getParameters().put('filterStatus', '1');
        aPage.getParameters().put('filterUserId', '0');
        List<ListeAppels.cCampaignMember> ccampaignMember =  ext.getCampaignMembersFromQuery(true);
        String queryFields = 'SELECT Id, DateHeureAppel__c, Date_Dernier_Appel__c,Heure_Dernier_Appel__c,Date_Prochain_Appel__c,Heure_Prochain_Appel__c, Date_Heure_Prochain_Appel__c, ContactId, contact.email, contact.title, contact.salutation, contact.MobilePhone, contact.phone, contact.pi__comments__c ,Potentiel__c ,CampaignId, Contact.Id, Contact.Account.Id, Status, Contact.Account.Name, contact.name, contact.Type_d_inscription__c, contact.Service__c, contact.Secteur__c, Campaign.name, CommentaireAppel__c, Type_de_contact__c, appel_telephonique_orga__c, Discount_Code__c,RegistrationDate__c';
        String query = ' FROM CampaignMember';
        List<CampaignMember> cmembre =Database.query(queryFields + query);
        ext.CampaignMembers = new List<ListeAppels.cCampaignMember>();
        
        for (CampaignMember cmpMbr: cmembre){
            ext.CampaignMembers.add(new ListeAppels.cCampaignMember(cmpMbr, ext.cMap ));
        }
        ext.sortBy = 'Registration Date';
             ext.sortDir = 'Registration Date';

        ext.CampaignMembers  = ext.sortList(ext.CampaignMembers);
        aPage =ext.UpdateRecords();
        Test.stopTest();
        
    
 }
    
   private static List<Campaign> createNewCampaign(Integer numCampaign) {
        //System.debug(clients);
            for (Integer i=0;i<numCampaign; i++) {
                Campaign c = new Campaign (
                    Name = 'Test' + i
                );
                newCampaign.add(c);
            }
        insert newCampaign;
        // Récuperation des CampaignMembers en Base
        List<Id> newCampaignIds = new List<Id>();
        for (Campaign C : newCampaign) {
            newCampaignIds.add(C.Id);
        }
        
        newCampaign = [
            SELECT Id, Name
            FROM Campaign
            WHERE Id IN :newCampaignIds
        ];
        upsert newCampaign;
        return newCampaign;
    }
  
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
}

when I execute i have this error:

System.QueryException: SOQL offset must be a non-negative value
NagendraNagendra (Salesforce Developers) 
Hi Dev,

Sorry for this issue you are encountering.

May I suggest you please check with below link which might help you further with reference to above issue. Hope this helps.

Kindly mark this as solved if the reply was helpful.

Thanks,
Nagendra