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
fiona gentryfiona gentry 

Trigger test class not showing coverage

Dear folks,

Wrote the test class for Trigger test class ,can't see the coverage ,can someone review the class and suggest the fix
 
@isTest 
private class EmailSubjectAswTest {
    
     private static testmethod void EmailSubjectAswTestTest(){
    
    
        Id RecordTypeIdCase = Schema.SObjectType.Account.getRecordTypeInfosByName().get('Executive Rep').getRecordTypeId();
        Case cas = new Case(Status ='New', Priority = 'Medium', Origin = 'Email',RecordTypeId = RecordTypeIdCase,Subject = 'Airtel');  
        
        insert cas; 
    
    
   
     
    }
}

Here is the Trigger apex which has label EmailSubjectAsw and the label has value 'Airtel'
 
trigger PrepaidEmailSubjectAsw on Case (before insert) {
    
    String searchWords;
    List<String> strings;
    
    List<Group> lstPre = [SELECT Id from Group where Type = 'Queue' AND DeveloperNAME = 'Prepaid_Queue'  LIMIT 1];
    
    id rtid = Schema.Sobjecttype.Case.getRecordTypeInfosByName().get('Executive Rep').getRecordTypeId();
    
    if(Trigger.isbefore && Trigger.IsInsert){      
        for (Case c : Trigger.new) {
            searchWords = Label.EmailSubjectAsw;
            strings = searchWords.split(',');
            
            
            if(c.Subject!=Null  && c.RecordTypeId==rtid && lstPre.size() > 0){
                if (isStringInTarget(strings, c.Subject)) {
                    
                    
                    c.OwnerId =lstPre[0].id;    
                }                             
            }    
        }
    }
    
    
    public static Boolean isStringInTarget(List<String> strings, String target) {
        String strRegEx = '(?i)\\b(';
        
        for (String s : strings) {
            strRegEx = strRegEx + s + '|'; 
        }
        strRegEx = strRegEx.removeEnd('|'); 
        strRegEx = strRegEx + ')\\b';
        Matcher matcher=Pattern.compile(strRegEx).matcher(target);
        Boolean result= matcher.find();
        return result;
    }
}

Your help is appreciated

Regards

Fiona
Best Answer chosen by fiona gentry
AnkaiahAnkaiah (Salesforce Developers) 
Hi Fiona,

You need to modify your trigger and you shouldn't write the apex method inside trigger, instead of that you need to create class and refer the class method in trigger.

I have modified your trigger and test class.

trigger:
trigger PrepaidEmailSubjectAsw on Case (before insert) {

    
    List<Group> lstPre = [SELECT Id from Group where Type = 'Queue' AND DeveloperNAME = 'Prepaid_Queue'  LIMIT 1];
    
    id rtid = Schema.Sobjecttype.Case.getRecordTypeInfosByName().get('Executive Response').getRecordTypeId();
    
    if(Trigger.isbefore && Trigger.IsInsert){      
        for (Case c : Trigger.new) {
            //searchWords = Label.EmailSubjectAsw;
            
            if(c.Subject!=Null  && c.RecordTypeId==rtid && lstPre.size() > 0 && c.subject.contains(Label.EmailSubjectAsw) ){                   
                    
                    c.OwnerId =lstPre[0].id;    
                }                             
            }    
        }
    }

Test Class: You were quering the the account recordtype instead of case recordtype. I have modified and getting 100%
@isTest 
private class EmailSubjectAswTest {
    
     private static testmethod void EmailSubjectAswTestTest(){


        Id RecordTypeIdCase = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Executive Response').getRecordTypeId();
        Case cas = new Case(Status ='New', Priority = 'Medium', Origin = 'Email',RecordTypeId = RecordTypeIdCase,Subject = 'Airtel');  
        
        insert cas;  
     
    }
}

If this helps, Please mark it as best answer.

Thanks!!

All Answers

AnkaiahAnkaiah (Salesforce Developers) 
Hi Fiona,

You need to modify your trigger and you shouldn't write the apex method inside trigger, instead of that you need to create class and refer the class method in trigger.

I have modified your trigger and test class.

trigger:
trigger PrepaidEmailSubjectAsw on Case (before insert) {

    
    List<Group> lstPre = [SELECT Id from Group where Type = 'Queue' AND DeveloperNAME = 'Prepaid_Queue'  LIMIT 1];
    
    id rtid = Schema.Sobjecttype.Case.getRecordTypeInfosByName().get('Executive Response').getRecordTypeId();
    
    if(Trigger.isbefore && Trigger.IsInsert){      
        for (Case c : Trigger.new) {
            //searchWords = Label.EmailSubjectAsw;
            
            if(c.Subject!=Null  && c.RecordTypeId==rtid && lstPre.size() > 0 && c.subject.contains(Label.EmailSubjectAsw) ){                   
                    
                    c.OwnerId =lstPre[0].id;    
                }                             
            }    
        }
    }

Test Class: You were quering the the account recordtype instead of case recordtype. I have modified and getting 100%
@isTest 
private class EmailSubjectAswTest {
    
     private static testmethod void EmailSubjectAswTestTest(){


        Id RecordTypeIdCase = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Executive Response').getRecordTypeId();
        Case cas = new Case(Status ='New', Priority = 'Medium', Origin = 'Email',RecordTypeId = RecordTypeIdCase,Subject = 'Airtel');  
        
        insert cas;  
     
    }
}

If this helps, Please mark it as best answer.

Thanks!!
This was selected as the best answer
mukesh guptamukesh gupta
Hi Fiona,

Please follow below code:-
 
@isTest 
private class EmailSubjectAswTest {
    
     private static testmethod void EmailSubjectAswTestTest(){
    
        Profile p = [SELECT Id FROM Profile WHERE Name='System Administrator']; 
        User u = new User(Alias = 'standt', Email='testcasemanager@bcinsourcing.com', 
            EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US', 
            LocaleSidKey='en_US', ProfileId = p.Id, 
            TimeZoneSidKey='America/Los_Angeles', UserName='testcasemanager@bcinsourcing.com');
        
        System.debug('UserName: ' + u.Name);
        system.RunAs(u){
		
	   //Create Public Group
        Group gp            = new Group();
        gp.Name             = 'Test Case';
        gp.DeveloperName    = 'Prepaid_Queue';
        gp.Type             = 'Queue';
        insert gp;	
	
         Id RecordTypeIdCase = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Executive Response').getRecordTypeId();
        Case cas = new Case(Status ='New', Priority = 'Medium', Origin = 'Email',RecordTypeId = RecordTypeIdCase,Subject = 'Airtel');  
        
        insert cas; 
    
		}
}
}

if you need any assistanse, Please let me know!!

Kindly mark my solution as the best answer if it helps you.

Thanks
Mukesh