• sumit d
  • SMARTIE
  • 580 Points
  • Member since 2018

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 287
    Questions
  • 265
    Replies
Hi All,
I am updating a user record by changing role of user, while changing role of user I ma getting Error:- The value of a parameter contains a character that is not allowed or the value exceeds the maximum allowed length. Remove the character from the parameter value or reduce the value length and resubmit.
  this error is only coming while i am changing only role, if i change anything else in user record, It gets saved but while updating role its giving me this error. I have tried inactive trigger/Flow etc on user record but i am still getting this error.
Can anyone help me with this?
Thanks in advance
Hi All, 
         I Have created a  test class for  the class below:-

public class MilestoneUtils {
    
    // Method Description : This method is use to Complete Case MileStone And Update Case fields when Email to Customer and Others
     
    public static void completeMilestone(Set<Id> caseIds,DateTime complDate){
        Set<Id> lstOfcaseId =caseIds;
        Map<Id,CaseMilestone> mapofCaseIdToMilestone = new Map<Id,CaseMilestone>();
        List<Case> casetoUpdate = new List<Case>();
        List<CaseMilestone> cmsToUpdate = [select Id,CaseId, completionDate
                                           from CaseMilestone cm
                                           where caseId in :caseIds and IsCompleted = false
                                           and completionDate = null AND MilestoneType.Name !='Full Resolution' limit 1];
        if (cmsToUpdate.isEmpty() == false){
            for (CaseMilestone cm : cmsToUpdate){
                cm.completionDate = complDate;
            }
            try{
                Database.SaveResult[] srList =Database.update(cmsToUpdate, True);
                CommonUtility.saveResults(srList);
            }catch(Exception e){
                ExceptionLogUtil.logException('MilestoneUtils','completeMilestone',e.getMessage(),e.getStackTraceString());

            }
            CaseMilestone mil= [SELECT caseId,MilestoneType.Name,ActualElapsedTimeInMins from CaseMilestone Where id=:cmsToUpdate order by createdDate DESC];
            mapofCaseIdToMilestone.put(mil.caseId,mil);
        }
        for(Case c : [Select status,Time_To_First_response__c,Last_Time_Waiting_Status__c,Is_Next_Reply__c,
                      count_of_outbound_emails__c,Last_Outbound_Email__c from Case where id In : caseIds]){
                          //c.status ='Waiting on Customer';
                          c.Last_Time_Waiting_Status__c = system.now();
                          if(mapofCaseIdToMilestone != null && mapofCaseIdToMilestone.containsKey(c.id)){
                              if(mapofCaseIdToMilestone.get(c.id).MilestoneType.Name == 'Next Reply'){
                                  c.Time_To_Next_Reply_Minutes__c = mapofCaseIdToMilestone.get(c.id).ActualElapsedTimeInMins;
                              }
                              if(mapofCaseIdToMilestone.get(c.id).MilestoneType.Name == 'First Reply'){
                                  c.Time_To_First_response__c = mapofCaseIdToMilestone.get(c.id).ActualElapsedTimeInMins;  
                              }
                          }
                          if(c.count_of_outbound_emails__c == NULL){
                              c.count_of_outbound_emails__c = 0;
                          }
                          c.count_of_outbound_emails__c++;
                          c.Last_Outbound_Email__c = System.now();
                          c.Is_Next_Reply__c = false;
                          casetoUpdate.add(c);
                          
                      } 
        if(casetoUpdate.size()>0){
            try{
                Database.SaveResult[] srList = Database.update(casetoUpdate, true);
                CommonUtility.saveResults(srList);
            }catch(Exception e){
                ExceptionLogUtil.logException('MilestoneUtils','completeMilestone',e.getMessage(),e.getStackTraceString()); 
            }
        }
    }
    
    
    public static void closedCaseMileStone(List<Case> list_cases, Map<Id,Case> applicableCase){
        Map<Id,Integer> maofCaseIdToEmail = new Map<Id,Integer>();
        Map<Id,CaseMilestone> mapofCaseIdToMilestone = new Map<Id,CaseMilestone>();
        for(AggregateResult aggr : [SELECT ParentId, COUNT_DISTINCT(CreatedById)usercount FROM EmailMessage 
                                    WHERE ParentId IN :applicableCase.keySet()
                                    AND Status != '5' AND Incoming = false 
                                    group by ParentId ])
        {
            maofCaseIdToEmail.put(String.valueOf(aggr.get('ParentId')), Integer.valueOf(aggr.get('usercount')));        
        }
        List<CaseMilestone> milestonesToUpdate = new List<CaseMilestone>();
        List<CaseMilestone> cms = [select Id,caseId,completionDate,ActualElapsedTimeInMins
                                   from CaseMilestone 
                                   where caseId in :applicableCase.keySet() and IsCompleted = false
                                   and completionDate = null];
        if(cms.size()>0){
            for(CaseMilestone cm : cms){
                if(applicableCase.containsKey(cm.CaseId)){
                    if(applicableCase.get(cm.CaseId).autoSolved__c){
                        cm.completionDate = applicableCase.get(cm.CaseId).Last_Outbound_Email__c;
                    }
                    else
                        cm.completionDate = applicableCase.get(cm.CaseId).Last_Set_Solved__c; 
                }
                
                mapofCaseIdToMilestone.put(cm.caseId,cm);
                milestonesToUpdate.add(cm);
            }
            if(milestonesToUpdate.size()>0){
                try{
                    Database.SaveResult[] srList = Database.update(milestonesToUpdate, false);
                    CommonUtility.saveResults(srList);
                }catch(Exception e){
                    ExceptionLogUtil.logException('MilestoneUtils','closedCaseMileStone',e.getMessage(),e.getStackTraceString()); 
                }
                CaseMilestone mil= [SELECT caseId,ActualElapsedTimeInMins from CaseMilestone Where caseId IN : applicableCase.keySet()  
                                    AND MilestoneType.Name ='Full Resolution' limit 1];
                mapofCaseIdToMilestone.put(mil.caseId,mil);

            }
        }
        for(Case c : list_cases){
            if(maofCaseIdToEmail != null && maofCaseIdToEmail.containsKey(c.id)){
                c.count_of_unique_CSAs__c = maofCaseIdToEmail.get(c.id);
            }
            if(mapofCaseIdToMilestone != NULL && mapofCaseIdToMilestone.containsKey(c.id)){
                // removing this as when we case opened from solved then this is updating to last time solved.
                //if(c.Time_To_First_Solved__c == NULL){
                //    c.Time_To_First_Solved__c = mapofCaseIdToMilestone.get(c.id).ActualElapsedTimeInMins;
                //}
                if(c.Time_To_First_Response__c == NULL){
                    c.Time_To_First_Response__c = mapofCaseIdToMilestone.get(c.id).ActualElapsedTimeInMins;
                }
                c.Time_To_Resolution__c = mapofCaseIdToMilestone.get(c.id).ActualElapsedTimeInMins;
            }
        }
    }
    } 
My test class is given below:-
@isTest 
private class Test_MilestoneUtils {
    
    @isTest
    public static void completeMilestone_Test(){
        //Set<Id> caseids = new Set<Id>();
        List<Case> cases = new List<Case>{};
            Account acc = new Account(Name = 'Entitlement Account DO NOT DELETE');
        insert acc;
        Entitlement en = TestFactory.createEntitlement(acc, 'Enterprise');
        insert en;
        HB_User__c h = TestFactory.createAirtableUser(100,'Enterprise');
        insert h;
        Case c = TestFactory.createCase(h);
        c.Priority = 'Business Critical';
        c.EntitlementId = en.id;
        c.Company_Number_of_employees__c = 1100;
        cases.add(c);
         
        if (cases.isEmpty()==false){
            insert cases;
             Set<Id> caseIds = new Set<Id>();
            Map<id,Case> mapCases= new Map<id,Case>();
            for (Case cl : cases){
                caseIds.add(cl.Id);
                mapCases.put(cl.id,cl);
             }
             milestoneUtils.completeMilestone(caseIds,System.now());
             milestoneUtils.closedCaseMileStone(cases,mapCases);
        }
    }
 }
I am getting less code coverage. Bold lines in my class is not covering. Can anyone help me to cover the lines.
Thanks
Hi All,
How to write test class for this controller class:-

public with sharing class DescribeHelper {
 
    public static List<SObjectFieldWrapper> getSortedFieldSetFields(String sObjectName, String fieldSetName) {
        List<SObjectFieldWrapper> objFields = new List<SObjectFieldWrapper>();
        //describe the provided sObject
        Schema.DescribeSObjectResult res = Schema.getGlobalDescribe().get(sObjectName).getDescribe();
        Map<String, Schema.FieldSet> fieldSetMap = res.fieldSets.getMap();
        Schema.FieldSet fs = fieldSetMap.get(fieldSetName);
        for(Schema.FieldSetMember fsm : fs.getFields()) {
            SObjectFieldWrapper sfw = new SObjectFieldWrapper();
            sfw.fieldName = fsm.getFieldPath();
            sfw.fieldType = fsm.getType().name();
            sfw.fieldLabel = fsm.getLabel();
            sfw.required = fsm.getRequired() || fsm.getDbRequired();
            objFields.add(sfw);
        }
        //objFields.sort();
        return objFields;
    }

    public class SObjectFieldWrapper implements Comparable {
        @AuraEnabled
        public String fieldName {get; public set;}
        @AuraEnabled
        public String fieldLabel {get; public set;}
        @AuraEnabled
        public String fieldType {get; public set;}
        @AuraEnabled
        public Boolean required {get; public set;}
        
        public Integer compareTo(Object withObj) {
            SObjectFieldWrapper compareTo = (SObjectFieldWrapper) withObj;
            return fieldLabel.compareTo(compareTo.fieldLabel);
        }
    }
}
Can anyone help me with test class of it?
Thanks
Hi All,
          I want to create a custom lightning component for quote creation on opportunity. it will launch with quick action which has same UI as Standard quote creation and it will auto-populate the quote name Same as Opportunity name.
Can anyone help me with this scenario?
Thanks
Hi All,
          I have a controller and I wrote its test class. it's not covering some part.
My controller is given below:-
 
public without sharing class MatchMakingController {
    private ApexPages.StandardController sctrl;
    rie__Registration__c regObj;
    public Map<String, List<SelectOption>> questionsMap {get;set;}
    private Map<String, String> questionAnswerMap;
    public Map<String, rie__Question__c> questionsSet {get;set;}
    public String Selectedvalues {get;set;}
    public String answeredQuestion{get; set;}
    
    public MatchMakingController(ApexPages.StandardController st){
        this.sctrl = st;
        this.regObj = (rie__Registration__c) st.getRecord();
        questionAnswerMap = new Map<String, String>();
        
    }
  
     public void populateAnswers()
    {
        questionAnswerMap.put(answeredQuestion.trim(), Selectedvalues.trim());
        System.debug('***'+questionAnswerMap);
        Selectedvalues=Null;
    }
    
    public pageReference submitAnswers(){
        List<rie__Registrant_Answer__c> existingRegAnswersList = new List<rie__Registrant_Answer__c>([Select id, rie__Question__c,
                                                                                                     rie__Answer__c, rie__Registration__c
                                                                                                     from rie__Registrant_Answer__c
                                                                                                     where rie__Registration__c =: regObj.Id]);
        Map<String, rie__Registrant_Answer__c> existingRegAnswersMap = new Map<String, rie__Registrant_Answer__c>();
        if(existingRegAnswersList != Null && existingRegAnswersList.size() > 0){
            for(rie__Registrant_Answer__c regAnswers : existingRegAnswersList){
                existingRegAnswersMap.put(regAnswers.rie__Question__c, regAnswers);
            }
        }
        system.debug('questionAnswerMap---->'+questionAnswerMap);
        List<rie__Registrant_Answer__c> regAnswerList = new List<rie__Registrant_Answer__c>();
        if(questionAnswerMap != Null && questionAnswerMap.size() > 0){
            for(String question : questionAnswerMap.keySet()){
                if(question != Null && question != 'None' &&
                   questionAnswerMap.get(question) != Null && 
                   questionAnswerMap.get(question) != 'None'){
                       if(existingRegAnswersMap != Null && 
                          existingRegAnswersMap.size() > 0 && 
                          existingRegAnswersMap.containsKey(question)){
                              rie__Registrant_Answer__c regAnswer = new rie__Registrant_Answer__c(Id = existingRegAnswersMap.get(question).Id);
                              regAnswer.rie__Question__c = questionsSet.get(question).Id;
                              regAnswer.rie__Answer__c = questionAnswerMap.get(question);
                              regAnswer.rie__Registration__c = regObj.Id;
                              regAnswerList.add(regAnswer); 
                          }else{
                              rie__Registrant_Answer__c regAnswer = new rie__Registrant_Answer__c();
                              regAnswer.rie__Question__c = questionsSet.get(question).Id;
                              regAnswer.rie__Answer__c = questionAnswerMap.get(question);
                              regAnswer.rie__Registration__c = regObj.Id;
                              regAnswerList.add(regAnswer);  
                          }
                       
                       
                   }
            }
        }
        if(regAnswerList != Null && regAnswerList.size() > 0){
            insert regAnswerList;
        }
        Selectedvalues=Null;
        PageReference cancel = sctrl.cancel(); 
        return cancel;
    }
    
    public pageReference cancel(){
       PageReference cancel = sctrl.cancel(); 
       return cancel; 
    }
}

Test class is given below:-
@istest
private class MatchMakingControllerTest {
   
    Static testmethod void MatchMakingMethod(){
           String txt = 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG';
         rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-07:00) Pacific Daylight Time (America/Los_Angeles)';
        insert evt;
        
        rie__Registration__c attendee = new rie__Registration__c();
        attendee.rie__BatchProcessedForMatchMaking__c = false;
        attendee.rie__Event__c = evt.id;
        insert attendee;
        
        rie__Question__c qus = new rie__Question__c();
        qus.rie__Question__c  = 'Are you looking for a Solution?';
        qus.rie__Answers__c = 'ans,yes';
        insert qus;
        
        rie__Registrant_Answer__c regAns =  new rie__Registrant_Answer__c();
        regAns.rie__Question__c = qus.id;
        regAns.rie__Registration__c =  attendee.id;
        regAns.rie__Answer__c = 'yes';
        insert regAns;
        
        test.startTest();
        PageReference pageRef  = Page.MatchMakingQuestions; 
        pageRef.getParameters().put('Id', regAns.id);
        Test.setCurrentPage(pageRef);
        Registration__c reg = new Registration__c();
        Apexpages.StandardController sc = new Apexpages.standardController(reg);
        
        // Instantiate the extension
        MatchMakingController ext = new MatchMakingController(sc);
        ext.answeredQuestion = txt;
        //ext.populateAnswers();
        PageReference testPageResults = ext.cancel();
        PageReference testPageResult = ext.getQuestionsList();
        PageReference testPageRe = ext.submitAnswers();
        test.stoptest();
        
    }
}
how can I cover bold lines in my test class?
Can anyone help me with this?
​​​​​​​
Hi All, 
          I have a controller class. How to write test class for the controller given below:-
 
public without sharing class MatchMakingController {
    private ApexPages.StandardController sctrl;
    rie__Registration__c regObj;
    public Map<String, List<SelectOption>> questionsMap {get;set;}
    private Map<String, String> questionAnswerMap;
    public Map<String, rie__Question__c> questionsSet {get;set;}
    public String Selectedvalues {get;set;}
    public String answeredQuestion{get; set;}
    
    public MatchMakingController(ApexPages.StandardController st){
        this.sctrl = st;
        this.regObj = (rie__Registration__c) st.getRecord();
        questionAnswerMap = new Map<String, String>();
        
    }
    
    public pageReference getQuestionsList(){
       List<rie__Question__c> questionsList = new List<rie__Question__c>([Select id, rie__Question__c, 
                                                                             rie__Answers__c 
                                                                          from rie__Question__c]);
        questionsMap = new Map<String, List<SelectOption>>();
        List<SelectOption> answerList = new List<SelectOption>();
        questionsSet = new Map<String, rie__Question__c>();
        if(questionsList != Null && questionsList.size() > 0){
            for(rie__Question__c questions : questionsList){
                answerList = new List<SelectOption>();
                if(questions.rie__Answers__c.contains(',')){
                    List<String> answerSplitList = new List<String>(questions.rie__Answers__c.split(','));
                    if(answerSplitList != Null && answerSplitList.size() > 0){
                        answerList.add(new SelectOption('None','--NONE--'));
                        for(String str : answerSplitList){
                           answerList.add(new SelectOption(str.trim(), str.trim())); 
                        }
                    }
                    questionsMap.put(questions.rie__Question__c.trim() , answerList);
                    questionsSet.put(questions.rie__Question__c.trim() , questions); 
                }
                
            }
        }
        return null;
        
    }
    
     public void populateAnswers()
    {
        questionAnswerMap.put(answeredQuestion.trim(), Selectedvalues.trim());
        System.debug('***'+questionAnswerMap);
        Selectedvalues=Null;
    }
    
    public pageReference submitAnswers(){
        List<rie__Registrant_Answer__c> existingRegAnswersList = new List<rie__Registrant_Answer__c>([Select id, rie__Question__c,
                                                                                                     rie__Answer__c, rie__Registration__c
                                                                                                     from rie__Registrant_Answer__c
                                                                                                     where rie__Registration__c =: regObj.Id]);
        Map<String, rie__Registrant_Answer__c> existingRegAnswersMap = new Map<String, rie__Registrant_Answer__c>();
        if(existingRegAnswersList != Null && existingRegAnswersList.size() > 0){
            for(rie__Registrant_Answer__c regAnswers : existingRegAnswersList){
                existingRegAnswersMap.put(regAnswers.rie__Question__c, regAnswers);
            }
        }
        system.debug('questionAnswerMap---->'+questionAnswerMap);
        List<rie__Registrant_Answer__c> regAnswerList = new List<rie__Registrant_Answer__c>();
        if(questionAnswerMap != Null && questionAnswerMap.size() > 0){
            for(String question : questionAnswerMap.keySet()){
                if(question != Null && question != 'None' &&
                   questionAnswerMap.get(question) != Null && 
                   questionAnswerMap.get(question) != 'None'){
                       if(existingRegAnswersMap != Null && 
                          existingRegAnswersMap.size() > 0 && 
                          existingRegAnswersMap.containsKey(question)){
                              rie__Registrant_Answer__c regAnswer = new rie__Registrant_Answer__c(Id = existingRegAnswersMap.get(question).Id);
                              regAnswer.rie__Question__c = questionsSet.get(question).Id;
                              regAnswer.rie__Answer__c = questionAnswerMap.get(question);
                              regAnswer.rie__Registration__c = regObj.Id;
                              regAnswerList.add(regAnswer); 
                          }else{
                              rie__Registrant_Answer__c regAnswer = new rie__Registrant_Answer__c();
                              regAnswer.rie__Question__c = questionsSet.get(question).Id;
                              regAnswer.rie__Answer__c = questionAnswerMap.get(question);
                              regAnswer.rie__Registration__c = regObj.Id;
                              regAnswerList.add(regAnswer);  
                          }
                       
                       
                   }
            }
        }
        if(regAnswerList != Null && regAnswerList.size() > 0){
            insert regAnswerList;
        }
        Selectedvalues=Null;
        PageReference cancel = sctrl.cancel(); 
        return cancel;
    }
    
    public pageReference cancel(){
       PageReference cancel = sctrl.cancel(); 
       return cancel; 
    }
}

​​​​​​​Can anyone help me with this?
Hi All ,
 i have a trigger in which I am getting error.
Trigger_Contact: execution of AfterInsert caused by: System.NullPointerException: Argument cannot be null.:
my helper class is given below:-
public class ContactTriggerHelper {
    
    public static List<Contact> newContact = new List<Contact>();
    public static List<Contact> oldContact = new List<Contact>();
    public static Map<Id, Contact> newMapContact = new Map<Id, Contact>();
    public static Map<Id, Contact> oldMapContact = new Map<Id, Contact>();
 
    public static void RollupAmount(){
        System.debug('Contact Method');
        Set<Id> Accids = new Set<Id>();
        for(Contact con : newContact){
            System.debug('Contact loopSET');
            Accids.add(Con.Accountid);
        }
        List<Account> accListToUpdate = new List<Account>();
        Map<Id,List<Contact>> mapAccountIdToAccount = new map<Id,List<Contact>>();
        // creating map with account id as key and contact as list
        for(Contact con:newContact)
        {
            if(mapAccountIdToAccount.containsKey(con.AccountId))
            {   
                mapAccountIdToAccount.get(con.AccountId).add(con);
                
            }
            else 
            {   
                mapAccountIdToAccount.put(con.AccountId,new list<contact>{con}); 
            }
        }
        for(Account acc : [select id,Rollup_Amount__c,Name,
                           (select id,Name,Amount_x__c,Type__c,Amount_Y__c from Contacts) 
                           from Account 
                           where id IN: Accids]){
                               
                                   for(Contact con : mapAccountIdToAccount.get(acc.id)){
                                       System.debug('Contact loop');
                                       if(Con.Amount_x__c != null && con.Type__c == 'Positive'){
                                           acc.Rollup_X__c = con.Amount_x__c;
                                           System.debug('+here in x');
                                       }
                                       if(Con.Amount_Y__c != null && con.Type__c == 'Negative'){
                                           acc.Rollup_Y__c = con.Amount_Y__c;
                                           System.debug('+here in Y');
                                       }
                                       acc.Rollup_Amount__c = con.Amount_x__c + con.Amount_Y__c;
                                  
                               }
                               accListToUpdate.add(acc);
                               System.debug('List to update'+accListToUpdate);
                           }
        if(accListToUpdate.Size() > 0){
            update accListToUpdate;
        }
    }
}

how to solve this error?
 HI All,
       I have a test class which is giving me error when i try to run it.
System.SObjectException: Field is not writeable: rie__Registrant_Exhibitor__c.rie__Registration__c
My class is below:-
public without sharing class BatchMatchMaking implements Database.Batchable<sObject>{
    // Start Method
    public Database.queryLocator start(Database.BatchableContext bc){
        return Database.getQueryLocator('Select id, rie__BatchProcessedForMatchMaking__c '+ 
                                        'from rie__Registration__c '+ 
                                        'where rie__BatchProcessedForMatchMaking__c = false');
    }
    //Execute Method
    public void execute(Database.BatchableContext BC, List<rie__Registration__c> regList){
        RegistrationTriggerHelper.runTrigger = false;
        Set<Id> regIds = new Set<Id>();
        if(regList != Null && regList.size() > 0){
            for(rie__Registration__c regobj : regList){
                regObj.rie__BatchProcessedForMatchMaking__c = true;
                regIds.add(regObj.Id);
            }
        }
        if(regIds != Null && regIds.size() > 0){
            Map<Id, rie__Registrant_Answer__c> regQuestionAnswersMap = new Map<Id, rie__Registrant_Answer__c>();
            
            //Get all the registrant Answers related to Registrants
            List<rie__Registrant_Answer__c> regAnswersList = new List<rie__Registrant_Answer__c>([Select id, rie__Question__c,
                                                                                                 rie__Answer__c, rie__Registration__c
                                                                                                 from rie__Registrant_Answer__c
                                                                                                 where rie__Registration__c IN: regIds]);
            
            if(regAnswersList != Null && regAnswersList.size() > 0){
                for(rie__Registrant_Answer__c regAnswers : regAnswersList){
                    regQuestionAnswersMap.put(regAnswers.rie__Question__c , regAnswers);
                }
            }
            
            if(regQuestionAnswersMap != Null && regQuestionAnswersMap.size() > 0){
                // This map contains Exhibitor as a key and Final score as value 
                Map<Id , Integer> exhibitorTotalScoreMap = new Map<Id , Integer>();
                
                //Get All Exhibitor Questionsand Score
                List<rie__Exhibitor_Question__c> exhibitorQuestionsList = new List<rie__Exhibitor_Question__c>([Select id, rie__Answer__c,
                                                                                                            rie__Exhibitor__c, rie__Question__c ,
                                                                                                            rie__Score__c
                                                                                                            from rie__Exhibitor_Question__c
                                                                                                            where rie__Question__c IN: regQuestionAnswersMap.keySet()]);
                
                List<rie__Registrant_Exhibitor__c> regExhibitorListToInsert = new List<rie__Registrant_Exhibitor__c>();
                Set<Id> registrantIds = new Set<Id>();
                if(exhibitorQuestionsList != Null && exhibitorQuestionsList.size() > 0){
                    for(rie__Exhibitor_Question__c exhibitorQuestions : exhibitorQuestionsList){
                        if(regQuestionAnswersMap.containsKey(exhibitorQuestions.rie__Question__c) && 
                           exhibitorQuestions.rie__Score__c != Null && 
                           exhibitorQuestions.rie__Answer__c == regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Answer__c){ 
                            Integer totalScoreList = 0;
                            if(exhibitorTotalScoreMap.containsKey(exhibitorQuestions.rie__Exhibitor__c)){
                                
                                totalScoreList = exhibitorTotalScoreMap.get(exhibitorQuestions.rie__Exhibitor__c);
                                
                                totalScoreList = totalScoreList + Integer.valueOf(exhibitorQuestions.rie__Score__c);
                            }else{
                                totalScoreList = Integer.valueOf(exhibitorQuestions.rie__Score__c); 
                            }
                       exhibitorTotalScoreMap.put(exhibitorQuestions.rie__Exhibitor__c , totalScoreList);
                            registrantIds.add(regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Registration__c);   
                        }
                     }
                     //Get all the existing registrant exhibior 
                    List<rie__Registrant_Exhibitor__c> regExihibitorList = new List<rie__Registrant_Exhibitor__c>([Select id, rie__Registration__c 
                                                                                                                   from rie__Registrant_Exhibitor__c 
                                                                                                                   where rie__Registration__c IN: registrantIds]);
                    Map<Id, rie__Registrant_Exhibitor__c> registrantExhibitorMap = new Map<Id, rie__Registrant_Exhibitor__c>();
                    if(regExihibitorList != Null && regExihibitorList.size() > 0){
                        for(rie__Registrant_Exhibitor__c regExhibitor : regExihibitorList){
                            registrantExhibitorMap.put(regExhibitor.rie__Registration__c, regExhibitor);
                        }
                    }
                               Integer finalScore = 0;             
                    for(rie__Exhibitor_Question__c exhibitorQuestions : exhibitorQuestionsList){
                            //Checking for exhibitor question
                            if(regQuestionAnswersMap.containsKey(exhibitorQuestions.rie__Question__c)){
                                //Checking for registrant answer
                                if(exhibitorQuestions.rie__Answer__c == regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Answer__c){
                                    if(exhibitorTotalScoreMap.containsKey(exhibitorQuestions.rie__Exhibitor__c) && 
                                       finalScore < exhibitorTotalScoreMap.get(exhibitorQuestions.rie__Exhibitor__c)){
                                           //Checking for any existing registrant exhibitor
                                           
                                           rie__Registrant_Exhibitor__c regExhibitor;
                                           if(registrantExhibitorMap.containsKey(regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Registration__c)){
                                             regExhibitor = new rie__Registrant_Exhibitor__c(Id = registrantExhibitorMap.get(regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Registration__c).Id); 
                                           }else{
                                             regExhibitor = new rie__Registrant_Exhibitor__c();
                                           }
                                           regExhibitor.rie__Registration__c =  regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Registration__c; // Error is coming from here

                                           finalScore = exhibitorTotalScoreMap.get(exhibitorQuestions.rie__Exhibitor__c);
                                           regExhibitor.rie__Exhibitor__c = exhibitorQuestions.rie__Exhibitor__c;
                                           regExhibitor.rie__Score__c = finalScore; 
                                           regExhibitorListToInsert.add(regExhibitor); 
                                       }
                                }    
                            }
                    }
                }
                                //upsert the new Registrant Exhibitors
                if(regExhibitorListToInsert != Null && regExhibitorListToInsert.size() > 0){
                    upsert regExhibitorListToInsert;
                }
            }
        }
        update regList;
    }
     //Finish Method for batch
    public void finish(Database.BatchableContext BC){
    }
 }
My test class is below:-
@istest
private class BatchMatchMakingTest {
    static testmethod void matchMakingMethod(){
        
        rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-07:00) Pacific Daylight Time (America/Los_Angeles)';
        insert evt;
        
        rie__Registration__c attendee = new rie__Registration__c();
        attendee.rie__BatchProcessedForMatchMaking__c = false;
        attendee.rie__Event__c = evt.id;
        insert attendee;
        
        rie__Question__c qus = new rie__Question__c();
        qus.rie__Question__c  = 'Are you looking for a Solution?';
        insert qus;
        
        rie__Registrant_Answer__c regAns =  new rie__Registrant_Answer__c();
        regAns.rie__Question__c = qus.id;
        regAns.rie__Registration__c =  attendee.id;
        regAns.rie__Answer__c = 'yes';
        insert regAns;
        
         rie__Exhibitor__c ex = new rie__Exhibitor__c();
         
        insert ex;
        
        rie__Exhibitor_Question__c eq = new rie__Exhibitor_Question__c();
        eq.rie__Question__c = qus.id;
        eq.rie__Exhibitor__c = ex.id;
        eq.rie__Answer__c = 'yes';
        eq.rie__Score__c = 50;
        insert eq;
        
        rie__Registrant_Exhibitor__c rex = new rie__Registrant_Exhibitor__c();
        rex.rie__Exhibitor__c = ex.id;
        rex.rie__Registration__c = attendee.id;
        insert rex;
       
        
        Test.startTest();
        BatchMatchMaking cp = new BatchMatchMaking();
        Database.executeBatch(cp);
        Test.stopTest();
        
        rie__Registrant_Exhibitor__c ras = [select id,rie__Exhibitor__c,rie__Registration__c 
                                         from rie__Registrant_Exhibitor__c
                                         where id =: rex.id];
        system.assertEquals(rex.rie__Exhibitor__c,ras.rie__Exhibitor__c );
        system.assertEquals(rex.rie__Registration__c,ras.rie__Registration__c );
    }
}
how to solve this error?
Hi All,
         I want to create a validation rule which have conditions below:-
1. When IsReccur__c(checkbox) is true and ReccurWithTime___c(Checkbox) is false and reccurType__c(Picklist) and NumberReccur__c(Picklist) is null than show error :- You cant save record.
2. When IsReccur__c is false and ReccurWithTime___c is also false,
 and EndTime(Date/Time) and startTime(Date/TIme)  is not blank than show error.
3.  When IsReccur__c is True and ReccurWithTime___c is also True,
 and EndTime(Date/Time) and startTime(Date/TIme)  is not blank than show error.
Can anyone help me with this validation?
Hi All,
           I have a method in my class. How to write negative test cases for this method?
 public static void rollupForAttendee(){
        
        Set<Id> parentAttendeeIds = new Set<Id>();
        if( Trigger.isInsert || Trigger.isUpdate || Trigger.isUndelete ){
            for( rie__Log__c logObj : newLogs ){
                if( logObj.rie__Attendee__c != Null ){
                    parentAttendeeIds.add( logObj.rie__Attendee__c );
                }
            }
        } 
        else if( Trigger.isDelete ) {
            for( rie__Log__c logObj : oldLogs ){
                if( logObj.rie__Attendee__c != Null ){
                    parentAttendeeIds.add( logObj.rie__Attendee__c );
                }
            }    
        }
        
        if( parentAttendeeIds.size() > 0 ){
            
            for( Id registrationId : parentAttendeeIds ) {
                rie__Registration__c parentAttendee = new rie__Registration__c( Id = registrationId ); 
                parentAttendee.rie__Attendee_Counter__c = 0;
                parentAttendee.rie__Attendee_Chat_Counter__c = 0;
                parentAttendee.rie__Attendee_Connect_Counter__c = 0;
                mapParentAttendeesToUpdate.put( parentAttendee.Id, parentAttendee );
            }
            
            List<AggregateResult> aggrList = [ SELECT rie__Attendee__c parentAttendee, 
                                              COUNT(Id) attendee
                                              FROM rie__Log__c
                                              WHERE rie__Attendee__c IN: parentAttendeeIds
                                              GROUP BY rie__Attendee__c ];
            
            for( AggregateResult ag :  aggrList ){
                
                Id parentAttendeeId = (String)ag.get('parentAttendee');
                rie__Registration__c parentAttendee = mapParentAttendeesToUpdate.get( parentAttendeeId );
                
                parentAttendee.rie__Attendee_Counter__c = (Decimal)ag.get( 'attendee' );
                mapParentAttendeesToUpdate.put( parentAttendee.Id, parentAttendee );   
            }
            
            List<AggregateResult> aggrListChat = [ SELECT rie__Attendee__c parentAttendee, 
                                                  COUNT(Id) attendee
                                                  FROM rie__Log__c
                                                  WHERE rie__Attendee__c IN: parentAttendeeIds
                                                  AND rie__Attendee_Chat__c = TRUE
                                                  GROUP BY rie__Attendee__c ];
            
            for( AggregateResult ag :  aggrListChat ){
                
                Id parentAttendeeId = (String)ag.get('parentAttendee');
                rie__Registration__c parentAttendee = mapParentAttendeesToUpdate.get( parentAttendeeId );
                
                parentAttendee.rie__Attendee_Chat_Counter__c = (Decimal)ag.get( 'attendee' );
                mapParentAttendeesToUpdate.put( parentAttendee.Id, parentAttendee );   
            }
            
            List<AggregateResult> aggrListConnect = [ SELECT rie__Attendee__c parentAttendee, 
                                                     COUNT(Id) attendee
                                                     FROM rie__Log__c
                                                     WHERE rie__Attendee__c IN: parentAttendeeIds
                                                     AND rie__Attendee_Connect__c = TRUE
                                                     GROUP BY rie__Attendee__c ];
            
            for( AggregateResult ag :  aggrListConnect ){
                
                Id parentAttendeeId = (String)ag.get('parentAttendee');
                rie__Registration__c parentAttendee = mapParentAttendeesToUpdate.get( parentAttendeeId );
                
                parentAttendee.rie__Attendee_Connect_Counter__c = (Decimal)ag.get( 'attendee' );
                mapParentAttendeesToUpdate.put( parentAttendee.Id, parentAttendee );
            }
        }
    }
Can anyone help with negative test cases?
 
Hi all,
    I have a helper class in which i dont have any callout still i am gettimg this error:-Methods defined as TestMethod do not support Web service callouts.
how to solve this error?
My test class is given below:-
@istest
private class Trigger_LogTest {
    
    private class Mock implements HttpCalloutMock {
        
        public HTTPResponse respond(HTTPRequest req) {
            
            HTTPResponse res = new HTTPResponse();
            
            res.setStatusCode(200);
            res.setBody('{'+
                        '  \"agenda\": \"Test Webinar\",'+
                        '  \"created_at\": \"2020-04-15T11:16:58Z\",'+
                        '  \"duration\": 60,'+
                        '  \"host_id\": \"BhN6PRjkQW-iUc8-8-aTSw\",'+
                        '  \"id\": 94298132774,'+
                        '  \"join_url\": \"https://zoom.us/j/94298132774?pwd=REZsT1NnOFd5aWhUUDB0cTFRS010dz09\",'+
                        '  \"password\": \"avfhfgh\",'+
                        '  \"registration_url\": \"https://zoom.us/webinar/register/WN_BRg795wbTHSIOWEnknY5gA\",'+
                        '  \"settings\": {'+
                        '    \"allow_multiple_devices\": false,'+
                        '    \"alternative_hosts\": \"\",'+
                        '    \"approval_type\": 0,'+
                        '    \"audio\": \"both\",'+
                        '    \"auto_recording\": \"none\",'+
                        '    \"close_registration\": true,'+
                        '    \"contact_email\": \"steve@realintelligence.com\",'+
                        '    \"contact_name\": \"Steve Kompolt\",'+
                        '    \"enforce_login\": false,'+
                        '    \"enforce_login_domains\": \"\",'+
                        '    \"global_dial_in_countries\": ['+
                        '      \"US\"'+
                        '    ],'+
                        '    \"global_dial_in_numbers\": ['+
                        '      {'+
                        '        \"city\": \"Chicago\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 3126266799\",'+
                        '        \"type\": \"toll\"'+
                        '      },'+
                        '      {'+
                        '        \"city\": \"New York\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 6465588656\",'+
                        '        \"type\": \"toll\"'+
                        '      },'+
                        '      {'+
                        '        \"city\": \"Houston\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 3462487799\",'+
                        '        \"type\": \"toll\"'+
                        '      },'+
                        '      {'+
                        '        \"city\": \"San Jose\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 6699009128\",'+
                        '        \"type\": \"toll\"'+
                        '      },'+
                        '      {'+
                        '        \"city\": \"\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 2532158782\",'+
                        '        \"type\": \"toll\"'+
                        '      },'+
                        '      {'+
                        '        \"city\": \"\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 3017158592\",'+
                        '        \"type\": \"toll\"'+
                        '      }'+
                        '    ],'+
                        '    \"hd_video\": true,'+
                        '    \"host_video\": true,'+
                        '    \"meeting_authentication\": false,'+
                        '    \"on_demand\": false,'+
                        '    \"panelists_video\": true,'+
                        '    \"post_webinar_survey\": false,'+
                        '    \"practice_session\": true,'+
                        '    \"question_answer\": true,'+
                        '    \"registrants_confirmation_email\": true,'+
                        '    \"registrants_email_notification\": true,'+
                        '    \"registrants_restrict_number\": 0,'+
                        '    \"show_share_button\": true'+
                        '  },'+
                        '  \"start_time\": \"2020-09-20T06:59:00Z\",'+
                        '  \"start_url\": \"https://zoom.us/s/94298132774?zak=eyJ6bV9za20iOiJ6bV9vMm0iLCJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJjbGllbnQiLCJ1aWQiOiJCaE42UFJqa1FXLWlVYzgtOC1hVFN3IiwiaXNzIjoid2ViIiwic3R5IjoxMDAsIndjZCI6ImF3MSIsImNsdCI6MCwic3RrIjoicm5JSzZ3VDNsQnh2ODdMQUg0RTFsZU1OOVFwcldNZ2VIMUhzWnRaNXE3NC5CZ1VzZDBWRWFUUk9lVWR1VkVSWGIxbFpWRkZNVGpKUmRsQldhWHBQZG5OT2J6bHFabmR6TVZaUVNtVkRTVDFBWkRZeVpEZ3hOMll3WVdFMk16WTRNalJsWldRd1pETXhZakZoWldJMk1tWTFNR1UyTXpFNU5HVXdNalZrWXpnek56WTFNR05oTUdSbU1EWXdZMll6T0FBTU0wTkNRWFZ2YVZsVE0zTTlBQU5oZHpFIiwiZXhwIjoxNTg2OTU2NjE4LCJpYXQiOjE1ODY5NDk0MTgsImFpZCI6ImtCQnVrUUQwUjRlaE9Lb00wWU80TmciLCJjaWQiOiIifQ.t-ECUWaekV1eRkBwA00XR0ysKz0OHSUagnwT7guXkg8\",'+
                        '  \"timezone\": \"America/Los_Angeles\",'+
                        '  \"topic\": \"Test Webinar\",'+
                        '  \"type\": 5,'+
                        '  \"uuid\": \"iTfCvg3iSQW3oFjwObnLog==\"'+
                        '}');
            
            return res; 
        }
    }
  
    static testmethod void rollupForBoothTest(){
        Test.setMock(HttpCalloutMock.class, new Mock());

         rie__Zoom_User__c z = new rie__Zoom_User__c();
        z.rie__Email_Id__c = 'real@gmail.com';
        z.rie__FirstName__c = 'Real';
        z.rie__LastName__c = 'Int';
        z.rie__User_Type__c ='Licensed';
        insert z;
        
        Contact c = new Contact();
        c.LastName = 'steven';
        c.rie__Zoom_User__c = z.id;
        insert c;
        
        rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-07:00) Pacific Daylight Time (America/Los_Angeles)';
        insert evt;
        
        
        rie__Session__c s = new rie__Session__c();
        s.rie__Session_Status__c = 'Ready to Publish';
        s.rie__Date_Time__c = System.today();
        s.rie__Session_Organizer__c = c.id;
        s.rie__Publish_to_Web__c = False;
        s.rie__Session_End_Time__c = System.today();
        s.rie__Meeting_ID__c = '86023030645' ;
        s.rie__Meeting_Password__c = '53b347b2a5';
        s.rie__Event__c =  evt.id;
        insert s;
        
        ri__Campus__c campus = new ri__Campus__c();
        insert campus;
        
        ri__Property__c tradeShow = new ri__Property__c();
        tradeShow.ri__Campus__c = campus.id;
        insert tradeShow;
        
        ri__Unit__c booth = new ri__Unit__c();
        booth.ri__Building__c = tradeShow.id;
        insert booth;
        
        rie__Registration__c attendee = new rie__Registration__c();
        attendee.rie__Event__c = evt.id;
        insert attendee;
        
        rie__Log__c logs = new rie__Log__c();
        logs.rie__Event__c = evt.id;
        logs.rie__Session__c = s.id;
        logs.rie__Attendee_Chat__c = true;
        logs.Booth_Sponsor__c = booth.id;
        logs.rie__Attendee_Connect__c = true;
        logs.Booth_Sponsor_Chat__c = true;
        logs.Booth_Sponsor_Connect__c = true;
        logs.rie__Registration__c = attendee.id;
        insert logs;
         test.startTest();
        delete logs;
        test.stopTest();}}

My class is given below:-
/**
 * Helper Class For Trigger: Trigger_Log 
 */
public without sharing class LogTriggerHelper{
    public static List<rie__Log__c> newLogs;
    public static List<rie__Log__c> oldLogs;
    public static Map<Id, rie__Log__c> newMapLogs;
    public static Map<Id, rie__Log__c> oldMapLogs;
    
    public static boolean runTrigger = TRUE;
    
    public static Map<Id, rie__Registration__c> mapParentRegisTrationsToUpdate = new Map<Id, rie__Registration__c>();
    
    public static Map<Id, rie__Registration__c> mapParentBoothSponsorsToUpdate = new Map<Id, rie__Registration__c>();
    
    public static void rollupCalculations(){
        
        mapParentBoothSponsorsToUpdate = new Map<Id, rie__Registration__c>();
        rollupForBooth();
        if( mapParentBoothSponsorsToUpdate.size() > 0 ) {
            mapParentRegisTrationsToUpdate.putAll( mapParentBoothSponsorsToUpdate );
        }
        
        // update registrations
        if( mapParentRegisTrationsToUpdate.size() > 0 ) {
            update mapParentRegisTrationsToUpdate.values();
        }
    }
    
    public static void rollupForBooth(){
        
        Set<Id> parentRegistrationIds = new Set<Id>();
        if( Trigger.isInsert || Trigger.isUpdate || Trigger.isUndelete ){
            for( rie__Log__c logObj : newLogs ){
                if( logObj.rie__Registration__c != Null ){
                    parentRegistrationIds.add( logObj.rie__Registration__c );
                }
            }
        } 
        else if( Trigger.isDelete ) {
            for( rie__Log__c logObj : oldLogs ){
                if( logObj.rie__Registration__c != Null ){
                    parentRegistrationIds.add( logObj.rie__Registration__c );
                }
            }    
        }
        
        if( parentRegistrationIds.size() > 0 ){
            for( Id registrationId : parentRegistrationIds ) {
                rie__Registration__c parentBoothSponsor = new rie__Registration__c( Id = registrationId ); 
                parentBoothSponsor.rie__Booth_Counter__c = 0;
                parentBoothSponsor.rie__Booth_Chat_Counter__c = 0;
                parentBoothSponsor.rie__Booth_Connect_Counter__c = 0;
                mapParentBoothSponsorsToUpdate.put( parentBoothSponsor.Id, parentBoothSponsor );
            }    
            
            List<AggregateResult> aggrList = [ SELECT rie__Registration__c parentBoothSponsor, 
                                               COUNT(Id) boothSponsor
                                               FROM rie__Log__c
                                               WHERE rie__Registration__c IN: parentRegistrationIds
                                               AND Booth_Sponsor__c != Null
                                               GROUP BY rie__Registration__c ];
            for( AggregateResult ag :  aggrList ){
            
                Id parentBoothSponsorId = (String)ag.get('parentBoothSponsor');
                rie__Registration__c parentBoothSponsor = mapParentBoothSponsorsToUpdate.get( parentBoothSponsorId );
                                            
                parentBoothSponsor.rie__Booth_Counter__c = (Decimal)ag.get( 'boothSponsor' );
                mapParentBoothSponsorsToUpdate.put( parentBoothSponsor.Id, parentBoothSponsor );   
            }
            
            List<AggregateResult> aggrListChat = [ SELECT rie__Registration__c parentBoothSponsor, 
                                                   COUNT(Id) chatBoothSponsor
                                                   FROM rie__Log__c
                                                   WHERE rie__Registration__c IN: parentRegistrationIds
                                                   AND Booth_Sponsor__c != Null
                                                   AND Booth_Sponsor_Chat__c = TRUE
                                                   GROUP BY rie__Registration__c ];
            for( AggregateResult ag :  aggrListChat ){
            
                Id parentBoothSponsorId = (String)ag.get('parentBoothSponsor');
                rie__Registration__c parentBoothSponsor = mapParentBoothSponsorsToUpdate.get( parentBoothSponsorId );
                                            
                parentBoothSponsor.rie__Booth_Chat_Counter__c = (Decimal)ag.get( 'chatBoothSponsor' );
                mapParentBoothSponsorsToUpdate.put( parentBoothSponsor.Id, parentBoothSponsor );   
            }
            
            List<AggregateResult> aggrListConnect = [ SELECT rie__Registration__c parentBoothSponsor, 
                                                      COUNT(Id) connectBoothSponsor
                                                      FROM rie__Log__c
                                                      WHERE rie__Registration__c IN: parentRegistrationIds
                                                      AND Booth_Sponsor__c != Null
                                                      AND Booth_Sponsor_Connect__c = TRUE
                                                      GROUP BY rie__Registration__c ];
            for( AggregateResult ag :  aggrListConnect ){
            
                Id parentBoothSponsorId = (String)ag.get('parentBoothSponsor');
                rie__Registration__c parentBoothSponsor = mapParentBoothSponsorsToUpdate.get( parentBoothSponsorId );
                                            
                parentBoothSponsor.rie__Booth_Connect_Counter__c = (Decimal)ag.get( 'connectBoothSponsor' );
                mapParentBoothSponsorsToUpdate.put( parentBoothSponsor.Id, parentBoothSponsor );   
            }
        }
    }
}
can anyone help me with this error?
     
Hi All,
         i have a test class for trigger helper but its giving me error:-Null Pointer Exception
My helper class is given below:-
/**
 * Helper Class For Trigger: Trigger_Log 
 */
public without sharing class LogTriggerHelper{
    public static List<rie__Log__c> newLogs;
    public static List<rie__Log__c> oldLogs;
    public static Map<Id, rie__Log__c> newMapLogs;
    public static Map<Id, rie__Log__c> oldMapLogs;
    
    public static boolean runTrigger = TRUE;
    
    public static Map<Id, rie__Registration__c> mapParentRegisTrationsToUpdate = new Map<Id, rie__Registration__c>();
    
    public static Map<Id, rie__Registration__c> mapParentAttendeesToUpdate = new Map<Id, rie__Registration__c>();
    public static Map<Id, rie__Registration__c> mapParentSpeakersToUpdate = new Map<Id, rie__Registration__c>();
    public static Map<Id, rie__Registration__c> mapParentRegToUpdateForSessions = new Map<Id, rie__Registration__c>();
     
    public static void rollupForSpeaker(){
        
        Set<Id> parentSpeakerIds = new Set<Id>();
        for( rie__Log__c logObj : newLogs ){
             if( logObj.rie__Speaker__c != Null ){
                parentSpeakerIds.add( logObj.rie__Speaker__c );
             }
        }
        Map<Id, rie__Speaker__c> mapIdToSpeaker = new Map<Id, rie__Speaker__c>();
        for( rie__Speaker__c spkrObj : [ SELECT Id, rie__Registration__c 
                                         FROM rie__Speaker__c 
                                         WHERE Id IN: parentSpeakerIds ] ){
            mapIdToSpeaker.put( spkrObj.Id, spkrObj );    
        }
    
        Set<Id> parentRegistrationIds = new Set<Id>();
        if( Trigger.isInsert || Trigger.isUpdate || Trigger.isUndelete ){
            for( rie__Log__c logObj : newLogs ){
                if( logObj.rie__Speaker__c != Null && mapIdToSpeaker.containsKey( logObj.rie__Speaker__c ) ){
                    Id parentSpeakerId = mapIdToSpeaker.get( logObj.rie__Speaker__c ).rie__Registration__c;
                    if( parentSpeakerId != Null ){
                        parentRegistrationIds.add( parentSpeakerId );
                    }    
                }
            }
        } 
        else if( Trigger.isDelete ) {
            for( rie__Log__c logObj : oldLogs ){
                if( logObj.rie__Speaker__c != Null && mapIdToSpeaker.containsKey( logObj.rie__Speaker__c ) ){
                    Id parentSpeakerId = mapIdToSpeaker.get( logObj.rie__Speaker__c ).rie__Registration__c;
                    if( parentSpeakerId != Null ){
                        parentRegistrationIds.add( parentSpeakerId );
                    }
                }
            }    
        }
        
        if( parentRegistrationIds.size() > 0 ){
            
            for( Id registrationId : parentRegistrationIds ) {
                rie__Registration__c parentSpeaker = new rie__Registration__c( Id = registrationId ); 
                parentSpeaker.rie__Speaker_Counter__c = 0;
                parentSpeaker.rie__Speaker_Chat_Counter__c = 0;
                parentSpeaker.rie__Speaker_Connect_Counter__c = 0;
                mapParentSpeakersToUpdate.put( parentSpeaker.Id, parentSpeaker );
            }
            
            List<AggregateResult> aggrList = [ SELECT rie__Speaker__r.rie__Registration__c parentSpeaker, 
                                               COUNT(Id) speaker
                                               FROM rie__Log__c
                                               WHERE rie__Speaker__r.rie__Registration__c IN: parentRegistrationIds
                                               GROUP BY rie__Speaker__r.rie__Registration__c ];
            for( AggregateResult ag :  aggrList ){
                
                Id parentSpeakerId = (String)ag.get('parentSpeaker');
                rie__Registration__c parentSpeaker = mapParentSpeakersToUpdate.get( parentSpeakerId );
                
                parentSpeaker.rie__Speaker_Counter__c = (Decimal)ag.get( 'speaker' );
                mapParentSpeakersToUpdate.put( parentSpeaker.Id, parentSpeaker );   
            }
            
            List<AggregateResult> aggrListChat = [ SELECT rie__Speaker__r.rie__Registration__c parentSpeaker, 
                                                   COUNT(Id) speaker
                                                   FROM rie__Log__c
                                                   WHERE rie__Speaker__r.rie__Registration__c IN: parentRegistrationIds
                                                   AND rie__Speaker_Chat__c = TRUE
                                                   GROUP BY rie__Speaker__r.rie__Registration__c ];
            
            for( AggregateResult ag :  aggrListChat ){
                
                Id parentSpeakerId = (String)ag.get('parentSpeaker');
                rie__Registration__c parentSpeaker = mapParentSpeakersToUpdate.get( parentSpeakerId );
                
                parentSpeaker.rie__Speaker_Chat_Counter__c = (Decimal)ag.get( 'speaker' );
                mapParentSpeakersToUpdate.put( parentSpeaker.Id, parentSpeaker );    
            }
            
            List<AggregateResult> aggrListChatConnect = [ SELECT rie__Speaker__r.rie__Registration__c parentSpeaker, 
                                                          COUNT(Id) speaker
                                                          FROM rie__Log__c
                                                          WHERE rie__Speaker__r.rie__Registration__c IN: parentRegistrationIds
                                                          AND rie__Speaker_Connect__c = TRUE
                                                          GROUP BY rie__Speaker__r.rie__Registration__c ];
            
            for( AggregateResult ag :  aggrListChatConnect ){
                
                Id parentSpeakerId = (String)ag.get('parentSpeaker');
                rie__Registration__c parentSpeaker = mapParentSpeakersToUpdate.get( parentSpeakerId );
                
                parentSpeaker.rie__Speaker_Connect_Counter__c = (Decimal)ag.get( 'speaker' );
                mapParentSpeakersToUpdate.put( parentSpeaker.Id, parentSpeaker );    
            }
            
        }
    }
    
    public static void rollupForSession(){
        
        Set<Id> parentSessionIds = new Set<Id>();
        
        if( Trigger.isInsert || Trigger.isUpdate || Trigger.isUndelete ){            
            for( rie__Log__c logObj : newLogs ){
                if( logObj.rie__Session__c != Null ){
                    parentSessionIds.add( logObj.rie__Session__c );
                }
            }
        } 
        else if( Trigger.isDelete ) {
            for( rie__Log__c logObj : oldLogs ){
                if( logObj.rie__Session__c != Null ){
                    parentSessionIds.add( logObj.rie__Session__c );
                }
            } 
        }
        
        
        if( parentSessionIds.size() > 0 ) {
            
            Map<Id, List<rie__Registered_Session__c>> mapSessionIdToRegSessions = new Map<Id, List<rie__Registered_Session__c>>();
            Set<Id> allSessionIds = new Set<Id>();
            Set<Id> parentRegistrationIds = new Set<Id>();
            
            for( rie__Registered_Session__c regSessionObj : [ SELECT Id, rie__Registration__c, rie__Session__c 
                                                           FROM rie__Registered_Session__c 
                                                           WHERE rie__Session__c IN: parentSessionIds ] ){
                
                allSessionIds.add( regSessionObj.rie__Session__c ); 
                parentRegistrationIds.add( regSessionObj.rie__Registration__c );
                
                List<rie__Registered_Session__c> regSessions = new List<rie__Registered_Session__c>();
                if( mapSessionIdToRegSessions.containsKey( regSessionObj.rie__Session__c )) {
                    regSessions = mapSessionIdToRegSessions.get( regSessionObj.rie__Session__c );
                }
                regSessions.add( regSessionObj );
                mapSessionIdToRegSessions.put( regSessionObj.rie__Registration__c, regSessions );
            }
            
            
            if( parentRegistrationIds.size() > 0 ){
                
                for( Id registrationId : parentRegistrationIds ) {
                    rie__Registration__c regObj = new rie__Registration__c( Id = registrationId ); 
                    regObj.rie__Session_Counter__c = 0;
                    mapParentRegToUpdateForSessions.put( regObj.Id, regObj );
                }
                
                List<AggregateResult> aggrList = [ SELECT rie__Session__c sessionId,  
                                                   COUNT(Id) cnt
                                                   FROM rie__Log__c
                                                   WHERE rie__Session__c IN :allSessionIds
                                                   GROUP BY rie__Session__c ];
                
                for( AggregateResult ag :  aggrList ){
                    
                    Id parentSessionId = (String)ag.get('sessionId');
                    // get all related registered sessions
                    List<rie__Registered_Session__c> regSessions = mapSessionIdToRegSessions.get( parentSessionId );
                    system.debug('regSessions'+regSessions);
 
                  for( rie__Registered_Session__c regSessionObj : regSessions ) {
                        rie__Registration__c reg = new rie__Registration__c( Id = regSessionObj.Registration__c );
                        rie__Registration__c registrationObjToUpdate = mapParentRegToUpdateForSessions.get( reg.Id );
                        if( registrationObjToUpdate == null ) {
                           registrationObjToUpdate = reg;
                        }
                        registrationObjToUpdate.rie__Session_Counter__c = registrationObjToUpdate.rie__Session_Counter__c == null ? 0 : registrationObjToUpdate.rie__Session_Counter__c;
                        registrationObjToUpdate.rie__Session_Counter__c =+ (Decimal)ag.get( 'cnt' );
                        mapParentRegToUpdateForSessions.put( registrationObjToUpdate.Id, registrationObjToUpdate ); 
                    } 
                }
            }
         }
    }
    
}
My test class is given below:-
@istest
private class Trigger_LogTest {
   
    static testmethod void rollupForSessionTest(){
               Test.setMock(HttpCalloutMock.class, new Mock());
               string requestBody = 'test';
        String requestEndpoint =ZoomJWTAuthentication.getZoomCredentials().rie__Zoom_URL__c + 'users/' +'/meetings';
        String requestMethod = 'POST';
        httpResponse res =   ZoomCalloutService.postCallout(requestMethod, requestEndpoint, requestBody);
        CreateWebinarJSONParser cwp = CreateWebinarJSONParser.parse(res.getBody());
        
        rie__Zoom_User__c z = new rie__Zoom_User__c();
        z.rie__Email_Id__c = 'real@gmail.com';
        z.rie__FirstName__c = 'Real';
        z.rie__LastName__c = 'Int';
        z.rie__User_Id__c = cwp.host_id;
        z.rie__User_Type__c ='Licensed';
        insert z;
       
        Contact c = new Contact();
        c.LastName = 'steven';
        c.rie__Zoom_User__c = z.id;
        insert c;
        
        rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-07:00) Pacific Daylight Time (America/Los_Angeles)';
        insert evt;
        
        rie__Session__c s = new rie__Session__c();
        s.rie__Session_Status__c = 'Ready to Publish';
        s.rie__Date_Time__c = System.today();
        s.rie__Session_Organizer__c = c.id;
        s.rie__Session_End_Time__c = System.today();
        s.rie__Meeting_ID__c = '86023030645' ;
        s.rie__Meeting_Password__c = '53b347b2a5';
        s.rie__Event__c =  evt.id;
        insert s;
        Session__c st  =  [select rie__Zoom_URL__c,Name,rie__Meeting_Password__c, 
                           rie__Allow_Auto_Recording__c, rie__Zoom_User__c,
                           rie__Webinar_Creation_Allowed__c,rie__Session_End_Time__c,
                           rie__Date_Time__c,rie__Event_Time_Zone__c,rie__ZoomUserId__c 
                           from rie__Session__c 
                           where id =: s.id];
        
         
         system.debug('st'+st);
        rie__Speaker__c spkr = new rie__Speaker__c();
        spkr.rie__Event__c = evt.id;
        insert spkr;
         system.debug('spkr'+spkr);
        
        rie__Registration__c attendee = new rie__Registration__c();
        attendee.rie__Event__c = evt.id;
        insert attendee;
         system.debug('attendee'+attendee);
        
        rie__Registered_Session__c regSessionObj = new rie__Registered_Session__c();
        regSessionObj.rie__Session__c = s.id;
        regSessionObj.rie__Registration__c = attendee.id;
        insert regSessionObj;
        
         system.debug('regSessionObj'+regSessionObj);
        
        rie__Log__c logs = new rie__Log__c();
        logs.rie__Event__c = evt.id;
         logs.rie__Session__c = st.id;
        logs.rie__Speaker__c = spkr.id;
        logs.rie__Attendee__c = attendee.id;
        insert logs;
        system.debug('log'+logs);
        
        test.startTest();
        delete logs;
        test.stopTest();
    }
   
}
Hi All,
          I have a trigger helper class give below:-
public without sharing class SessionTriggerHelper {
   
    public static List<Session__c> newSession = new List<Session__c>();
    public static List<Session__c> oldSession = new List<Session__c>(); 
    public static Map<Id, Session__c> newMapSession =new Map<Id, Session__c>();
    public static Map<Id, Session__c> oldMapSession =new Map<Id, Session__c>();
    
    public static boolean runTrigger = TRUE;
    
     
    public static void createWebinarAndMeeting(){
        for(Session__c ss : newSession){
            if(ss.rie__Zoom_URL__c == Null && ss.rie__Session_Status__c == 'Ready to Publish'){
                String zoomUserId = '';
                
                if(ss.rie__ZoomUserId__c != Null && ss.rie__Webinar_Creation_Allowed__c){
                   zoomUserId = ss.rie__ZoomUserId__c; 
                }else{
                   zoomUserId = Label.Zoom_User_Id; 
                }
                
                if(ss.rie__Session_Type__c == 'Meeting'){
                   createMeeting(ss.rie__ZoomUserId__c, ss); 
                }else{
                   createWebinar(zoomUserId, ss); 
                }
                
                
            }
        }
    }
    
    
    
    public static void createWebinar(String zoomUserId, Session__c ss){
        Map<String, Object> reqMap = new Map<String, Object>();
        Map<String, Object> recurrenceMap = new Map<String, Object>();
        recurrenceMap.put('type' , 1);
        recurrenceMap.put('repeat_interval' , 1);
        recurrenceMap.put('end_date_time' , ss.rie__Session_End_Time__c);
        
        Map<String, Object> settingMap = new Map<String, Object>();
        settingMap.put('host_video' , 'true');
        settingMap.put('panelists_video' , 'true');
        settingMap.put('practice_session' , 'true');
        settingMap.put('hd_video' , 'true');
        settingMap.put('approval_type' , 0);
        settingMap.put('registration_type' , 2);
        settingMap.put('audio' , 'both');
        settingMap.put('auto_recording' , 'none');
        settingMap.put('enforce_login' , 'false');
        settingMap.put('close_registration' , 'true');
        settingMap.put('show_share_button' , 'true');
        settingMap.put('allow_multiple_devices' , 'false');
        settingMap.put('registrants_email_notification' , 'true');
        
        reqMap.put('topic', ss.Name);
        reqMap.put('type', 5);
        DateTime startTime = ss.rie__Date_Time__c.addHours(-7);
        Map<String, String> timeZoneMap = getDifferentTimeZones(ss.rie__Event_Time_Zone__c);

        Integer timeZoneHour = Integer.valueOf(timeZoneMap.get('timeZoneHour'));
        Integer timeZoneMinute = Integer.valueOf(timeZoneMap.get('timeZoneMinute'));
        reqMap.put('start_time', startTime.addHours(timeZoneHour).addMinutes(timeZoneMinute));
        if(ss.rie__Date_Time__c != Null && ss.rie__Session_End_Time__c != Null){
            Double st = ss.rie__Session_End_Time__c.getTime() - ss.rie__Date_Time__c.getTime();
            st = st/(1000*60);
            reqMap.put('duration', Integer.valueOf(st));
        }
        
        reqMap.put('timezone', timeZoneMap.get('timezoneName'));
        if(ss.rie__Meeting_Password__c != Null){
            reqMap.put('password', ss.rie__Meeting_Password__c);
        }else{
            Integer len = 10;
            Blob blobkey = crypto.generateAesKey(128);
            String key = EncodingUtil.convertToHex(blobkey);
            String pwd = key.substring(0,len);
            reqMap.put('password', pwd);
        }
        reqMap.put('agenda', ss.Name);
        reqMap.put('recurrence',recurrenceMap);
        reqMap.put('settings', settingMap);
        String  reqBody = JSON.serialize(reqMap);
        
        ZoomService.createWebinar(reqBody, zoomUserId, ss.Id);
    }
    
    public static void createMeeting(String zoomUserId, Session__c ss){
        Map<String, Object> reqMap = new Map<String, Object>();
        Map<String, Object> recurrenceMap = new Map<String, Object>();
        recurrenceMap.put('type' , 3);
        recurrenceMap.put('repeat_interval' , 1);
        recurrenceMap.put('weekly_days' , '4');
        recurrenceMap.put('monthly_day' , 10);
        recurrenceMap.put('monthly_week' , 2);
        recurrenceMap.put('end_date_time' , ss.rie__Session_End_Time__c);
        
        Map<String, Object> settingMap = new Map<String, Object>();
        settingMap.put('host_video' , false);
        settingMap.put('participant_video' , false);
        settingMap.put('cn_meeting' , false);
        settingMap.put('in_meeting' , false);
        settingMap.put('join_before_host' , true);
        settingMap.put('mute_upon_entry' , false);
        settingMap.put('watermark' , false);
        settingMap.put('waiting_room' , false);
        settingMap.put('use_pmi' , false);
        settingMap.put('approval_type' , 0);
        settingMap.put('registration_type' , 2);
        settingMap.put('audio' , 'both');
        settingMap.put('auto_recording' , 'none');
        
        reqMap.put('topic', ss.Name);
        reqMap.put('type', 3);
        DateTime startTime = ss.rie__Date_Time__c.addHours(-7);
        Map<String, String> timeZoneMap = getDifferentTimeZones(ss.rie__Event_Time_Zone__c);
        Integer timeZoneHour = Integer.valueOf(timeZoneMap.get('timeZoneHour'));
        Integer timeZoneMinute = Integer.valueOf(timeZoneMap.get('timeZoneMinute'));
        reqMap.put('start_time', startTime.addHours(timeZoneHour).addMinutes(timeZoneMinute));
        if(ss.rie__Date_Time__c != Null && ss.rie__Session_End_Time__c != Null){
            Double st = ss.rie__Session_End_Time__c.getTime() - ss.rie__Date_Time__c.getTime();
            st = st/(1000*60);
            reqMap.put('duration', Integer.valueOf(st));
        }
        
        reqMap.put('timezone', timeZoneMap.get('timezoneName'));
        if(ss.rie__Meeting_Password__c != Null){
            reqMap.put('password', ss.rie__Meeting_Password__c);
        }else{
            Integer len = 10;
            Blob blobkey = crypto.generateAesKey(128);
            String key = EncodingUtil.convertToHex(blobkey);
            String pwd = key.substring(0,len);
            reqMap.put('password', pwd);
        }
        reqMap.put('agenda', ss.Name);
        reqMap.put('recurrence',recurrenceMap);
        reqMap.put('settings', settingMap);
        reqMap.put('registrants_email_notification', 'true');
        String  reqBody = JSON.serialize(reqMap);
        ZoomService.createMeeting(reqBody, zoomUserId, ss.Id);
    }
    
    public static Map<String, String> getDifferentTimeZones(String eventTimeZone){
        String timezoneName = eventTimeZone.substringAfterLast('(').substringBeforeLast(')');
        String timeZoneTime = eventTimeZone.substringAfter('(GMT').substringBefore(')');
        String timeZoneSign = timeZoneTime.substring(0, 1);
        String timeZoneHour = timeZoneSign + timeZoneTime.substring(1, 3);
        String timeZoneMinute = timeZoneSign + timeZoneTime.substring(4, 6);
        Map<String , String> timeZoneMap = new Map<String, String>();
        timeZoneMap.put('timezoneName',timezoneName);
        timeZoneMap.put('timeZoneHour',timeZoneHour);
        timeZoneMap.put('timeZoneMinute',timeZoneMinute);
        return timeZoneMap;
     }
 }
I have created a test class but i am not gettting enoungh coverage and its failing with null pointer exception on bold lines.
my test class is given below:-
@isTest
private class SessionTriggerHelperTest {
    
    private class Mock implements HttpCalloutMock {
        
        public HTTPResponse respond(HTTPRequest req) {
            
            HTTPResponse res = new HTTPResponse();
            
            res.setStatusCode(200);
            res.setBody('{'+
        '  \"agenda\": \"Test Webinar\",'+
        '  \"created_at\": \"2020-04-15T11:16:58Z\",'+
        '  \"duration\": 60,'+
        '  \"host_id\": \"BhN6PRjkQW-iUc8-8-aTSw\",'+
        '  \"id\": 94298132774,'+
        '  \"join_url\": \"https://zoom.us/j/94298132774?pwd=REZsT1NnOFd5aWhUUDB0cTFRS010dz09\",'+
        '  \"password\": \"avfhfgh\",'+
        '  \"registration_url\": \"https://zoom.us/webinar/register/WN_BRg795wbTHSIOWEnknY5gA\",'+
        '  \"settings\": {'+
        '    \"allow_multiple_devices\": false,'+
        '    \"alternative_hosts\": \"\",'+
        '    \"approval_type\": 0,'+
        '    \"audio\": \"both\",'+
        '    \"auto_recording\": \"none\",'+
        '    \"close_registration\": true,'+
        '    \"contact_email\": \"steve@realintelligence.com\",'+
        '    \"contact_name\": \"Steve Kompolt\",'+
        '    \"enforce_login\": false,'+
        '    \"enforce_login_domains\": \"\",'+
        '    \"global_dial_in_countries\": ['+
        '      \"US\"'+
        '    ],'+
        '    \"global_dial_in_numbers\": ['+
        '      {'+
        '        \"city\": \"Chicago\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 3126266799\",'+
        '        \"type\": \"toll\"'+
        '      },'+
        '      {'+
        '        \"city\": \"New York\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 6465588656\",'+
        '        \"type\": \"toll\"'+
        '      },'+
        '      {'+
        '        \"city\": \"Houston\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 3462487799\",'+
        '        \"type\": \"toll\"'+
        '      },'+
        '      {'+
        '        \"city\": \"San Jose\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 6699009128\",'+
        '        \"type\": \"toll\"'+
        '      },'+
        '      {'+
        '        \"city\": \"\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 2532158782\",'+
        '        \"type\": \"toll\"'+
        '      },'+
        '      {'+
        '        \"city\": \"\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 3017158592\",'+
        '        \"type\": \"toll\"'+
        '      }'+
        '    ],'+
        '    \"hd_video\": true,'+
        '    \"host_video\": true,'+
        '    \"meeting_authentication\": false,'+
        '    \"on_demand\": false,'+
        '    \"panelists_video\": true,'+
        '    \"post_webinar_survey\": false,'+
        '    \"practice_session\": true,'+
        '    \"question_answer\": true,'+
        '    \"registrants_confirmation_email\": true,'+
        '    \"registrants_email_notification\": true,'+
        '    \"registrants_restrict_number\": 0,'+
        '    \"show_share_button\": true'+
        '  },'+
        '  \"start_time\": \"2020-09-20T06:59:00Z\",'+
        '  \"start_url\": \"https://zoom.us/s/94298132774?zak=eyJ6bV9za20iOiJ6bV9vMm0iLCJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJjbGllbnQiLCJ1aWQiOiJCaE42UFJqa1FXLWlVYzgtOC1hVFN3IiwiaXNzIjoid2ViIiwic3R5IjoxMDAsIndjZCI6ImF3MSIsImNsdCI6MCwic3RrIjoicm5JSzZ3VDNsQnh2ODdMQUg0RTFsZU1OOVFwcldNZ2VIMUhzWnRaNXE3NC5CZ1VzZDBWRWFUUk9lVWR1VkVSWGIxbFpWRkZNVGpKUmRsQldhWHBQZG5OT2J6bHFabmR6TVZaUVNtVkRTVDFBWkRZeVpEZ3hOMll3WVdFMk16WTRNalJsWldRd1pETXhZakZoWldJMk1tWTFNR1UyTXpFNU5HVXdNalZrWXpnek56WTFNR05oTUdSbU1EWXdZMll6T0FBTU0wTkNRWFZ2YVZsVE0zTTlBQU5oZHpFIiwiZXhwIjoxNTg2OTU2NjE4LCJpYXQiOjE1ODY5NDk0MTgsImFpZCI6ImtCQnVrUUQwUjRlaE9Lb00wWU80TmciLCJjaWQiOiIifQ.t-ECUWaekV1eRkBwA00XR0ysKz0OHSUagnwT7guXkg8\",'+
        '  \"timezone\": \"America/Los_Angeles\",'+
        '  \"topic\": \"Test Webinar\",'+
        '  \"type\": 5,'+
        '  \"uuid\": \"iTfCvg3iSQW3oFjwObnLog==\"'+
        '}');
            
            return res; 
        }
    }
    
    static testmethod void createWebinarTest(){
        Test.setMock(HttpCalloutMock.class, new Mock());
        
        rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-05:00) Eastern Standard Time (America/New_York)';
        insert evt;
        
        Session__c s = new Session__c();
        s.rie__Session_Status__c = 'Ready to Publish';
        s.rie__Date_Time__c = System.today();
        s.rie__Session_End_Time__c = System.today();
        s.rie__Event__c =  evt.id;
        insert s;
        Session__c st  =  [select rie__Zoom_URL__c,rie__Session_End_Time__c,rie__Date_Time__c,rie__Event_Time_Zone__c,rie__ZoomUserId__c 
                           from Session__c 
                           where id =: s.id];
       
        Test.startTest();
        string userid = st.rie__ZoomUserId__c;
        String eventTimeZone = st.rie__Event_Time_Zone__c;
        SessionTriggerhelper.getDifferentTimeZones(eventTimeZone);
        SessionTriggerhelper.createMeeting(userid,s);
        SessionTriggerhelper.createWebinar(userid,s);
         SessionTriggerhelper.createWebinarAndMeeting();

         Test.stopTest();
    }
    
    static testmethod void createMeetingTest(){
        Test.setMock(HttpCalloutMock.class, new Mock());
        
        rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-05:00) Eastern Standard Time (America/New_York)';
        insert evt;
        
        Session__c s = new Session__c();
        s.rie__Session_Status__c = 'Ready to Publish';
        s.rie__Date_Time__c = System.today();
        s.rie__Event__c =  evt.id;
        insert s;
        Session__c st  =  [select rie__Zoom_URL__c,rie__Date_Time__c,rie__Event_Time_Zone__c,rie__ZoomUserId__c 
                           from Session__c 
                           where id =: s.id];
       
        Test.startTest();
        string userid = st.rie__ZoomUserId__c;
        String eventTimeZone = st.rie__Event_Time_Zone__c;
        SessionTriggerhelper.getDifferentTimeZones(eventTimeZone);
        SessionTriggerhelper.createWebinarAndMeeting();
        SessionTriggerhelper.createWebinar(userid,s);
        SessionTriggerhelper.createMeeting(userid,s);
         Test.stopTest();
    }
}
Can anyone help me with this test class?
Hi All,
          I have created a test class for a class but its failing and giving me error:- System.CalloutException: You have uncommitted work pending. Please commit or rollback before calling out.
my class is given below:-

global without sharing class ZoomService {
    @Future(callout=true)
    public static void createWebinar(String requestBody, String userId, Id sessionId){
        SessionTriggerHelper.runTrigger = false;
        String requestEndpoint =ZoomJWTAuthentication.getZoomCredentials().rie__Zoom_URL__c + 'users/'+userId+'/webinars';
        String requestMethod = 'POST';
        
        httpResponse res = ZoomCalloutService.postCallout(requestMethod, requestEndpoint, requestBody);
        CreateWebinarJSONParser cwp = CreateWebinarJSONParser.parse(res.getBody());
        Session__c ss = [Select id, rie__Zoom_URL__c, rie__Meeting_ID__c, 
                         rie__Meeting_Password__c, rie__Session_Type__c
                         from Session__c 
                         where Id =: sessionId];
        ss.rie__Zoom_URL__c = cwp.join_url;
        ss.rie__Meeting_ID__c = String.valueOf(cwp.Id);
        ss.rie__Meeting_Password__c = cwp.password;
        ss.rie__Session_Type__c = 'Webinar';
        update ss; 
        
        //System.debug(res.getStatusCode());
    }
    
    @Future(callout=true)
    public static void createUser(String requestBody){
        String requestEndpoint = ZoomJWTAuthentication.getZoomCredentials().rie__Zoom_URL__c + 'users';
        String requestMethod = 'POST';
        Map<String, Object> reqMap = new Map<String, Object>();
        reqMap.put('action', 'create');
        Map<String, Object> userInfo = new Map<String, Object>();
        userInfo.put('email', 'absinghrathore127@gmail.com');
        userInfo.put('type', '1');
        userInfo.put('first_name', 'abhimanyu');
        userInfo.put('last_name', 'singh');
        reqMap.put('user_info', userInfo);
        String  reqBody = JSON.serialize(reqMap);
        
        httpResponse res = ZoomCalloutService.postCallout(requestMethod, requestEndpoint, reqBody);
        System.debug(res.getStatus());
        System.debug(res.getBody());
    }
    
    @Future(callout=true)
    public static void listUsers( String emailId, Id zoomUserRecordId){
        String requestEndpoint = ZoomJWTAuthentication.getZoomCredentials().rie__Zoom_URL__c + 'users';
        String requestMethod = 'GET';
        
        httpResponse res = ZoomCalloutService.getCallout(requestMethod, requestEndpoint);
        if(res.getStatusCode() == 200){
            GetUsersJSONParser gu = GetUsersJSONParser.parse(res.getBody());
            List<GetUsersJSONParser.users>  userList= gu.users;
            String userId = '';
            if(!userList.isEmpty()){
                for(GetUsersJSONParser.users u : userList){
                    if(u.email != Null && u.email == emailId){
                       userId = u.id;
                       break; 
                    }
                }
                rie__Zoom_User__c zoomUser = [Select id from rie__Zoom_User__c where Id =: zoomUserRecordId];
                if(userId != Null){
                    zoomUser.rie__User_Id__c = userId;
                }
                update zoomUser;
            }
            
        }
        
    }
    
    //@Future(callout=true)
    webservice static String getMeetingRecording(String meetingId, Id recId){
        String requestEndpoint = ZoomJWTAuthentication.getZoomCredentials().rie__Zoom_URL__c + 'meetings/'+meetingId+'/recordings';
        String requestMethod = 'GET';
        
        httpResponse res = ZoomCalloutService.getCallout(requestMethod, requestEndpoint);
        if(res.getStatusCode() == 200){
            GetRecordingJSONParser getRecordingJSONParser = GetRecordingJSONParser.parse(res.getBody());
            Session__c ss = [Select id, rie__Zoom_URL__c, rie__Meeting_ID__c, 
                             rie__Zoom_Recording_URL__c
                             from Session__c 
                             where Id =: recId];
            ss.rie__Zoom_Recording_URL__c = getRecordingJSONParser.share_url;
            update ss;
            return 'Success';  
        }else{
            return 'There is no recording for this meeting ';
        }
    }
    
}
my test class is given below:-
@isTest
private class ZoomServiceTest {
    public static Integer RESPONSE_CODE = 200;
    private class Mock implements HttpCalloutMock {
        
        public HTTPResponse respond(HTTPRequest req) {
            
            HTTPResponse res = new HTTPResponse();
            
            res.setStatusCode(200);
            res.setBody('{"topic": "Test Webinar","type": 5,"start_time": "2020-04-20T06:59:00Z","duration": 60,"timezone": "America/Los_Angeles","password": "avfhfgh","agenda": "Test Webinar","recurrence": {"type": 1,"repeat_interval": 1,"end_date_time": "2020-04-20T06:59:00Z"},"settings": {"host_video": true,"panelists_video": true,"practice_session": true,"hd_video": true,"approval_type": 0,"registration_type": "integer",'+
                        +'"audio": "both","auto_recording": "none","enforce_login": false,"enforce_login_domains": "","alternative_hosts": "","close_registration": true,"show_share_button": true,"allow_multiple_devices": false,"registrants_email_notification": true}}');
            
            return res;
        }
    }
    
    
    static testmethod void createWebinarTest() {
        
        Test.setMock(HttpCalloutMock.class, new Mock());
        Test.startTest();
        
        rie__Event__c evt = new rie__Event__c();
        insert evt;
        
        Session__c ss = new Session__c();
        ss.name = 'Test webinar'; 
        ss.rie__Event__c = evt.Id;
        insert ss;
        
         ZoomService.createWebinar('','',ss.Id);
        //ZoomService.createUser(res);
       ZoomService.listUsers('',ss.id);
        ZoomService.getMeetingRecording('',ss.id);
        Test.stopTest();
    }
}
Can anyone help me with this error?
Hi All,
 I have a trigger and helper class. i want to write test class for it.
My helper class is given below:-
public without sharing class SessionTriggerHelper {
   
    public static List<Session__c> newSession = new List<Session__c>();
    public static List<Session__c> oldSession = new List<Session__c>(); 
    public static Map<Id, Session__c> newMapSession =new Map<Id, Session__c>();
    public static Map<Id, Session__c> oldMapSession =new Map<Id, Session__c>();
    
    public static boolean runTrigger = TRUE;
    
    
    public static void createWebinar(){
        for(Session__c ss : newSession){
            if(ss.rie__Zoom_URL__c == Null && ss.rie__Session_Status__c == 'Ready to Publish'){
                String zoomUserId = '';
                
                if(ss.rie__ZoomUserId__c != Null){
                   zoomUserId = ss.rie__ZoomUserId__c; 
                }else{
                   zoomUserId = 'BhN6PRjkQW-iUc8-8-aTSw'; 
                }
                
                Map<String, Object> reqMap = new Map<String, Object>();
                Map<String, Object> recurrenceMap = new Map<String, Object>();
                recurrenceMap.put('type' , 1);
                recurrenceMap.put('repeat_interval' , 1);
                recurrenceMap.put('end_date_time' , ss.rie__Session_End_Time__c);
                
                Map<String, Object> settingMap = new Map<String, Object>();
                settingMap.put('host_video' , 'true');
                settingMap.put('panelists_video' , 'true');
                settingMap.put('practice_session' , 'true');
                settingMap.put('hd_video' , 'true');
                settingMap.put('approval_type' , 0);
                settingMap.put('registration_type' , 2);
                settingMap.put('audio' , 'both');
                settingMap.put('auto_recording' , 'none');
                settingMap.put('enforce_login' , 'false');
                settingMap.put('close_registration' , 'true');
                settingMap.put('show_share_button' , 'true');
                settingMap.put('allow_multiple_devices' , 'false');
                settingMap.put('registrants_email_notification' , 'true');
                                                                                                                    
                reqMap.put('topic', ss.Name);
                reqMap.put('type', 5);
                reqMap.put('start_time', ss.rie__Date_Time__c);
                reqMap.put('duration', '60');
                reqMap.put('timezone', 'America/Los_Angeles');
                reqMap.put('password', ss.rie__Meeting_Password__c);
                reqMap.put('agenda', 'Test Webinar');
                reqMap.put('recurrence',recurrenceMap);
                reqMap.put('settings', settingMap);
                String  reqBody = JSON.serialize(reqMap);
                
                ZoomService.createWebinar(reqBody, zoomUserId, ss.Id);
            }
        }
    }
  }
Can anyone help me with this test class? How to write test class for this helper?
Hello All,
                I want to create a test class for a class in which I used callouts.
Can anyone help me how to write test class for API?
my class is given below:-
public without sharing class ZoomCalloutService {
        //Get Request
    public static httpResponse getCallout(String httpMethod, String endpoint){
        httpRequest req = new httpRequest();
        req.setMethod(httpMethod);
        req.setEndpoint(endpoint);
        req.setHeader('Content-type', 'application/json');
        if(ZoomJWTAuthentication.authToken != Null){
            req.setHeader('Authorization','Bearer '+ZoomJWTAuthentication.authToken);
        }else{
            req.setHeader('Authorization','Bearer ' +getAccessToken());
        }
        System.debug(ZoomJWTAuthentication.authToken);    
        req.setTimeout(120000);
        httpResponse res = new http().send(req);
        if(res.getStatusCode() == 401){
            req.setHeader('Authorization','Bearer '+getAccessToken());
            httpResponse res1 = new http().send(req);
            return res1;
        }
        return res;
        
    }
    
    //Post Request
    public static httpResponse postCallout(String httpMethod, String endpoint, String body){
        httpRequest req = new httpRequest();
        req.setMethod(httpMethod);
        req.setEndpoint(endpoint);
        req.setBody(body);
        req.setHeader('Content-type', 'application/json');
        if(ZoomJWTAuthentication.authToken != Null){
            req.setHeader('Authorization','Bearer '+ZoomJWTAuthentication.authToken);
        }else{
            req.setHeader('Authorization','Bearer ' +getAccessToken());
        }
        System.debug(ZoomJWTAuthentication.authToken);    
        req.setTimeout(120000);
        httpResponse res = new http().send(req);
        if(res.getStatusCode() == 401){
            req.setHeader('Authorization','Bearer '+getAccessToken());
            httpResponse res1 = new http().send(req);
            return res1;
        }
        return res;
        
    }
    
    public static String getAccessToken(){
        return ZoomJWTAuthentication.createTokenFromJWTAuth();
    }
}
Can anyone help me with the test class?
Hi All,
         I have written a test class for trigger helper. Can anyone help me with the test coverage as it's not covering 75 %?
 My helper class is given below:-

// Helper class for Trigger_Registration
public without sharing class RegistrationTriggerHelper {

    public static List<rie__Registration__c> newRegistration = new List<rie__Registration__c>();
    public static List<rie__Registration__c> oldRegistration = new List<rie__Registration__c>();    
    public static Map<Id, rie__Registration__c> newMapRegistration = new Map<Id, rie__Registration__c>();
    public static Map<Id, rie__Registration__c> oldMapRegistration = new Map<Id, rie__Registration__c>(); 
    
    public static boolean runTrigger = TRUE;
    
    // method to link the contact and registration
    public static void linkContact(){
    
        List<rie__Registration__c> applicableRegistrations = new List<rie__Registration__c>();
        Set<String> emails = new Set<String>();
        for( rie__Registration__c regObj : newRegistration ) {
            if( regObj.rie__Email__c != Null ) {
               emails.add( regObj.rie__Email__c ); 
               applicableRegistrations.add( regObj ); 
            }
        }
        
        if( applicableRegistrations.size() >  0 ) {
            Map<String, Contact> mapEmailToContact = new Map<String, Contact>();    
            List<Contact> contacts = new List<Contact>([Select Id, Email 
                                                                   From Contact 
                                                                   Where Email IN :emails
                                                                   Order By CreatedDate DESC
                                                                   ]);
            if( contacts != Null && contacts.size() > 0 ){
                for( Contact con : contacts ){
                    String mapKey = con.Email.toLowerCase();
                    if( !mapEmailToContact.containsKey( mapKey )) {
                        mapEmailToContact.put( mapKey, con );  
                    }
                }
            }
        
            List<rie__Registration__c> registrationNeedsNewContact = new List<rie__Registration__c>();
            Map<Id, rie__Registration__c> registrationToUpdate = new Map<Id, rie__Registration__c>();
            Map<Id, Contact> contactsToUpsert = new Map<Id, Contact>();
            
            for(rie__Registration__c regObj : applicableRegistrations){
                String emailLowerCase = regObj.rie__Email__c.toLowerCase();
                if( mapEmailToContact.containsKey( emailLowerCase )){
                    rie__Registration__c regObjToUpdate = new rie__Registration__c( Id = regObj.Id );
                    regObjToUpdate.rie__Contact__c = mapEmailToContact.get(emailLowerCase).Id; 
                    registrationToUpdate.put( regObjToUpdate.Id, regObjToUpdate );
                    
                    Contact conToUpdate  = new Contact( Id = regObjToUpdate.rie__Contact__c );
                    conToUpdate.FMS_2019_Registration__c = regObjToUpdate.Id;
                    contactsToUpsert.put( regObjToUpdate.Id, conToUpdate );
                }
                else {
                    registrationNeedsNewContact.add( regObj );
                }
            }
            
            List<Contact> contactToInsert = new List<Contact>();
            for(rie__Registration__c regObj : registrationNeedsNewContact ){
                Contact con = new Contact();
                con.LastName = regObj.rie__Last_Name__c;
                con.Email = regObj.rie__Email__c;
                con.FMS_2019_Registration__c = regObj.Id;
                contactsToUpsert.put(regObj.Id, con);
                contactToInsert.add( con );
            }
            
            if( contactsToUpsert.size() > 0 ) {
                upsert contactsToUpsert.values();
                for( Contact con : contactToInsert ) {
                    rie__Registration__c regObjToUpdate = new rie__Registration__c( Id = con.FMS_2019_Registration__c );
                    regObjToUpdate.rie__Contact__c = con.Id; 
                    registrationToUpdate.put( regObjToUpdate.Id, regObjToUpdate );
                }
            }
            
            if( registrationToUpdate.size() > 0 ) {
                RegistrationTriggerHelper.runTrigger = false;
                update registrationToUpdate.values();
                RegistrationTriggerHelper.runTrigger = true;
            }
        }
    }    
}
Test class is given below:-
//Test class for RegisterTriggerHelper
@isTest
public class RegistrationTriggerHelperTest {
    public static testMethod void linkContactTest(){
        Contact con = new Contact(LastName = 'Scot');
        insert con;
        rie__Event__c ev = new rie__Event__c();
         
        Insert ev;
        rie__Registration__c regObj  = new rie__Registration__c();
        regObj.rie__Event__c =   ev.id;
        insert regObj;
        
    }
}
Please help me with the coverage.
 
Hi All,
          I have a test class but it's not covering the part in which I am showing the error message. Can anyone help me with the code coverage,
and let me know what am I missing in test class.
My helper class and Test class is given below :-

public  without sharing class OpportunityLineItemTriggerHelper {
    
    public static List<OpportunityLineItem> newOpportunityLineItem = new List<OpportunityLineItem>();
    public static List<OpportunityLineItem> oldOpportunityLineItem = new List<OpportunityLineItem>();
    public static Map<Id, OpportunityLineItem> newMapOpportunityLineItem = new Map<Id, OpportunityLineItem>();
    public static Map<Id, OpportunityLineItem> oldMapOpportunityLineItem = new Map<Id, OpportunityLineItem>(); 
     public static void validateServiceAgreementProduct(){
        
        Map<Id, Product2> mapProductIdToProduct = new Map<Id, Product2>(
                                                                        [ SELECT Id, Name, Family
                                                                           FROM Product2 
                                                                           WHERE Family LIKE 'SA - %'
                                                                           OR Family LIKE 'Service - %'
                                                                        ]
                                                                        );
        Set<Id> parentOppIds = new Set<Id>();
        Set<Id> serviceProductIds = new Set<Id>();
        List<OpportunityLineItem> serviceProductLines = new List<OpportunityLineItem>();
        for( OpportunityLineItem oppLine : newOpportunityLineItem ){
            if( mapProductIdToProduct.containsKey( oppLine.Product2Id ) ){
                parentOppIds.add( oppLine.opportunityId );
                serviceProductLines.add( oppLine );
                serviceProductIds.add( oppLine.Product2Id );
            }
        }
        
        Map<Id, Opportunity> oppMap = new Map<Id, Opportunity>( [ SELECT Id, Name, 
                                                                 ( SELECT Id, Name, Product2Id 
                                                                   FROM OpportunityLineItems 
                                                                   Where Product2Id not in :serviceProductIds
                                                                 )
                                                                 FROM Opportunity
                                                                 WHERE Id IN: parentOppIds ] 
                                                               );
                                                               
        Map<Id, Set<Id>> mapOppIdToHardwareProductIds = new Map<Id, Set<Id>>();
        for( Opportunity opp : oppMap.values() ) {
            Set<Id> setHarwareProductIds = new Set<Id>();
            for( OpportunityLineItem opli : opp.OpportunityLineItems ) {
                setHarwareProductIds.add( opli.Product2Id );
            }
            mapOppIdToHardwareProductIds.put( opp.Id, setHarwareProductIds );
        }
        
        Map<Id, Set<Id>> mapServicesProductIDToHardwareProductIds = new Map<Id, Set<Id>>();
        for( SA_Junction__c sJunction : [ SELECT Id, Hardware_Product__c, 
                                          Services_Product__c 
                                          FROM SA_Junction__c 
                                          Where Services_Product__c in :serviceProductIds
                                         ] 
                                         ){
            Set<Id> hardwareProductIds = mapServicesProductIDToHardwareProductIds.get( sJunction.Services_Product__c );
            hardwareProductIds = hardwareProductIds == null ? new Set<Id>() : hardwareProductIds;
            hardwareProductIds.add( sJunction.Hardware_Product__c );                             
            mapServicesProductIDToHardwareProductIds.put( sJunction.Services_Product__c, hardwareProductIds );                                        
        }
        
        for( OpportunityLineItem oppLine : serviceProductLines ){
            Set<Id> actualHardwareProductIdsOnOpp = mapOppIdToHardwareProductIds.get( oppLine.OpportunityId );
            Set<Id> expectedHardwareProductIds = mapServicesProductIDToHardwareProductIds.get( oppLine.Product2Id );
            if( expectedHardwareProductIds != null && expectedHardwareProductIds.size() > 0 
                && actualHardwareProductIdsOnOpp != null && actualHardwareProductIdsOnOpp.size() > 0 ) {
                Boolean hasExpectedHardware = false;
                for( Id hardwareProdId : actualHardwareProductIdsOnOpp ) {
                    if( expectedHardwareProductIds.contains( hardwareProdId )) {
                        hasExpectedHardware = true;
                        break;  
                    }
                }
                if( !hasExpectedHardware ) {  
                    oppLine.addError('You need to select the correct agreement based on hardware products.'); 
                }
            }
        }

    }
}
how to cover bold part?
Test class for trigger helper:-
@istest

private class Trigger_OpportunityLineItemTest {
static testmethod void validateServiceAgreementProductTest(){
        Account accTest = new Account( Name = 'Test Account' );
        insert accTest;
        
        Opportunity oppTest = new Opportunity( Name = 'Test Opportunity',
                                              StageName = 'Working',
                                              CloseDate = System.today(),
                                              AccountId = accTest.Id );
        insert oppTest;
        
        Product2 prod = new Product2( Name ='EV - PM1H0000BD',
                                     isActive = TRUE,
                                     Family = ' Printers' );
        insert prod;
        
        PricebookEntry pbe = new PricebookEntry( UnitPrice = 10,
                                                Product2Id = prod.Id,
                                                Pricebook2Id = Test.getStandardPricebookId(),
                                                isActive = TRUE, 
                                                UseStandardPrice = FALSE );
        insert pbe;
        
        
        Product2 prod1 = new Product2( Name ='Service Agreement - Full - Primacy Dual',
                                      isActive = TRUE,
                                      Family = ' SA - Hardware' );
        insert prod1;
        
        PricebookEntry pb = new PricebookEntry( UnitPrice = 20,
                                               Product2Id = prod1.Id,
                                               Pricebook2Id = Test.getStandardPricebookId(),
                                               isActive = TRUE, 
                                               UseStandardPrice = FALSE );
        insert pb;
        
        OpportunityLineItem oppLine = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                              Quantity = 2,
                                                              UnitPrice = 10,
                                                              Product2Id = prod.id,
                                                              PriceBookEntryId = pbe.Id
                                                             );
        insert oppLine;
        
        OpportunityLineItem oppLine1 = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                               Quantity = 2,
                                                               UnitPrice = 10,
                                                               Product2Id = prod1.id,
                                                               PriceBookEntryId = pb.Id
                                                              );
        insert oppLine1;
        
        OpportunityLineItem Oli = [select Name,Product2.Name
                                   from OpportunityLineItem 
                                   where OpportunityId =: oppTest.Id AND Product2Id =: prod.id ];
        System.assertEquals('EV - PM1H0000BD', Oli.Product2.Name );
    }
    
    static testmethod void validateServiceAgreementProductTestError(){
        Account accTest = new Account( Name = 'Test Account' );
        insert accTest;
        
        Opportunity oppTest = new Opportunity( Name = 'Test Opportunity',
                                              StageName = 'Working',
                                              CloseDate = System.today(),
                                              AccountId = accTest.Id );
        insert oppTest;
        
        Product2 prod = new Product2( Name ='EV - PM1H0000BD',
                                     isActive = TRUE,
                                     Family = 'Printers' );
        insert prod;
        
        PricebookEntry pbe = new PricebookEntry( UnitPrice = 10,
                                                Product2Id = prod.Id,
                                                Pricebook2Id = Test.getStandardPricebookId(),
                                                isActive = TRUE, 
                                                UseStandardPrice = FALSE );
        insert pbe;
        
        Product2 prod1 = new Product2( Name ='Service Agreement - Full - SD260',
                                      isActive = TRUE,
                                      Family = 'SA - Hardware' );
        insert prod1;
        
        PricebookEntry pb = new PricebookEntry( UnitPrice = 20,
                                               Product2Id = prod1.Id,
                                               Pricebook2Id = Test.getStandardPricebookId(),
                                               isActive = TRUE, 
                                               UseStandardPrice = FALSE );
        insert pb;
        
        SA_Junction__c SA = new SA_Junction__c();
        SA.Hardware_Product__c =  prod.id;
        SA.Services_Product__c =  prod1.id;
        insert SA;
        
        OpportunityLineItem oppLine = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                              Quantity = 2,
                                                              UnitPrice = 10,
                                                              Product2Id = prod.id,
                                                              PriceBookEntryId = pbe.Id
                                                             );
        insert oppLine;
        
        OpportunityLineItem oppLine1 = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                               Quantity = 2,
                                                               UnitPrice = 10,
                                                               Product2Id = prod1.id,
                                                               PriceBookEntryId = pbe.Id
                                                              );
         insert oppLine1;
        try{
             OpportunityLineItem Oli = [select Name,Product2.Name
                                   from OpportunityLineItem 
                                   where OpportunityId =: oppTest.Id AND Product2Id =: prod1.id ];
           System.assertEquals('Service Agreement - Full - SD260',oppLine1.Product2.Name);
             
        }
        catch(Exception e) {
            Boolean expectedExceptionThrown =  e.getMessage().contains('You need to select the correct agreement based on hardware products.') ? true : false;
            System.AssertEquals(expectedExceptionThrown, false);
            
        }
        
    }
}
Hi All,
         I have a trigger helper class for trigger in which i am trying to do a Test use case in test class given below:-
Test case:-
1. Create an Account.
2. Create an Opportunity for the above Account.
3. Add one Hardware Products on Opportunity
4. Add one service product which does not have a relationship with this hardware product in SA Junction   data
5. Verify that the validation message is shown.
My helper class is given below:-
public  without sharing class OpportunityLineItemTriggerHelper {
    
    public static List<OpportunityLineItem> newOpportunityLineItem = new List<OpportunityLineItem>();
    public static List<OpportunityLineItem> oldOpportunityLineItem = new List<OpportunityLineItem>();
    public static Map<Id, OpportunityLineItem> newMapOpportunityLineItem = new Map<Id, OpportunityLineItem>();
    public static Map<Id, OpportunityLineItem> oldMapOpportunityLineItem = new Map<Id, OpportunityLineItem>(); 
     public static void validateServiceAgreementProduct(){
        
        Map<Id, Product2> mapProductIdToProduct = new Map<Id, Product2>(
                                                                        [ SELECT Id, Name, Family
                                                                           FROM Product2 
                                                                           WHERE Family LIKE 'SA - %'
                                                                           OR Family LIKE 'Service - %'
                                                                        ]
                                                                        );
        Set<Id> parentOppIds = new Set<Id>();
        Set<Id> serviceProductIds = new Set<Id>();
        List<OpportunityLineItem> serviceProductLines = new List<OpportunityLineItem>();
        for( OpportunityLineItem oppLine : newOpportunityLineItem ){
            if( mapProductIdToProduct.containsKey( oppLine.Product2Id ) ){
                parentOppIds.add( oppLine.opportunityId );
                serviceProductLines.add( oppLine );
                serviceProductIds.add( oppLine.Product2Id );
            }
        }
        
        Map<Id, Opportunity> oppMap = new Map<Id, Opportunity>( [ SELECT Id, Name, 
                                                                 ( SELECT Id, Name, Product2Id 
                                                                   FROM OpportunityLineItems 
                                                                   Where Product2Id not in :serviceProductIds
                                                                 )
                                                                 FROM Opportunity
                                                                 WHERE Id IN: parentOppIds ] 
                                                               );
                                                               
        Map<Id, Set<Id>> mapOppIdToHardwareProductIds = new Map<Id, Set<Id>>();
        for( Opportunity opp : oppMap.values() ) {
            Set<Id> setHarwareProductIds = new Set<Id>();
            for( OpportunityLineItem opli : opp.OpportunityLineItems ) {
                setHarwareProductIds.add( opli.Product2Id );
            }
            mapOppIdToHardwareProductIds.put( opp.Id, setHarwareProductIds );
        }
        
        Map<Id, Set<Id>> mapServicesProductIDToHardwareProductIds = new Map<Id, Set<Id>>();
        for( SA_Junction__c sJunction : [ SELECT Id, Hardware_Product__c, 
                                          Services_Product__c 
                                          FROM SA_Junction__c 
                                          Where Services_Product__c in :serviceProductIds
                                         ] 
                                         ){
            Set<Id> hardwareProductIds = mapServicesProductIDToHardwareProductIds.get( sJunction.Services_Product__c );
            hardwareProductIds = hardwareProductIds == null ? new Set<Id>() : hardwareProductIds;
            hardwareProductIds.add( sJunction.Hardware_Product__c );                             
            mapServicesProductIDToHardwareProductIds.put( sJunction.Services_Product__c, hardwareProductIds );                                        
        }
        
        for( OpportunityLineItem oppLine : serviceProductLines ){
            Set<Id> actualHardwareProductIdsOnOpp = mapOppIdToHardwareProductIds.get( oppLine.OpportunityId );
            Set<Id> expectedHardwareProductIds = mapServicesProductIDToHardwareProductIds.get( oppLine.Product2Id );
            if( expectedHardwareProductIds != null && expectedHardwareProductIds.size() > 0 
                && actualHardwareProductIdsOnOpp != null && actualHardwareProductIdsOnOpp.size() > 0 ) {
                Boolean hasExpectedHardware = false;
                for( Id hardwareProdId : actualHardwareProductIdsOnOpp ) {
                    if( expectedHardwareProductIds.contains( hardwareProdId )) {
                        hasExpectedHardware = true;
                        break;  
                    }
                }
                if( !hasExpectedHardware ) {  
                    oppLine.addError('You need to select the correct agreement based on hardware products.'); 

                }
            }
        }
    }
}
 I could not able to cover the bold part.Can anyone help me how to write test class for it?
 
Hi All,
       I have a trigger helper. I have made test class for it but its not covering the addErrorMethod().
       Can any one help me with this test class? and how can i insert assertequals method in it?
       trigger helper and test class is given below:-
public  without sharing class OpportunityLineItemTriggerHelper {
    
    public static List<OpportunityLineItem> newOpportunityLineItem = new List<OpportunityLineItem>();
    public static List<OpportunityLineItem> oldOpportunityLineItem = new List<OpportunityLineItem>();
    public static Map<Id, OpportunityLineItem> newMapOpportunityLineItem = new Map<Id, OpportunityLineItem>();
    public static Map<Id, OpportunityLineItem> oldMapOpportunityLineItem = new Map<Id, OpportunityLineItem>(); 
     public static void validateServiceAgreementProduct(){
        
        Map<Id, Product2> mapProductIdToProduct = new Map<Id, Product2>(
                                                                        [ SELECT Id, Name, Family
                                                                           FROM Product2 
                                                                           WHERE Family LIKE 'SA - %'
                                                                           OR Family LIKE 'Service - %'
                                                                        ]
                                                                        );
        Set<Id> parentOppIds = new Set<Id>();
        Set<Id> serviceProductIds = new Set<Id>();
        List<OpportunityLineItem> serviceProductLines = new List<OpportunityLineItem>();
        for( OpportunityLineItem oppLine : newOpportunityLineItem ){
            if( mapProductIdToProduct.containsKey( oppLine.Product2Id ) ){
                parentOppIds.add( oppLine.opportunityId );
                serviceProductLines.add( oppLine );
                serviceProductIds.add( oppLine.Product2Id );
            }
        }
        
        Map<Id, Opportunity> oppMap = new Map<Id, Opportunity>( [ SELECT Id, Name, 
                                                                 ( SELECT Id, Name, Product2Id 
                                                                   FROM OpportunityLineItems 
                                                                   Where Product2Id not in :serviceProductIds
                                                                 )
                                                                 FROM Opportunity
                                                                 WHERE Id IN: parentOppIds ] 
                                                               );
                                                               
        Map<Id, Set<Id>> mapOppIdToHardwareProductIds = new Map<Id, Set<Id>>();
        for( Opportunity opp : oppMap.values() ) {
            Set<Id> setHarwareProductIds = new Set<Id>();
            for( OpportunityLineItem opli : opp.OpportunityLineItems ) {
                setHarwareProductIds.add( opli.Product2Id );
            }
            mapOppIdToHardwareProductIds.put( opp.Id, setHarwareProductIds );
        }
        
        Map<Id, Set<Id>> mapServicesProductIDToHardwareProductIds = new Map<Id, Set<Id>>();
        for( SA_Junction__c sJunction : [ SELECT Id, Hardware_Product__c, 
                                          Services_Product__c 
                                          FROM SA_Junction__c 
                                          Where Services_Product__c in :serviceProductIds
                                         ] 
                                         ){
            Set<Id> hardwareProductIds = mapServicesProductIDToHardwareProductIds.get( sJunction.Services_Product__c );
            hardwareProductIds = hardwareProductIds == null ? new Set<Id>() : hardwareProductIds;
            hardwareProductIds.add( sJunction.Hardware_Product__c );                             
            mapServicesProductIDToHardwareProductIds.put( sJunction.Services_Product__c, hardwareProductIds );                                        
        }
        
        for( OpportunityLineItem oppLine : serviceProductLines ){
            Set<Id> actualHardwareProductIdsOnOpp = mapOppIdToHardwareProductIds.get( oppLine.OpportunityId );
            Set<Id> expectedHardwareProductIds = mapServicesProductIDToHardwareProductIds.get( oppLine.Product2Id );
            if( expectedHardwareProductIds != null && expectedHardwareProductIds.size() > 0 
                && actualHardwareProductIdsOnOpp != null && actualHardwareProductIdsOnOpp.size() > 0 ) {
                Boolean hasExpectedHardware = false;
                for( Id hardwareProdId : actualHardwareProductIdsOnOpp ) {
                    if( expectedHardwareProductIds.contains( hardwareProdId )) {
                        hasExpectedHardware = true;
                        break;  
                    }
                }
                if( !hasExpectedHardware ) {  
                    oppLine.addError('You need to select the correct agreement based on hardware products.'); 
                }
            }
        }
    }
}
test class for helper:-

 public static void validateServiceAgreementProductTest(){
        Account accTest = new Account( Name = 'Test Account' );
        insert accTest;
        
        Opportunity oppTest = new Opportunity( Name = 'Test Opportunity',
                                              StageName = 'Working',
                                              CloseDate = System.today(),
                                              AccountId = accTest.Id );
        insert oppTest;
        
        Product2 prod = new Product2( Name ='EV - PM1H0000BD',
                                     isActive = TRUE,
                                     Family = ' Printers' );
        insert prod;
        
        Product2 prod1 = new Product2( Name ='Service Agreement - Full - Primacy Dual',
                                      isActive = TRUE,
                                      Family = ' SA - Hardware' );
        insert prod1;
        
        OpportunityLineItem oppLine = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                              Quantity = 2,
                                                              UnitPrice = 10,
                                                              Product2Id = prod.id
                                                             );
        insert oppLine;
        
        OpportunityLineItem oppLine1 = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                               Quantity = 2,
                                                               UnitPrice = 10,
                                                               Product2Id = prod1.id
                                                              );
        insert oppLine1;
        
        //System.assertEquals(, );
    }
    
    public static void validateServiceAgreementProductTestError(){
        Account accTest = new Account( Name = 'Test Account' );
        insert accTest;
        
        Opportunity oppTest = new Opportunity( Name = 'Test Opportunity',
                                              StageName = 'Working',
                                              CloseDate = System.today(),
                                              AccountId = accTest.Id );
        insert oppTest;
        
        Product2 prod = new Product2( Name ='EV - PM1H0000BD',
                                     isActive = TRUE,
                                     Family = ' Printers' );
        insert prod;
        
        Product2 prod1 = new Product2( Name ='Service Agreement - Full - SD260',
                                      isActive = TRUE,
                                      Family = ' SA - Hardware' );
        insert prod1;
        
        OpportunityLineItem oppLine = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                              Quantity = 2,
                                                              UnitPrice = 10,
                                                              Product2Id = prod.id
                                                             );
        insert oppLine;
        
        OpportunityLineItem oppLine1 = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                               Quantity = 2,
                                                               UnitPrice = 10,
                                                               Product2Id = prod1.id
                                                              );
        try{
             insert oppLine1;
        }
       catch(Exception e) {
            System.assert(e.getMessage().contains('You need to select the correct agreement based on hardware products.'));
        }
         
    }
}
Hi All,
I am updating a user record by changing role of user, while changing role of user I ma getting Error:- The value of a parameter contains a character that is not allowed or the value exceeds the maximum allowed length. Remove the character from the parameter value or reduce the value length and resubmit.
  this error is only coming while i am changing only role, if i change anything else in user record, It gets saved but while updating role its giving me this error. I have tried inactive trigger/Flow etc on user record but i am still getting this error.
Can anyone help me with this?
Thanks in advance
Hi All,
          I have a controller and I wrote its test class. it's not covering some part.
My controller is given below:-
 
public without sharing class MatchMakingController {
    private ApexPages.StandardController sctrl;
    rie__Registration__c regObj;
    public Map<String, List<SelectOption>> questionsMap {get;set;}
    private Map<String, String> questionAnswerMap;
    public Map<String, rie__Question__c> questionsSet {get;set;}
    public String Selectedvalues {get;set;}
    public String answeredQuestion{get; set;}
    
    public MatchMakingController(ApexPages.StandardController st){
        this.sctrl = st;
        this.regObj = (rie__Registration__c) st.getRecord();
        questionAnswerMap = new Map<String, String>();
        
    }
  
     public void populateAnswers()
    {
        questionAnswerMap.put(answeredQuestion.trim(), Selectedvalues.trim());
        System.debug('***'+questionAnswerMap);
        Selectedvalues=Null;
    }
    
    public pageReference submitAnswers(){
        List<rie__Registrant_Answer__c> existingRegAnswersList = new List<rie__Registrant_Answer__c>([Select id, rie__Question__c,
                                                                                                     rie__Answer__c, rie__Registration__c
                                                                                                     from rie__Registrant_Answer__c
                                                                                                     where rie__Registration__c =: regObj.Id]);
        Map<String, rie__Registrant_Answer__c> existingRegAnswersMap = new Map<String, rie__Registrant_Answer__c>();
        if(existingRegAnswersList != Null && existingRegAnswersList.size() > 0){
            for(rie__Registrant_Answer__c regAnswers : existingRegAnswersList){
                existingRegAnswersMap.put(regAnswers.rie__Question__c, regAnswers);
            }
        }
        system.debug('questionAnswerMap---->'+questionAnswerMap);
        List<rie__Registrant_Answer__c> regAnswerList = new List<rie__Registrant_Answer__c>();
        if(questionAnswerMap != Null && questionAnswerMap.size() > 0){
            for(String question : questionAnswerMap.keySet()){
                if(question != Null && question != 'None' &&
                   questionAnswerMap.get(question) != Null && 
                   questionAnswerMap.get(question) != 'None'){
                       if(existingRegAnswersMap != Null && 
                          existingRegAnswersMap.size() > 0 && 
                          existingRegAnswersMap.containsKey(question)){
                              rie__Registrant_Answer__c regAnswer = new rie__Registrant_Answer__c(Id = existingRegAnswersMap.get(question).Id);
                              regAnswer.rie__Question__c = questionsSet.get(question).Id;
                              regAnswer.rie__Answer__c = questionAnswerMap.get(question);
                              regAnswer.rie__Registration__c = regObj.Id;
                              regAnswerList.add(regAnswer); 
                          }else{
                              rie__Registrant_Answer__c regAnswer = new rie__Registrant_Answer__c();
                              regAnswer.rie__Question__c = questionsSet.get(question).Id;
                              regAnswer.rie__Answer__c = questionAnswerMap.get(question);
                              regAnswer.rie__Registration__c = regObj.Id;
                              regAnswerList.add(regAnswer);  
                          }
                       
                       
                   }
            }
        }
        if(regAnswerList != Null && regAnswerList.size() > 0){
            insert regAnswerList;
        }
        Selectedvalues=Null;
        PageReference cancel = sctrl.cancel(); 
        return cancel;
    }
    
    public pageReference cancel(){
       PageReference cancel = sctrl.cancel(); 
       return cancel; 
    }
}

Test class is given below:-
@istest
private class MatchMakingControllerTest {
   
    Static testmethod void MatchMakingMethod(){
           String txt = 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG';
         rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-07:00) Pacific Daylight Time (America/Los_Angeles)';
        insert evt;
        
        rie__Registration__c attendee = new rie__Registration__c();
        attendee.rie__BatchProcessedForMatchMaking__c = false;
        attendee.rie__Event__c = evt.id;
        insert attendee;
        
        rie__Question__c qus = new rie__Question__c();
        qus.rie__Question__c  = 'Are you looking for a Solution?';
        qus.rie__Answers__c = 'ans,yes';
        insert qus;
        
        rie__Registrant_Answer__c regAns =  new rie__Registrant_Answer__c();
        regAns.rie__Question__c = qus.id;
        regAns.rie__Registration__c =  attendee.id;
        regAns.rie__Answer__c = 'yes';
        insert regAns;
        
        test.startTest();
        PageReference pageRef  = Page.MatchMakingQuestions; 
        pageRef.getParameters().put('Id', regAns.id);
        Test.setCurrentPage(pageRef);
        Registration__c reg = new Registration__c();
        Apexpages.StandardController sc = new Apexpages.standardController(reg);
        
        // Instantiate the extension
        MatchMakingController ext = new MatchMakingController(sc);
        ext.answeredQuestion = txt;
        //ext.populateAnswers();
        PageReference testPageResults = ext.cancel();
        PageReference testPageResult = ext.getQuestionsList();
        PageReference testPageRe = ext.submitAnswers();
        test.stoptest();
        
    }
}
how can I cover bold lines in my test class?
Can anyone help me with this?
​​​​​​​
 HI All,
       I have a test class which is giving me error when i try to run it.
System.SObjectException: Field is not writeable: rie__Registrant_Exhibitor__c.rie__Registration__c
My class is below:-
public without sharing class BatchMatchMaking implements Database.Batchable<sObject>{
    // Start Method
    public Database.queryLocator start(Database.BatchableContext bc){
        return Database.getQueryLocator('Select id, rie__BatchProcessedForMatchMaking__c '+ 
                                        'from rie__Registration__c '+ 
                                        'where rie__BatchProcessedForMatchMaking__c = false');
    }
    //Execute Method
    public void execute(Database.BatchableContext BC, List<rie__Registration__c> regList){
        RegistrationTriggerHelper.runTrigger = false;
        Set<Id> regIds = new Set<Id>();
        if(regList != Null && regList.size() > 0){
            for(rie__Registration__c regobj : regList){
                regObj.rie__BatchProcessedForMatchMaking__c = true;
                regIds.add(regObj.Id);
            }
        }
        if(regIds != Null && regIds.size() > 0){
            Map<Id, rie__Registrant_Answer__c> regQuestionAnswersMap = new Map<Id, rie__Registrant_Answer__c>();
            
            //Get all the registrant Answers related to Registrants
            List<rie__Registrant_Answer__c> regAnswersList = new List<rie__Registrant_Answer__c>([Select id, rie__Question__c,
                                                                                                 rie__Answer__c, rie__Registration__c
                                                                                                 from rie__Registrant_Answer__c
                                                                                                 where rie__Registration__c IN: regIds]);
            
            if(regAnswersList != Null && regAnswersList.size() > 0){
                for(rie__Registrant_Answer__c regAnswers : regAnswersList){
                    regQuestionAnswersMap.put(regAnswers.rie__Question__c , regAnswers);
                }
            }
            
            if(regQuestionAnswersMap != Null && regQuestionAnswersMap.size() > 0){
                // This map contains Exhibitor as a key and Final score as value 
                Map<Id , Integer> exhibitorTotalScoreMap = new Map<Id , Integer>();
                
                //Get All Exhibitor Questionsand Score
                List<rie__Exhibitor_Question__c> exhibitorQuestionsList = new List<rie__Exhibitor_Question__c>([Select id, rie__Answer__c,
                                                                                                            rie__Exhibitor__c, rie__Question__c ,
                                                                                                            rie__Score__c
                                                                                                            from rie__Exhibitor_Question__c
                                                                                                            where rie__Question__c IN: regQuestionAnswersMap.keySet()]);
                
                List<rie__Registrant_Exhibitor__c> regExhibitorListToInsert = new List<rie__Registrant_Exhibitor__c>();
                Set<Id> registrantIds = new Set<Id>();
                if(exhibitorQuestionsList != Null && exhibitorQuestionsList.size() > 0){
                    for(rie__Exhibitor_Question__c exhibitorQuestions : exhibitorQuestionsList){
                        if(regQuestionAnswersMap.containsKey(exhibitorQuestions.rie__Question__c) && 
                           exhibitorQuestions.rie__Score__c != Null && 
                           exhibitorQuestions.rie__Answer__c == regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Answer__c){ 
                            Integer totalScoreList = 0;
                            if(exhibitorTotalScoreMap.containsKey(exhibitorQuestions.rie__Exhibitor__c)){
                                
                                totalScoreList = exhibitorTotalScoreMap.get(exhibitorQuestions.rie__Exhibitor__c);
                                
                                totalScoreList = totalScoreList + Integer.valueOf(exhibitorQuestions.rie__Score__c);
                            }else{
                                totalScoreList = Integer.valueOf(exhibitorQuestions.rie__Score__c); 
                            }
                       exhibitorTotalScoreMap.put(exhibitorQuestions.rie__Exhibitor__c , totalScoreList);
                            registrantIds.add(regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Registration__c);   
                        }
                     }
                     //Get all the existing registrant exhibior 
                    List<rie__Registrant_Exhibitor__c> regExihibitorList = new List<rie__Registrant_Exhibitor__c>([Select id, rie__Registration__c 
                                                                                                                   from rie__Registrant_Exhibitor__c 
                                                                                                                   where rie__Registration__c IN: registrantIds]);
                    Map<Id, rie__Registrant_Exhibitor__c> registrantExhibitorMap = new Map<Id, rie__Registrant_Exhibitor__c>();
                    if(regExihibitorList != Null && regExihibitorList.size() > 0){
                        for(rie__Registrant_Exhibitor__c regExhibitor : regExihibitorList){
                            registrantExhibitorMap.put(regExhibitor.rie__Registration__c, regExhibitor);
                        }
                    }
                               Integer finalScore = 0;             
                    for(rie__Exhibitor_Question__c exhibitorQuestions : exhibitorQuestionsList){
                            //Checking for exhibitor question
                            if(regQuestionAnswersMap.containsKey(exhibitorQuestions.rie__Question__c)){
                                //Checking for registrant answer
                                if(exhibitorQuestions.rie__Answer__c == regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Answer__c){
                                    if(exhibitorTotalScoreMap.containsKey(exhibitorQuestions.rie__Exhibitor__c) && 
                                       finalScore < exhibitorTotalScoreMap.get(exhibitorQuestions.rie__Exhibitor__c)){
                                           //Checking for any existing registrant exhibitor
                                           
                                           rie__Registrant_Exhibitor__c regExhibitor;
                                           if(registrantExhibitorMap.containsKey(regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Registration__c)){
                                             regExhibitor = new rie__Registrant_Exhibitor__c(Id = registrantExhibitorMap.get(regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Registration__c).Id); 
                                           }else{
                                             regExhibitor = new rie__Registrant_Exhibitor__c();
                                           }
                                           regExhibitor.rie__Registration__c =  regQuestionAnswersMap.get(exhibitorQuestions.rie__Question__c).rie__Registration__c; // Error is coming from here

                                           finalScore = exhibitorTotalScoreMap.get(exhibitorQuestions.rie__Exhibitor__c);
                                           regExhibitor.rie__Exhibitor__c = exhibitorQuestions.rie__Exhibitor__c;
                                           regExhibitor.rie__Score__c = finalScore; 
                                           regExhibitorListToInsert.add(regExhibitor); 
                                       }
                                }    
                            }
                    }
                }
                                //upsert the new Registrant Exhibitors
                if(regExhibitorListToInsert != Null && regExhibitorListToInsert.size() > 0){
                    upsert regExhibitorListToInsert;
                }
            }
        }
        update regList;
    }
     //Finish Method for batch
    public void finish(Database.BatchableContext BC){
    }
 }
My test class is below:-
@istest
private class BatchMatchMakingTest {
    static testmethod void matchMakingMethod(){
        
        rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-07:00) Pacific Daylight Time (America/Los_Angeles)';
        insert evt;
        
        rie__Registration__c attendee = new rie__Registration__c();
        attendee.rie__BatchProcessedForMatchMaking__c = false;
        attendee.rie__Event__c = evt.id;
        insert attendee;
        
        rie__Question__c qus = new rie__Question__c();
        qus.rie__Question__c  = 'Are you looking for a Solution?';
        insert qus;
        
        rie__Registrant_Answer__c regAns =  new rie__Registrant_Answer__c();
        regAns.rie__Question__c = qus.id;
        regAns.rie__Registration__c =  attendee.id;
        regAns.rie__Answer__c = 'yes';
        insert regAns;
        
         rie__Exhibitor__c ex = new rie__Exhibitor__c();
         
        insert ex;
        
        rie__Exhibitor_Question__c eq = new rie__Exhibitor_Question__c();
        eq.rie__Question__c = qus.id;
        eq.rie__Exhibitor__c = ex.id;
        eq.rie__Answer__c = 'yes';
        eq.rie__Score__c = 50;
        insert eq;
        
        rie__Registrant_Exhibitor__c rex = new rie__Registrant_Exhibitor__c();
        rex.rie__Exhibitor__c = ex.id;
        rex.rie__Registration__c = attendee.id;
        insert rex;
       
        
        Test.startTest();
        BatchMatchMaking cp = new BatchMatchMaking();
        Database.executeBatch(cp);
        Test.stopTest();
        
        rie__Registrant_Exhibitor__c ras = [select id,rie__Exhibitor__c,rie__Registration__c 
                                         from rie__Registrant_Exhibitor__c
                                         where id =: rex.id];
        system.assertEquals(rex.rie__Exhibitor__c,ras.rie__Exhibitor__c );
        system.assertEquals(rex.rie__Registration__c,ras.rie__Registration__c );
    }
}
how to solve this error?
Hi all,
    I have a helper class in which i dont have any callout still i am gettimg this error:-Methods defined as TestMethod do not support Web service callouts.
how to solve this error?
My test class is given below:-
@istest
private class Trigger_LogTest {
    
    private class Mock implements HttpCalloutMock {
        
        public HTTPResponse respond(HTTPRequest req) {
            
            HTTPResponse res = new HTTPResponse();
            
            res.setStatusCode(200);
            res.setBody('{'+
                        '  \"agenda\": \"Test Webinar\",'+
                        '  \"created_at\": \"2020-04-15T11:16:58Z\",'+
                        '  \"duration\": 60,'+
                        '  \"host_id\": \"BhN6PRjkQW-iUc8-8-aTSw\",'+
                        '  \"id\": 94298132774,'+
                        '  \"join_url\": \"https://zoom.us/j/94298132774?pwd=REZsT1NnOFd5aWhUUDB0cTFRS010dz09\",'+
                        '  \"password\": \"avfhfgh\",'+
                        '  \"registration_url\": \"https://zoom.us/webinar/register/WN_BRg795wbTHSIOWEnknY5gA\",'+
                        '  \"settings\": {'+
                        '    \"allow_multiple_devices\": false,'+
                        '    \"alternative_hosts\": \"\",'+
                        '    \"approval_type\": 0,'+
                        '    \"audio\": \"both\",'+
                        '    \"auto_recording\": \"none\",'+
                        '    \"close_registration\": true,'+
                        '    \"contact_email\": \"steve@realintelligence.com\",'+
                        '    \"contact_name\": \"Steve Kompolt\",'+
                        '    \"enforce_login\": false,'+
                        '    \"enforce_login_domains\": \"\",'+
                        '    \"global_dial_in_countries\": ['+
                        '      \"US\"'+
                        '    ],'+
                        '    \"global_dial_in_numbers\": ['+
                        '      {'+
                        '        \"city\": \"Chicago\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 3126266799\",'+
                        '        \"type\": \"toll\"'+
                        '      },'+
                        '      {'+
                        '        \"city\": \"New York\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 6465588656\",'+
                        '        \"type\": \"toll\"'+
                        '      },'+
                        '      {'+
                        '        \"city\": \"Houston\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 3462487799\",'+
                        '        \"type\": \"toll\"'+
                        '      },'+
                        '      {'+
                        '        \"city\": \"San Jose\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 6699009128\",'+
                        '        \"type\": \"toll\"'+
                        '      },'+
                        '      {'+
                        '        \"city\": \"\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 2532158782\",'+
                        '        \"type\": \"toll\"'+
                        '      },'+
                        '      {'+
                        '        \"city\": \"\",'+
                        '        \"country\": \"US\",'+
                        '        \"country_name\": \"US\",'+
                        '        \"number\": \"+1 3017158592\",'+
                        '        \"type\": \"toll\"'+
                        '      }'+
                        '    ],'+
                        '    \"hd_video\": true,'+
                        '    \"host_video\": true,'+
                        '    \"meeting_authentication\": false,'+
                        '    \"on_demand\": false,'+
                        '    \"panelists_video\": true,'+
                        '    \"post_webinar_survey\": false,'+
                        '    \"practice_session\": true,'+
                        '    \"question_answer\": true,'+
                        '    \"registrants_confirmation_email\": true,'+
                        '    \"registrants_email_notification\": true,'+
                        '    \"registrants_restrict_number\": 0,'+
                        '    \"show_share_button\": true'+
                        '  },'+
                        '  \"start_time\": \"2020-09-20T06:59:00Z\",'+
                        '  \"start_url\": \"https://zoom.us/s/94298132774?zak=eyJ6bV9za20iOiJ6bV9vMm0iLCJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJjbGllbnQiLCJ1aWQiOiJCaE42UFJqa1FXLWlVYzgtOC1hVFN3IiwiaXNzIjoid2ViIiwic3R5IjoxMDAsIndjZCI6ImF3MSIsImNsdCI6MCwic3RrIjoicm5JSzZ3VDNsQnh2ODdMQUg0RTFsZU1OOVFwcldNZ2VIMUhzWnRaNXE3NC5CZ1VzZDBWRWFUUk9lVWR1VkVSWGIxbFpWRkZNVGpKUmRsQldhWHBQZG5OT2J6bHFabmR6TVZaUVNtVkRTVDFBWkRZeVpEZ3hOMll3WVdFMk16WTRNalJsWldRd1pETXhZakZoWldJMk1tWTFNR1UyTXpFNU5HVXdNalZrWXpnek56WTFNR05oTUdSbU1EWXdZMll6T0FBTU0wTkNRWFZ2YVZsVE0zTTlBQU5oZHpFIiwiZXhwIjoxNTg2OTU2NjE4LCJpYXQiOjE1ODY5NDk0MTgsImFpZCI6ImtCQnVrUUQwUjRlaE9Lb00wWU80TmciLCJjaWQiOiIifQ.t-ECUWaekV1eRkBwA00XR0ysKz0OHSUagnwT7guXkg8\",'+
                        '  \"timezone\": \"America/Los_Angeles\",'+
                        '  \"topic\": \"Test Webinar\",'+
                        '  \"type\": 5,'+
                        '  \"uuid\": \"iTfCvg3iSQW3oFjwObnLog==\"'+
                        '}');
            
            return res; 
        }
    }
  
    static testmethod void rollupForBoothTest(){
        Test.setMock(HttpCalloutMock.class, new Mock());

         rie__Zoom_User__c z = new rie__Zoom_User__c();
        z.rie__Email_Id__c = 'real@gmail.com';
        z.rie__FirstName__c = 'Real';
        z.rie__LastName__c = 'Int';
        z.rie__User_Type__c ='Licensed';
        insert z;
        
        Contact c = new Contact();
        c.LastName = 'steven';
        c.rie__Zoom_User__c = z.id;
        insert c;
        
        rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-07:00) Pacific Daylight Time (America/Los_Angeles)';
        insert evt;
        
        
        rie__Session__c s = new rie__Session__c();
        s.rie__Session_Status__c = 'Ready to Publish';
        s.rie__Date_Time__c = System.today();
        s.rie__Session_Organizer__c = c.id;
        s.rie__Publish_to_Web__c = False;
        s.rie__Session_End_Time__c = System.today();
        s.rie__Meeting_ID__c = '86023030645' ;
        s.rie__Meeting_Password__c = '53b347b2a5';
        s.rie__Event__c =  evt.id;
        insert s;
        
        ri__Campus__c campus = new ri__Campus__c();
        insert campus;
        
        ri__Property__c tradeShow = new ri__Property__c();
        tradeShow.ri__Campus__c = campus.id;
        insert tradeShow;
        
        ri__Unit__c booth = new ri__Unit__c();
        booth.ri__Building__c = tradeShow.id;
        insert booth;
        
        rie__Registration__c attendee = new rie__Registration__c();
        attendee.rie__Event__c = evt.id;
        insert attendee;
        
        rie__Log__c logs = new rie__Log__c();
        logs.rie__Event__c = evt.id;
        logs.rie__Session__c = s.id;
        logs.rie__Attendee_Chat__c = true;
        logs.Booth_Sponsor__c = booth.id;
        logs.rie__Attendee_Connect__c = true;
        logs.Booth_Sponsor_Chat__c = true;
        logs.Booth_Sponsor_Connect__c = true;
        logs.rie__Registration__c = attendee.id;
        insert logs;
         test.startTest();
        delete logs;
        test.stopTest();}}

My class is given below:-
/**
 * Helper Class For Trigger: Trigger_Log 
 */
public without sharing class LogTriggerHelper{
    public static List<rie__Log__c> newLogs;
    public static List<rie__Log__c> oldLogs;
    public static Map<Id, rie__Log__c> newMapLogs;
    public static Map<Id, rie__Log__c> oldMapLogs;
    
    public static boolean runTrigger = TRUE;
    
    public static Map<Id, rie__Registration__c> mapParentRegisTrationsToUpdate = new Map<Id, rie__Registration__c>();
    
    public static Map<Id, rie__Registration__c> mapParentBoothSponsorsToUpdate = new Map<Id, rie__Registration__c>();
    
    public static void rollupCalculations(){
        
        mapParentBoothSponsorsToUpdate = new Map<Id, rie__Registration__c>();
        rollupForBooth();
        if( mapParentBoothSponsorsToUpdate.size() > 0 ) {
            mapParentRegisTrationsToUpdate.putAll( mapParentBoothSponsorsToUpdate );
        }
        
        // update registrations
        if( mapParentRegisTrationsToUpdate.size() > 0 ) {
            update mapParentRegisTrationsToUpdate.values();
        }
    }
    
    public static void rollupForBooth(){
        
        Set<Id> parentRegistrationIds = new Set<Id>();
        if( Trigger.isInsert || Trigger.isUpdate || Trigger.isUndelete ){
            for( rie__Log__c logObj : newLogs ){
                if( logObj.rie__Registration__c != Null ){
                    parentRegistrationIds.add( logObj.rie__Registration__c );
                }
            }
        } 
        else if( Trigger.isDelete ) {
            for( rie__Log__c logObj : oldLogs ){
                if( logObj.rie__Registration__c != Null ){
                    parentRegistrationIds.add( logObj.rie__Registration__c );
                }
            }    
        }
        
        if( parentRegistrationIds.size() > 0 ){
            for( Id registrationId : parentRegistrationIds ) {
                rie__Registration__c parentBoothSponsor = new rie__Registration__c( Id = registrationId ); 
                parentBoothSponsor.rie__Booth_Counter__c = 0;
                parentBoothSponsor.rie__Booth_Chat_Counter__c = 0;
                parentBoothSponsor.rie__Booth_Connect_Counter__c = 0;
                mapParentBoothSponsorsToUpdate.put( parentBoothSponsor.Id, parentBoothSponsor );
            }    
            
            List<AggregateResult> aggrList = [ SELECT rie__Registration__c parentBoothSponsor, 
                                               COUNT(Id) boothSponsor
                                               FROM rie__Log__c
                                               WHERE rie__Registration__c IN: parentRegistrationIds
                                               AND Booth_Sponsor__c != Null
                                               GROUP BY rie__Registration__c ];
            for( AggregateResult ag :  aggrList ){
            
                Id parentBoothSponsorId = (String)ag.get('parentBoothSponsor');
                rie__Registration__c parentBoothSponsor = mapParentBoothSponsorsToUpdate.get( parentBoothSponsorId );
                                            
                parentBoothSponsor.rie__Booth_Counter__c = (Decimal)ag.get( 'boothSponsor' );
                mapParentBoothSponsorsToUpdate.put( parentBoothSponsor.Id, parentBoothSponsor );   
            }
            
            List<AggregateResult> aggrListChat = [ SELECT rie__Registration__c parentBoothSponsor, 
                                                   COUNT(Id) chatBoothSponsor
                                                   FROM rie__Log__c
                                                   WHERE rie__Registration__c IN: parentRegistrationIds
                                                   AND Booth_Sponsor__c != Null
                                                   AND Booth_Sponsor_Chat__c = TRUE
                                                   GROUP BY rie__Registration__c ];
            for( AggregateResult ag :  aggrListChat ){
            
                Id parentBoothSponsorId = (String)ag.get('parentBoothSponsor');
                rie__Registration__c parentBoothSponsor = mapParentBoothSponsorsToUpdate.get( parentBoothSponsorId );
                                            
                parentBoothSponsor.rie__Booth_Chat_Counter__c = (Decimal)ag.get( 'chatBoothSponsor' );
                mapParentBoothSponsorsToUpdate.put( parentBoothSponsor.Id, parentBoothSponsor );   
            }
            
            List<AggregateResult> aggrListConnect = [ SELECT rie__Registration__c parentBoothSponsor, 
                                                      COUNT(Id) connectBoothSponsor
                                                      FROM rie__Log__c
                                                      WHERE rie__Registration__c IN: parentRegistrationIds
                                                      AND Booth_Sponsor__c != Null
                                                      AND Booth_Sponsor_Connect__c = TRUE
                                                      GROUP BY rie__Registration__c ];
            for( AggregateResult ag :  aggrListConnect ){
            
                Id parentBoothSponsorId = (String)ag.get('parentBoothSponsor');
                rie__Registration__c parentBoothSponsor = mapParentBoothSponsorsToUpdate.get( parentBoothSponsorId );
                                            
                parentBoothSponsor.rie__Booth_Connect_Counter__c = (Decimal)ag.get( 'connectBoothSponsor' );
                mapParentBoothSponsorsToUpdate.put( parentBoothSponsor.Id, parentBoothSponsor );   
            }
        }
    }
}
can anyone help me with this error?
     
Hi All,
          I have a trigger helper class give below:-
public without sharing class SessionTriggerHelper {
   
    public static List<Session__c> newSession = new List<Session__c>();
    public static List<Session__c> oldSession = new List<Session__c>(); 
    public static Map<Id, Session__c> newMapSession =new Map<Id, Session__c>();
    public static Map<Id, Session__c> oldMapSession =new Map<Id, Session__c>();
    
    public static boolean runTrigger = TRUE;
    
     
    public static void createWebinarAndMeeting(){
        for(Session__c ss : newSession){
            if(ss.rie__Zoom_URL__c == Null && ss.rie__Session_Status__c == 'Ready to Publish'){
                String zoomUserId = '';
                
                if(ss.rie__ZoomUserId__c != Null && ss.rie__Webinar_Creation_Allowed__c){
                   zoomUserId = ss.rie__ZoomUserId__c; 
                }else{
                   zoomUserId = Label.Zoom_User_Id; 
                }
                
                if(ss.rie__Session_Type__c == 'Meeting'){
                   createMeeting(ss.rie__ZoomUserId__c, ss); 
                }else{
                   createWebinar(zoomUserId, ss); 
                }
                
                
            }
        }
    }
    
    
    
    public static void createWebinar(String zoomUserId, Session__c ss){
        Map<String, Object> reqMap = new Map<String, Object>();
        Map<String, Object> recurrenceMap = new Map<String, Object>();
        recurrenceMap.put('type' , 1);
        recurrenceMap.put('repeat_interval' , 1);
        recurrenceMap.put('end_date_time' , ss.rie__Session_End_Time__c);
        
        Map<String, Object> settingMap = new Map<String, Object>();
        settingMap.put('host_video' , 'true');
        settingMap.put('panelists_video' , 'true');
        settingMap.put('practice_session' , 'true');
        settingMap.put('hd_video' , 'true');
        settingMap.put('approval_type' , 0);
        settingMap.put('registration_type' , 2);
        settingMap.put('audio' , 'both');
        settingMap.put('auto_recording' , 'none');
        settingMap.put('enforce_login' , 'false');
        settingMap.put('close_registration' , 'true');
        settingMap.put('show_share_button' , 'true');
        settingMap.put('allow_multiple_devices' , 'false');
        settingMap.put('registrants_email_notification' , 'true');
        
        reqMap.put('topic', ss.Name);
        reqMap.put('type', 5);
        DateTime startTime = ss.rie__Date_Time__c.addHours(-7);
        Map<String, String> timeZoneMap = getDifferentTimeZones(ss.rie__Event_Time_Zone__c);

        Integer timeZoneHour = Integer.valueOf(timeZoneMap.get('timeZoneHour'));
        Integer timeZoneMinute = Integer.valueOf(timeZoneMap.get('timeZoneMinute'));
        reqMap.put('start_time', startTime.addHours(timeZoneHour).addMinutes(timeZoneMinute));
        if(ss.rie__Date_Time__c != Null && ss.rie__Session_End_Time__c != Null){
            Double st = ss.rie__Session_End_Time__c.getTime() - ss.rie__Date_Time__c.getTime();
            st = st/(1000*60);
            reqMap.put('duration', Integer.valueOf(st));
        }
        
        reqMap.put('timezone', timeZoneMap.get('timezoneName'));
        if(ss.rie__Meeting_Password__c != Null){
            reqMap.put('password', ss.rie__Meeting_Password__c);
        }else{
            Integer len = 10;
            Blob blobkey = crypto.generateAesKey(128);
            String key = EncodingUtil.convertToHex(blobkey);
            String pwd = key.substring(0,len);
            reqMap.put('password', pwd);
        }
        reqMap.put('agenda', ss.Name);
        reqMap.put('recurrence',recurrenceMap);
        reqMap.put('settings', settingMap);
        String  reqBody = JSON.serialize(reqMap);
        
        ZoomService.createWebinar(reqBody, zoomUserId, ss.Id);
    }
    
    public static void createMeeting(String zoomUserId, Session__c ss){
        Map<String, Object> reqMap = new Map<String, Object>();
        Map<String, Object> recurrenceMap = new Map<String, Object>();
        recurrenceMap.put('type' , 3);
        recurrenceMap.put('repeat_interval' , 1);
        recurrenceMap.put('weekly_days' , '4');
        recurrenceMap.put('monthly_day' , 10);
        recurrenceMap.put('monthly_week' , 2);
        recurrenceMap.put('end_date_time' , ss.rie__Session_End_Time__c);
        
        Map<String, Object> settingMap = new Map<String, Object>();
        settingMap.put('host_video' , false);
        settingMap.put('participant_video' , false);
        settingMap.put('cn_meeting' , false);
        settingMap.put('in_meeting' , false);
        settingMap.put('join_before_host' , true);
        settingMap.put('mute_upon_entry' , false);
        settingMap.put('watermark' , false);
        settingMap.put('waiting_room' , false);
        settingMap.put('use_pmi' , false);
        settingMap.put('approval_type' , 0);
        settingMap.put('registration_type' , 2);
        settingMap.put('audio' , 'both');
        settingMap.put('auto_recording' , 'none');
        
        reqMap.put('topic', ss.Name);
        reqMap.put('type', 3);
        DateTime startTime = ss.rie__Date_Time__c.addHours(-7);
        Map<String, String> timeZoneMap = getDifferentTimeZones(ss.rie__Event_Time_Zone__c);
        Integer timeZoneHour = Integer.valueOf(timeZoneMap.get('timeZoneHour'));
        Integer timeZoneMinute = Integer.valueOf(timeZoneMap.get('timeZoneMinute'));
        reqMap.put('start_time', startTime.addHours(timeZoneHour).addMinutes(timeZoneMinute));
        if(ss.rie__Date_Time__c != Null && ss.rie__Session_End_Time__c != Null){
            Double st = ss.rie__Session_End_Time__c.getTime() - ss.rie__Date_Time__c.getTime();
            st = st/(1000*60);
            reqMap.put('duration', Integer.valueOf(st));
        }
        
        reqMap.put('timezone', timeZoneMap.get('timezoneName'));
        if(ss.rie__Meeting_Password__c != Null){
            reqMap.put('password', ss.rie__Meeting_Password__c);
        }else{
            Integer len = 10;
            Blob blobkey = crypto.generateAesKey(128);
            String key = EncodingUtil.convertToHex(blobkey);
            String pwd = key.substring(0,len);
            reqMap.put('password', pwd);
        }
        reqMap.put('agenda', ss.Name);
        reqMap.put('recurrence',recurrenceMap);
        reqMap.put('settings', settingMap);
        reqMap.put('registrants_email_notification', 'true');
        String  reqBody = JSON.serialize(reqMap);
        ZoomService.createMeeting(reqBody, zoomUserId, ss.Id);
    }
    
    public static Map<String, String> getDifferentTimeZones(String eventTimeZone){
        String timezoneName = eventTimeZone.substringAfterLast('(').substringBeforeLast(')');
        String timeZoneTime = eventTimeZone.substringAfter('(GMT').substringBefore(')');
        String timeZoneSign = timeZoneTime.substring(0, 1);
        String timeZoneHour = timeZoneSign + timeZoneTime.substring(1, 3);
        String timeZoneMinute = timeZoneSign + timeZoneTime.substring(4, 6);
        Map<String , String> timeZoneMap = new Map<String, String>();
        timeZoneMap.put('timezoneName',timezoneName);
        timeZoneMap.put('timeZoneHour',timeZoneHour);
        timeZoneMap.put('timeZoneMinute',timeZoneMinute);
        return timeZoneMap;
     }
 }
I have created a test class but i am not gettting enoungh coverage and its failing with null pointer exception on bold lines.
my test class is given below:-
@isTest
private class SessionTriggerHelperTest {
    
    private class Mock implements HttpCalloutMock {
        
        public HTTPResponse respond(HTTPRequest req) {
            
            HTTPResponse res = new HTTPResponse();
            
            res.setStatusCode(200);
            res.setBody('{'+
        '  \"agenda\": \"Test Webinar\",'+
        '  \"created_at\": \"2020-04-15T11:16:58Z\",'+
        '  \"duration\": 60,'+
        '  \"host_id\": \"BhN6PRjkQW-iUc8-8-aTSw\",'+
        '  \"id\": 94298132774,'+
        '  \"join_url\": \"https://zoom.us/j/94298132774?pwd=REZsT1NnOFd5aWhUUDB0cTFRS010dz09\",'+
        '  \"password\": \"avfhfgh\",'+
        '  \"registration_url\": \"https://zoom.us/webinar/register/WN_BRg795wbTHSIOWEnknY5gA\",'+
        '  \"settings\": {'+
        '    \"allow_multiple_devices\": false,'+
        '    \"alternative_hosts\": \"\",'+
        '    \"approval_type\": 0,'+
        '    \"audio\": \"both\",'+
        '    \"auto_recording\": \"none\",'+
        '    \"close_registration\": true,'+
        '    \"contact_email\": \"steve@realintelligence.com\",'+
        '    \"contact_name\": \"Steve Kompolt\",'+
        '    \"enforce_login\": false,'+
        '    \"enforce_login_domains\": \"\",'+
        '    \"global_dial_in_countries\": ['+
        '      \"US\"'+
        '    ],'+
        '    \"global_dial_in_numbers\": ['+
        '      {'+
        '        \"city\": \"Chicago\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 3126266799\",'+
        '        \"type\": \"toll\"'+
        '      },'+
        '      {'+
        '        \"city\": \"New York\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 6465588656\",'+
        '        \"type\": \"toll\"'+
        '      },'+
        '      {'+
        '        \"city\": \"Houston\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 3462487799\",'+
        '        \"type\": \"toll\"'+
        '      },'+
        '      {'+
        '        \"city\": \"San Jose\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 6699009128\",'+
        '        \"type\": \"toll\"'+
        '      },'+
        '      {'+
        '        \"city\": \"\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 2532158782\",'+
        '        \"type\": \"toll\"'+
        '      },'+
        '      {'+
        '        \"city\": \"\",'+
        '        \"country\": \"US\",'+
        '        \"country_name\": \"US\",'+
        '        \"number\": \"+1 3017158592\",'+
        '        \"type\": \"toll\"'+
        '      }'+
        '    ],'+
        '    \"hd_video\": true,'+
        '    \"host_video\": true,'+
        '    \"meeting_authentication\": false,'+
        '    \"on_demand\": false,'+
        '    \"panelists_video\": true,'+
        '    \"post_webinar_survey\": false,'+
        '    \"practice_session\": true,'+
        '    \"question_answer\": true,'+
        '    \"registrants_confirmation_email\": true,'+
        '    \"registrants_email_notification\": true,'+
        '    \"registrants_restrict_number\": 0,'+
        '    \"show_share_button\": true'+
        '  },'+
        '  \"start_time\": \"2020-09-20T06:59:00Z\",'+
        '  \"start_url\": \"https://zoom.us/s/94298132774?zak=eyJ6bV9za20iOiJ6bV9vMm0iLCJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJjbGllbnQiLCJ1aWQiOiJCaE42UFJqa1FXLWlVYzgtOC1hVFN3IiwiaXNzIjoid2ViIiwic3R5IjoxMDAsIndjZCI6ImF3MSIsImNsdCI6MCwic3RrIjoicm5JSzZ3VDNsQnh2ODdMQUg0RTFsZU1OOVFwcldNZ2VIMUhzWnRaNXE3NC5CZ1VzZDBWRWFUUk9lVWR1VkVSWGIxbFpWRkZNVGpKUmRsQldhWHBQZG5OT2J6bHFabmR6TVZaUVNtVkRTVDFBWkRZeVpEZ3hOMll3WVdFMk16WTRNalJsWldRd1pETXhZakZoWldJMk1tWTFNR1UyTXpFNU5HVXdNalZrWXpnek56WTFNR05oTUdSbU1EWXdZMll6T0FBTU0wTkNRWFZ2YVZsVE0zTTlBQU5oZHpFIiwiZXhwIjoxNTg2OTU2NjE4LCJpYXQiOjE1ODY5NDk0MTgsImFpZCI6ImtCQnVrUUQwUjRlaE9Lb00wWU80TmciLCJjaWQiOiIifQ.t-ECUWaekV1eRkBwA00XR0ysKz0OHSUagnwT7guXkg8\",'+
        '  \"timezone\": \"America/Los_Angeles\",'+
        '  \"topic\": \"Test Webinar\",'+
        '  \"type\": 5,'+
        '  \"uuid\": \"iTfCvg3iSQW3oFjwObnLog==\"'+
        '}');
            
            return res; 
        }
    }
    
    static testmethod void createWebinarTest(){
        Test.setMock(HttpCalloutMock.class, new Mock());
        
        rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-05:00) Eastern Standard Time (America/New_York)';
        insert evt;
        
        Session__c s = new Session__c();
        s.rie__Session_Status__c = 'Ready to Publish';
        s.rie__Date_Time__c = System.today();
        s.rie__Session_End_Time__c = System.today();
        s.rie__Event__c =  evt.id;
        insert s;
        Session__c st  =  [select rie__Zoom_URL__c,rie__Session_End_Time__c,rie__Date_Time__c,rie__Event_Time_Zone__c,rie__ZoomUserId__c 
                           from Session__c 
                           where id =: s.id];
       
        Test.startTest();
        string userid = st.rie__ZoomUserId__c;
        String eventTimeZone = st.rie__Event_Time_Zone__c;
        SessionTriggerhelper.getDifferentTimeZones(eventTimeZone);
        SessionTriggerhelper.createMeeting(userid,s);
        SessionTriggerhelper.createWebinar(userid,s);
         SessionTriggerhelper.createWebinarAndMeeting();

         Test.stopTest();
    }
    
    static testmethod void createMeetingTest(){
        Test.setMock(HttpCalloutMock.class, new Mock());
        
        rie__Event__c evt = new rie__Event__c();
        evt.rie__Event_Time_Zone__c = '(GMT-05:00) Eastern Standard Time (America/New_York)';
        insert evt;
        
        Session__c s = new Session__c();
        s.rie__Session_Status__c = 'Ready to Publish';
        s.rie__Date_Time__c = System.today();
        s.rie__Event__c =  evt.id;
        insert s;
        Session__c st  =  [select rie__Zoom_URL__c,rie__Date_Time__c,rie__Event_Time_Zone__c,rie__ZoomUserId__c 
                           from Session__c 
                           where id =: s.id];
       
        Test.startTest();
        string userid = st.rie__ZoomUserId__c;
        String eventTimeZone = st.rie__Event_Time_Zone__c;
        SessionTriggerhelper.getDifferentTimeZones(eventTimeZone);
        SessionTriggerhelper.createWebinarAndMeeting();
        SessionTriggerhelper.createWebinar(userid,s);
        SessionTriggerhelper.createMeeting(userid,s);
         Test.stopTest();
    }
}
Can anyone help me with this test class?
Hi All,
          I have created a test class for a class but its failing and giving me error:- System.CalloutException: You have uncommitted work pending. Please commit or rollback before calling out.
my class is given below:-

global without sharing class ZoomService {
    @Future(callout=true)
    public static void createWebinar(String requestBody, String userId, Id sessionId){
        SessionTriggerHelper.runTrigger = false;
        String requestEndpoint =ZoomJWTAuthentication.getZoomCredentials().rie__Zoom_URL__c + 'users/'+userId+'/webinars';
        String requestMethod = 'POST';
        
        httpResponse res = ZoomCalloutService.postCallout(requestMethod, requestEndpoint, requestBody);
        CreateWebinarJSONParser cwp = CreateWebinarJSONParser.parse(res.getBody());
        Session__c ss = [Select id, rie__Zoom_URL__c, rie__Meeting_ID__c, 
                         rie__Meeting_Password__c, rie__Session_Type__c
                         from Session__c 
                         where Id =: sessionId];
        ss.rie__Zoom_URL__c = cwp.join_url;
        ss.rie__Meeting_ID__c = String.valueOf(cwp.Id);
        ss.rie__Meeting_Password__c = cwp.password;
        ss.rie__Session_Type__c = 'Webinar';
        update ss; 
        
        //System.debug(res.getStatusCode());
    }
    
    @Future(callout=true)
    public static void createUser(String requestBody){
        String requestEndpoint = ZoomJWTAuthentication.getZoomCredentials().rie__Zoom_URL__c + 'users';
        String requestMethod = 'POST';
        Map<String, Object> reqMap = new Map<String, Object>();
        reqMap.put('action', 'create');
        Map<String, Object> userInfo = new Map<String, Object>();
        userInfo.put('email', 'absinghrathore127@gmail.com');
        userInfo.put('type', '1');
        userInfo.put('first_name', 'abhimanyu');
        userInfo.put('last_name', 'singh');
        reqMap.put('user_info', userInfo);
        String  reqBody = JSON.serialize(reqMap);
        
        httpResponse res = ZoomCalloutService.postCallout(requestMethod, requestEndpoint, reqBody);
        System.debug(res.getStatus());
        System.debug(res.getBody());
    }
    
    @Future(callout=true)
    public static void listUsers( String emailId, Id zoomUserRecordId){
        String requestEndpoint = ZoomJWTAuthentication.getZoomCredentials().rie__Zoom_URL__c + 'users';
        String requestMethod = 'GET';
        
        httpResponse res = ZoomCalloutService.getCallout(requestMethod, requestEndpoint);
        if(res.getStatusCode() == 200){
            GetUsersJSONParser gu = GetUsersJSONParser.parse(res.getBody());
            List<GetUsersJSONParser.users>  userList= gu.users;
            String userId = '';
            if(!userList.isEmpty()){
                for(GetUsersJSONParser.users u : userList){
                    if(u.email != Null && u.email == emailId){
                       userId = u.id;
                       break; 
                    }
                }
                rie__Zoom_User__c zoomUser = [Select id from rie__Zoom_User__c where Id =: zoomUserRecordId];
                if(userId != Null){
                    zoomUser.rie__User_Id__c = userId;
                }
                update zoomUser;
            }
            
        }
        
    }
    
    //@Future(callout=true)
    webservice static String getMeetingRecording(String meetingId, Id recId){
        String requestEndpoint = ZoomJWTAuthentication.getZoomCredentials().rie__Zoom_URL__c + 'meetings/'+meetingId+'/recordings';
        String requestMethod = 'GET';
        
        httpResponse res = ZoomCalloutService.getCallout(requestMethod, requestEndpoint);
        if(res.getStatusCode() == 200){
            GetRecordingJSONParser getRecordingJSONParser = GetRecordingJSONParser.parse(res.getBody());
            Session__c ss = [Select id, rie__Zoom_URL__c, rie__Meeting_ID__c, 
                             rie__Zoom_Recording_URL__c
                             from Session__c 
                             where Id =: recId];
            ss.rie__Zoom_Recording_URL__c = getRecordingJSONParser.share_url;
            update ss;
            return 'Success';  
        }else{
            return 'There is no recording for this meeting ';
        }
    }
    
}
my test class is given below:-
@isTest
private class ZoomServiceTest {
    public static Integer RESPONSE_CODE = 200;
    private class Mock implements HttpCalloutMock {
        
        public HTTPResponse respond(HTTPRequest req) {
            
            HTTPResponse res = new HTTPResponse();
            
            res.setStatusCode(200);
            res.setBody('{"topic": "Test Webinar","type": 5,"start_time": "2020-04-20T06:59:00Z","duration": 60,"timezone": "America/Los_Angeles","password": "avfhfgh","agenda": "Test Webinar","recurrence": {"type": 1,"repeat_interval": 1,"end_date_time": "2020-04-20T06:59:00Z"},"settings": {"host_video": true,"panelists_video": true,"practice_session": true,"hd_video": true,"approval_type": 0,"registration_type": "integer",'+
                        +'"audio": "both","auto_recording": "none","enforce_login": false,"enforce_login_domains": "","alternative_hosts": "","close_registration": true,"show_share_button": true,"allow_multiple_devices": false,"registrants_email_notification": true}}');
            
            return res;
        }
    }
    
    
    static testmethod void createWebinarTest() {
        
        Test.setMock(HttpCalloutMock.class, new Mock());
        Test.startTest();
        
        rie__Event__c evt = new rie__Event__c();
        insert evt;
        
        Session__c ss = new Session__c();
        ss.name = 'Test webinar'; 
        ss.rie__Event__c = evt.Id;
        insert ss;
        
         ZoomService.createWebinar('','',ss.Id);
        //ZoomService.createUser(res);
       ZoomService.listUsers('',ss.id);
        ZoomService.getMeetingRecording('',ss.id);
        Test.stopTest();
    }
}
Can anyone help me with this error?
Hi All,
         I have written a test class for trigger helper. Can anyone help me with the test coverage as it's not covering 75 %?
 My helper class is given below:-

// Helper class for Trigger_Registration
public without sharing class RegistrationTriggerHelper {

    public static List<rie__Registration__c> newRegistration = new List<rie__Registration__c>();
    public static List<rie__Registration__c> oldRegistration = new List<rie__Registration__c>();    
    public static Map<Id, rie__Registration__c> newMapRegistration = new Map<Id, rie__Registration__c>();
    public static Map<Id, rie__Registration__c> oldMapRegistration = new Map<Id, rie__Registration__c>(); 
    
    public static boolean runTrigger = TRUE;
    
    // method to link the contact and registration
    public static void linkContact(){
    
        List<rie__Registration__c> applicableRegistrations = new List<rie__Registration__c>();
        Set<String> emails = new Set<String>();
        for( rie__Registration__c regObj : newRegistration ) {
            if( regObj.rie__Email__c != Null ) {
               emails.add( regObj.rie__Email__c ); 
               applicableRegistrations.add( regObj ); 
            }
        }
        
        if( applicableRegistrations.size() >  0 ) {
            Map<String, Contact> mapEmailToContact = new Map<String, Contact>();    
            List<Contact> contacts = new List<Contact>([Select Id, Email 
                                                                   From Contact 
                                                                   Where Email IN :emails
                                                                   Order By CreatedDate DESC
                                                                   ]);
            if( contacts != Null && contacts.size() > 0 ){
                for( Contact con : contacts ){
                    String mapKey = con.Email.toLowerCase();
                    if( !mapEmailToContact.containsKey( mapKey )) {
                        mapEmailToContact.put( mapKey, con );  
                    }
                }
            }
        
            List<rie__Registration__c> registrationNeedsNewContact = new List<rie__Registration__c>();
            Map<Id, rie__Registration__c> registrationToUpdate = new Map<Id, rie__Registration__c>();
            Map<Id, Contact> contactsToUpsert = new Map<Id, Contact>();
            
            for(rie__Registration__c regObj : applicableRegistrations){
                String emailLowerCase = regObj.rie__Email__c.toLowerCase();
                if( mapEmailToContact.containsKey( emailLowerCase )){
                    rie__Registration__c regObjToUpdate = new rie__Registration__c( Id = regObj.Id );
                    regObjToUpdate.rie__Contact__c = mapEmailToContact.get(emailLowerCase).Id; 
                    registrationToUpdate.put( regObjToUpdate.Id, regObjToUpdate );
                    
                    Contact conToUpdate  = new Contact( Id = regObjToUpdate.rie__Contact__c );
                    conToUpdate.FMS_2019_Registration__c = regObjToUpdate.Id;
                    contactsToUpsert.put( regObjToUpdate.Id, conToUpdate );
                }
                else {
                    registrationNeedsNewContact.add( regObj );
                }
            }
            
            List<Contact> contactToInsert = new List<Contact>();
            for(rie__Registration__c regObj : registrationNeedsNewContact ){
                Contact con = new Contact();
                con.LastName = regObj.rie__Last_Name__c;
                con.Email = regObj.rie__Email__c;
                con.FMS_2019_Registration__c = regObj.Id;
                contactsToUpsert.put(regObj.Id, con);
                contactToInsert.add( con );
            }
            
            if( contactsToUpsert.size() > 0 ) {
                upsert contactsToUpsert.values();
                for( Contact con : contactToInsert ) {
                    rie__Registration__c regObjToUpdate = new rie__Registration__c( Id = con.FMS_2019_Registration__c );
                    regObjToUpdate.rie__Contact__c = con.Id; 
                    registrationToUpdate.put( regObjToUpdate.Id, regObjToUpdate );
                }
            }
            
            if( registrationToUpdate.size() > 0 ) {
                RegistrationTriggerHelper.runTrigger = false;
                update registrationToUpdate.values();
                RegistrationTriggerHelper.runTrigger = true;
            }
        }
    }    
}
Test class is given below:-
//Test class for RegisterTriggerHelper
@isTest
public class RegistrationTriggerHelperTest {
    public static testMethod void linkContactTest(){
        Contact con = new Contact(LastName = 'Scot');
        insert con;
        rie__Event__c ev = new rie__Event__c();
         
        Insert ev;
        rie__Registration__c regObj  = new rie__Registration__c();
        regObj.rie__Event__c =   ev.id;
        insert regObj;
        
    }
}
Please help me with the coverage.
 
Hi All,
          I have a test class but it's not covering the part in which I am showing the error message. Can anyone help me with the code coverage,
and let me know what am I missing in test class.
My helper class and Test class is given below :-

public  without sharing class OpportunityLineItemTriggerHelper {
    
    public static List<OpportunityLineItem> newOpportunityLineItem = new List<OpportunityLineItem>();
    public static List<OpportunityLineItem> oldOpportunityLineItem = new List<OpportunityLineItem>();
    public static Map<Id, OpportunityLineItem> newMapOpportunityLineItem = new Map<Id, OpportunityLineItem>();
    public static Map<Id, OpportunityLineItem> oldMapOpportunityLineItem = new Map<Id, OpportunityLineItem>(); 
     public static void validateServiceAgreementProduct(){
        
        Map<Id, Product2> mapProductIdToProduct = new Map<Id, Product2>(
                                                                        [ SELECT Id, Name, Family
                                                                           FROM Product2 
                                                                           WHERE Family LIKE 'SA - %'
                                                                           OR Family LIKE 'Service - %'
                                                                        ]
                                                                        );
        Set<Id> parentOppIds = new Set<Id>();
        Set<Id> serviceProductIds = new Set<Id>();
        List<OpportunityLineItem> serviceProductLines = new List<OpportunityLineItem>();
        for( OpportunityLineItem oppLine : newOpportunityLineItem ){
            if( mapProductIdToProduct.containsKey( oppLine.Product2Id ) ){
                parentOppIds.add( oppLine.opportunityId );
                serviceProductLines.add( oppLine );
                serviceProductIds.add( oppLine.Product2Id );
            }
        }
        
        Map<Id, Opportunity> oppMap = new Map<Id, Opportunity>( [ SELECT Id, Name, 
                                                                 ( SELECT Id, Name, Product2Id 
                                                                   FROM OpportunityLineItems 
                                                                   Where Product2Id not in :serviceProductIds
                                                                 )
                                                                 FROM Opportunity
                                                                 WHERE Id IN: parentOppIds ] 
                                                               );
                                                               
        Map<Id, Set<Id>> mapOppIdToHardwareProductIds = new Map<Id, Set<Id>>();
        for( Opportunity opp : oppMap.values() ) {
            Set<Id> setHarwareProductIds = new Set<Id>();
            for( OpportunityLineItem opli : opp.OpportunityLineItems ) {
                setHarwareProductIds.add( opli.Product2Id );
            }
            mapOppIdToHardwareProductIds.put( opp.Id, setHarwareProductIds );
        }
        
        Map<Id, Set<Id>> mapServicesProductIDToHardwareProductIds = new Map<Id, Set<Id>>();
        for( SA_Junction__c sJunction : [ SELECT Id, Hardware_Product__c, 
                                          Services_Product__c 
                                          FROM SA_Junction__c 
                                          Where Services_Product__c in :serviceProductIds
                                         ] 
                                         ){
            Set<Id> hardwareProductIds = mapServicesProductIDToHardwareProductIds.get( sJunction.Services_Product__c );
            hardwareProductIds = hardwareProductIds == null ? new Set<Id>() : hardwareProductIds;
            hardwareProductIds.add( sJunction.Hardware_Product__c );                             
            mapServicesProductIDToHardwareProductIds.put( sJunction.Services_Product__c, hardwareProductIds );                                        
        }
        
        for( OpportunityLineItem oppLine : serviceProductLines ){
            Set<Id> actualHardwareProductIdsOnOpp = mapOppIdToHardwareProductIds.get( oppLine.OpportunityId );
            Set<Id> expectedHardwareProductIds = mapServicesProductIDToHardwareProductIds.get( oppLine.Product2Id );
            if( expectedHardwareProductIds != null && expectedHardwareProductIds.size() > 0 
                && actualHardwareProductIdsOnOpp != null && actualHardwareProductIdsOnOpp.size() > 0 ) {
                Boolean hasExpectedHardware = false;
                for( Id hardwareProdId : actualHardwareProductIdsOnOpp ) {
                    if( expectedHardwareProductIds.contains( hardwareProdId )) {
                        hasExpectedHardware = true;
                        break;  
                    }
                }
                if( !hasExpectedHardware ) {  
                    oppLine.addError('You need to select the correct agreement based on hardware products.'); 
                }
            }
        }

    }
}
how to cover bold part?
Test class for trigger helper:-
@istest

private class Trigger_OpportunityLineItemTest {
static testmethod void validateServiceAgreementProductTest(){
        Account accTest = new Account( Name = 'Test Account' );
        insert accTest;
        
        Opportunity oppTest = new Opportunity( Name = 'Test Opportunity',
                                              StageName = 'Working',
                                              CloseDate = System.today(),
                                              AccountId = accTest.Id );
        insert oppTest;
        
        Product2 prod = new Product2( Name ='EV - PM1H0000BD',
                                     isActive = TRUE,
                                     Family = ' Printers' );
        insert prod;
        
        PricebookEntry pbe = new PricebookEntry( UnitPrice = 10,
                                                Product2Id = prod.Id,
                                                Pricebook2Id = Test.getStandardPricebookId(),
                                                isActive = TRUE, 
                                                UseStandardPrice = FALSE );
        insert pbe;
        
        
        Product2 prod1 = new Product2( Name ='Service Agreement - Full - Primacy Dual',
                                      isActive = TRUE,
                                      Family = ' SA - Hardware' );
        insert prod1;
        
        PricebookEntry pb = new PricebookEntry( UnitPrice = 20,
                                               Product2Id = prod1.Id,
                                               Pricebook2Id = Test.getStandardPricebookId(),
                                               isActive = TRUE, 
                                               UseStandardPrice = FALSE );
        insert pb;
        
        OpportunityLineItem oppLine = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                              Quantity = 2,
                                                              UnitPrice = 10,
                                                              Product2Id = prod.id,
                                                              PriceBookEntryId = pbe.Id
                                                             );
        insert oppLine;
        
        OpportunityLineItem oppLine1 = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                               Quantity = 2,
                                                               UnitPrice = 10,
                                                               Product2Id = prod1.id,
                                                               PriceBookEntryId = pb.Id
                                                              );
        insert oppLine1;
        
        OpportunityLineItem Oli = [select Name,Product2.Name
                                   from OpportunityLineItem 
                                   where OpportunityId =: oppTest.Id AND Product2Id =: prod.id ];
        System.assertEquals('EV - PM1H0000BD', Oli.Product2.Name );
    }
    
    static testmethod void validateServiceAgreementProductTestError(){
        Account accTest = new Account( Name = 'Test Account' );
        insert accTest;
        
        Opportunity oppTest = new Opportunity( Name = 'Test Opportunity',
                                              StageName = 'Working',
                                              CloseDate = System.today(),
                                              AccountId = accTest.Id );
        insert oppTest;
        
        Product2 prod = new Product2( Name ='EV - PM1H0000BD',
                                     isActive = TRUE,
                                     Family = 'Printers' );
        insert prod;
        
        PricebookEntry pbe = new PricebookEntry( UnitPrice = 10,
                                                Product2Id = prod.Id,
                                                Pricebook2Id = Test.getStandardPricebookId(),
                                                isActive = TRUE, 
                                                UseStandardPrice = FALSE );
        insert pbe;
        
        Product2 prod1 = new Product2( Name ='Service Agreement - Full - SD260',
                                      isActive = TRUE,
                                      Family = 'SA - Hardware' );
        insert prod1;
        
        PricebookEntry pb = new PricebookEntry( UnitPrice = 20,
                                               Product2Id = prod1.Id,
                                               Pricebook2Id = Test.getStandardPricebookId(),
                                               isActive = TRUE, 
                                               UseStandardPrice = FALSE );
        insert pb;
        
        SA_Junction__c SA = new SA_Junction__c();
        SA.Hardware_Product__c =  prod.id;
        SA.Services_Product__c =  prod1.id;
        insert SA;
        
        OpportunityLineItem oppLine = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                              Quantity = 2,
                                                              UnitPrice = 10,
                                                              Product2Id = prod.id,
                                                              PriceBookEntryId = pbe.Id
                                                             );
        insert oppLine;
        
        OpportunityLineItem oppLine1 = new OpportunityLineItem( OpportunityId = oppTest.Id,
                                                               Quantity = 2,
                                                               UnitPrice = 10,
                                                               Product2Id = prod1.id,
                                                               PriceBookEntryId = pbe.Id
                                                              );
         insert oppLine1;
        try{
             OpportunityLineItem Oli = [select Name,Product2.Name
                                   from OpportunityLineItem 
                                   where OpportunityId =: oppTest.Id AND Product2Id =: prod1.id ];
           System.assertEquals('Service Agreement - Full - SD260',oppLine1.Product2.Name);
             
        }
        catch(Exception e) {
            Boolean expectedExceptionThrown =  e.getMessage().contains('You need to select the correct agreement based on hardware products.') ? true : false;
            System.AssertEquals(expectedExceptionThrown, false);
            
        }
        
    }
}
Hi All,
I am creating a batch for the requirement in which if lead has duplicates based on name than a checkbox field named ToBeDeleted__c should set to true on the duplicate of a lead records.
Can anyone guide me with this requirement?
Thanks in advance
Hi All,
         i have a requirement in which i have a field on lead object called ToBeDeleted__c, which should be true when one of the following condition is true :-
1.lead name contains 'test'   
2.The owner of the lead is inactive.
3.lead has duplicate records than last created record need to be checked.
4.lead is created 1 year or more than one year ago.
I want to create a batch which set the checkbox field true when above condition met.
How to do it ?Can someone guide me with it?
Thanks