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

when i am running my test class i am getting following error please help me on that

System.NullPointerException: Attempt to de-reference a null object
Class.OpportunityUpdateFromTicketHandler.emailNotificationFromIteroBackOffice: line 30, column 1
Class.OpportunityUpdateFromTicketHandlerTest.emailNotificationFromIteroBackOfficeTest: line 76, column 1

Apex class :
-----------------
ublic class OpportunityUpdateFromTicketHandler {
    
    Public static void sendEmail(List<String> toAddress,EmailTemplate et)
    {
       List<Messaging.SingleEmailMessage> allmsg = new List<Messaging.SingleEmailMessage>();
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
                mail.setTemplateId(et.Id);
                mail.setToAddresses(toAddress);
                mail.setSubject(et.subject);
                mail.setHTMLBody(et.Body);
                allmsg.add(mail);
            Messaging.sendEmail(allmsg);
        
    }
    Public static EmailTemplate getQuery(String tempname)
    {
      EmailTemplate et = [select id,Subject,Body from EmailTemplate where DeveloperName =: tempname];
        return et; 
    }
    // created by Jayaramu for Technical Det story
    Public static void emailNotificationFromIteroBackOffice(List<case> ticketList,Map<Id,Case> oldMapCase)
    {
        EmailTemplate et = getQuery('iTero_back_office_Template');
        system.debug('@@@@@@@@@'+et);
        Map<ID, RecordType> recordTypeMap = New Map<ID, RecordType>([Select ID, Name From RecordType Where sObjectType = 'Case']);
        List<string> toAddress = new List<string>();    
        for(Case ticket :ticketList)
        {
        if(recordTypeMap!=null && ticket !=null && recordTypeMap.get(ticket.recordTypeID).name.containsIgnoreCase('iTero Contracts') && ticket.Ticket_Type__c =='New scanner sale' && ticket.Final_Status__c != oldMapCase.get(ticket.Id).Final_Status__c && ticket.Final_Status__c =='Processed/Assigned to Logistics' )
        {
            if(ticket.Region__c =='NA' || ticket.Region__c =='LATAM')
            {
              toAddress.add('test@gmail.com');
                system.debug('#######' + ticket.managerid__c);
                if(toAddress !=null && et!=null)
                {
                    sendEmail(toAddress, et);
                }
                
            }
        }
        
        }
   }

Test Class
------------------
@isTest
public class OpportunityUpdateFromTicketHandlerTest {
        public static Id eUiteroRecordTypeId  =  Schema.SObjectType.Case.getRecordTypeInfosByName().get('iTero Contracts').getRecordTypeId();
    public static Id eUiteroRecordTypeId1  =  Schema.SObjectType.Case.getRecordTypeInfosByName().get('Incentive Compensation Request').getRecordTypeId();
    //public static Id eUiteroRecordTypeId2  =  Schema.SObjectType.Case.getRecordTypeInfosByName().get('iTero Training').getRecordTypeId();
  @isTest static void emailNotificationFromIteroBackOfficeTest(){
      Profile p = [SELECT Id FROM Profile WHERE Name='System Administrator']; 
      Userrole objr = [SELECT Id FROM UserRole WHERE Name = 'Global Administrator' LIMIT 1];
       User thisUser = new User(Alias = 'standt', Email='contractdesk@testorg.com', 
                                 EmailEncodingKey='UTF-8', LastName='contractdesk', LanguageLocaleKey='en_US', 
                                 LocaleSidKey='en_US', ProfileId = p.Id,UserRoleId = objr.Id,
                                 TimeZoneSidKey='America/Los_Angeles', UserName='contractdesk@testorg.com');
        TestDataBuilder testBuilder = new TestDataBuilder();
        //insert manager
        User usrManager             = new User();
        usrManager          = testBuilder.dummyUser(0);
        usrManager.UserRoleId = objr.Id;
        insert usrManager; 
        //Insert User
        User usr                = new User();
        usr             = testBuilder.dummyUser(1);
        usr.ManagerId   = usrManager.Id;
        usr.UserRoleId = objr.Id;
        
        insert usr;
      
      System.runAs(thisUser){
      List<case> caseList = new List<case>();
        //insert Case
        Case cse                    = new Case();
        cse.RecordTypeId    = eUiteroRecordTypeId;
        cse.Ticket_Type__c  = 'New scanner sale';
        cse.Origin          = 'Web';
        cse.Final_Status__c ='Processed/Assigned to Logistics';
        cse.Region__c = 'NA';
        //cse.Status='Approved';
        cse.Type_of_Credit__c='Internal';
        cse.Reason_for_Credit__c='Staff Discount Coupon';
        cse.Subject='Testing';
        cse.Invoice_Number__c='1234567891';
        cse.Amount_of_credit__c=10;
        cse.Order_type__c='webstore';
        cse.Sales_Order_Number__c='123456';
      caseList.add(cse);
      Case cse1                    = new Case();
        cse1.RecordTypeId    = eUiteroRecordTypeId;
        cse1.Ticket_Type__c  = 'New scanner sale';
        cse1.Origin          = 'Web';
        cse1.Final_Status__c ='Processed/Assigned to Logistics';
        cse1.Region__c = 'NA';
        //cse1.Status='Approved';
        cse1.Type_of_Credit__c='Internal';
        cse1.Reason_for_Credit__c='Staff Discount Coupon';
             cse1.Subject='Testing';
        cse1.Invoice_Number__c='1234567891';
        cse1.Amount_of_credit__c=10;
        cse1.Order_type__c='webstore';
        cse1.Sales_Order_Number__c='123456';
         caseList.add(cse1);
          EmailTemplate et = OpportunityUpdateFromTicketHandler.getQuery('iTero_back_office_Template');
            emailmessage em = new emailmessage();
                em.fromaddress = 'Test@test.com';
                em.toaddress = 'test1@test.com';
                em.subject = 'Test Email';
                em.textbody = 'testing';
                em.parentid = caseList[0].id;
                test.starttest();
                insert em;
      Map<Id,Case> oldMapCase = new Map<Id,Case>(); 
      insert caseList;
      oldMapCase.put(cse.Id, cse);
       System.assertEquals(0, Limits.getEmailInvocations(), 'No emails should be sent');

       OpportunityUpdateFromTicketHandler.emailNotificationFromIteroBackOffice(caseList,oldMapCase);

       System.assertEquals(1, Limits.getEmailInvocations(), 'Emails should be sent');
       Test.stopTest();
      }
  }
        
  }


Thanks!!
Virendra ChouhanVirendra Chouhan

Hello,

You need to create email Template with name "iTero_back_office_Template" in your test class.
You can create it something like that:
 

EmailTemplate emailTemplateObj = new EmailTemplate();
emailTemplateObj.isActive = true;
emailTemplateObj.Name = 'iTero_back_office_Template';
emailTemplateObj.DeveloperName = 'iTero_back_office_Template';
emailTemplateObj.TemplateType = 'text';
emailTemplateObj.FolderId = UserInfo.getUserId();

insert emailTemplateObj;
Prince_sfdcPrince_sfdc
Can you highlight line #30 in your main class and #76 in your test class to see it in detail.