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

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 283
    Questions
  • 264
    Replies
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 have a trigger in which i want to populate Case field(Email_team__c) using metadata (Team_Setup__mdt) field(Team__c).
my trigger helper is given below:-
 
public without sharing class CaseTriggerHelper {
    
    public static List<Case> newCases = new List<Case>();
    public static List<Case> oldCases = new List<Case>();    
    public static Map<Id, Case> newMapCases = new Map<Id, Case>();
    public static Map<Id, Case> oldMapCases = new Map<Id, Case>(); 
    
    Public static void caseEmailTeamInsertion(){
        Map<String, List<Team_Setup__mdt>> teamSetupMetadataMap = new Map<String,  List<Team_Setup__mdt>>();
        List<Team_Setup__mdt> teamSetupMetadata = new List<Team_Setup__mdt>([SELECT Id, Product__c,Queue__c,
                                                                             Record_Type__c,Team__c
                                                                             FROM Team_Setup__mdt
                                                                           ]);
        List<Case> CaseListToInsert = new List<Case>();
        if(teamSetupMetadata != Null && teamSetupMetadata.size() > 0){
            for(team_Setup__mdt ts : teamSetupMetadata){
                String stRecordType  =  ts.Record_Type__c.substringBefore(',');
                List<Team_Setup__mdt> tsList =   new List<Team_Setup__mdt>([SELECT Id, Product__c,Queue__c,
                                                                             Record_Type__c,Team__c
                                                                            FROM Team_Setup__mdt 
                                                                            WHERE Record_Type__c =: ts.Record_Type__c
                                                                            ]);
               teamSetupMetadataMap.put(stRecordType, tsList);     
            }
           
            
        }
         System.debug('*'+teamSetupMetadataMap);
        if(teamSetupMetadataMap != Null && teamSetupMetadataMap.size()  >0){
             
            for(Case caseObj : newCases){
                  System.debug('*' +teamSetupMetadataMap.containsKey(caseObj.RecordType.DeveloperName));
                if(caseObj.RecordType.DeveloperName != Null &&
                   teamSetupMetadataMap.containsKey(caseObj.RecordType.DeveloperName)){
                      
                    List<Team_Setup__mdt> tm = teamSetupMetadataMap.get(caseObj.RecordType.DeveloperName);
                       For( Integer TeamMetadata = 0; TeamMetadata <= tm.Size(); TeamMetadata++ ){
                           if(caseObj.Product__c ==  tm[TeamMetadata].Product__c){
                               caseObj.Email_Team__c = tm[TeamMetadata].Team__c;
                               CaseListToInsert.add(caseObj);
                               System.debug('*'+caseObj.Email_Team__c);
                           }
                           
                       }
                       
                }
            }
            if(CaseListToInsert.Size() > 0){
                insert CaseListToInsert;
            }
        }
     
    }
    
}
the case field is not populating.Can anyone help me with this?
Hi All,
         I have a requirement in which i want to pupulate case Team__c(picklist field) using the custom meta data type called Team_Setup__c. I created some fields given as RecordType__c,Product__c,queue__c,Team__c also i created records in metatadata.My requirement is if for particular record type the products are same than the Team__c(In Case )should be populate related to it.and if for same record type but product are different than we will check queue and populate team according to it.
Can anyone help me with this requirement?
HI All,
        I have a trigger in which i am deleting asset when its related opportunity line item is deleted but its giving me error that list  System.QueryException: List has more than 1 row for assignment to SObject
        How to solve this error? 
         My trigger helper 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 deleteAssets( ){
        
        Set<Id> applicableOppIds = new Set<Id>();
        for( OpportunityLineItem oli : oldOpportunityLineItem ){
            
            applicableOppIds.add( oli.OpportunityId );
        }
        
        
        
        Map<String, Asset> mapOfProCodeToAsset = new Map<String, Asset>();
        List<Asset>  ListAsset = [Select Id, Product2.ProductCode, AccountId From Asset ];
        
        for( Asset ast : ListAsset ){
            String uniqueId = ast.Product2.ProductCode + '-' + ast.AccountId;
            mapOfProCodeToAsset.put( uniqueId,ast );
        }
        System.debug('mapOfProCodeToAsset'+mapOfProCodeToAsset);
        
        List<Asset> deleteListAsset = new List<Asset>();
        //Collecting all child records related to Parent records
        for( Opportunity oppObj : [ SELECT Id, Name, StageName, AccountId, Account.Name,
                                   ( SELECT Id, Name, OpportunityId, Current_Year__c, 
                                    Product2Id, Product2.Name,Product2.ProductCode, Product2.Family, 
                                    Product2.AcctSeedERP__Inventory_Asset__c, Quantity, Description
                                    FROM OpportunityLineItems 
                                    Where Id In : oldMapOpportunityLineItem.keySet() )
                                   FROM Opportunity
                                   WHERE  Id IN :applicableOppIds
                                   
                                  ] ){
                                      
                                      for( OpportunityLineItem oppLine : oldOpportunityLineItem ){
                                          Id prod = oppLine.Product2Id;
                                          //Opportunity opp = oppLine.Opportunity;
                                          System.debug('product'+prod);
                                          String uniqueId = oppLine.ProductCode + '-' + oppObj.AccountId;
                                          System.debug('UniqueListAsset'+uniqueId);
                                          if(mapOfProCodeToAsset.containsKey(uniqueId)){
                                              System.debug('#####' );
                                              deleteListAsset.add(mapOfProCodeToAsset.values());
                                              System.debug('deleteListAsset'+deleteListAsset.Size());
                                          }
                                          
                                      }
                                  }
        System.debug('deleteListAsset'+deleteListAsset);
        if( deleteListAsset.Size() > 0 ){
            delete deleteListAsset;
        }
    }
}
Hi All,
I want to delete assets when its related opportunity line item is deleted.
i have a trigger helper 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 deleteAssets(){
        
        list<id> ProductIds=new list<id>();
        for(Product2 prod :  [SELECT id,Name
                              FROM Product2 
                              ] )
        {
            ProductIds.add(Prod.id);
        }  
        List<Asset> deleteListAsset = new List<Asset>();
        //Collecting all child records related to Parent records
        list<Asset> listOfAssets = [ select id, Product2Id 
                                     from Asset 
                                     where Product2Id in :ProductIds ];
        for(OpportunityLineItem oli : oldOpportunityLineItem){
            for(Asset ast : listOfAssets){
                if (ast.Product2Id == oli.Product2Id){
                    deleteListAsset.add(ast);
                    
                }
             }
            System.debug('deleteListAsset'+deleteListAsset);
        }
        
        system.debug('listOfAssets'+listOfAssets);
        //deleting Asset records
        if( deleteListAsset.Size() > 0 ){
             delete deleteListAsset;
        }
     }
 }
Can anyone help me with this requirement if i am doing it wrong?
Any suggestions?
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