Donate. I desperately need donations to survive due to my health

Get paid by answering surveys Click here

Click here to donate

Remote/Work from Home jobs

0% code coverage for Apex inbound email services test class

Our requirement is to process incoming email from a particular email address and create a case. My class is working fine but the test class is very poor with a code coverage of just 10%. Can any one please help me. I have no trouble processing the emails but unable to succeed in the test class. Thank you!

below is the typical template from our customer. I've to parse the email body and create case.

Assignment Information:

Call/Action #                   00035174 / 1 (Include this # on Invoice)
Call/Action                     Type/Status Test data
Service Center                  021 - Central 
Attention                       TEST CORP

**Customer Details:**
Location                        Store 990
Street Address                  1111 Lane; Ft. Wayne, CA 46804
Point of Contact                Store Manager    
Billing Address                 5960 S Drive;Indianapolis,IN 46100
Billing Phone                   111-523-4601

**Service Call Details:**
Severity            HIGH
Service             Product 
Product             PREP EQUIPMENT 
EquipNo: N/A
SerialNo:N/A
AssetNo: N/A
Symptom             Poor performance
Notes               Test notes.

**Service Requirements:**
Service Window      No Service window define
Start Date/Time     26 JUL 2018 16:07
Respond By          N/A
Complete By         23 AUG 2018 16:07

**Special Instructions:**
Please open the attached Acknowledge.html attachment and accept the service call with an ETA or reject with the appropriate reason.
Before beginning any work in our store please check in at CUSTOMER SERVICE.

APEX CLASS:

*** Apex Email services class***

global Class EtoCkroger implements Messaging.InboundEmailHandler {

// Instantiate variables that we will need for handling this email

String location;
String problem;
Integer locationIdx;
Integer problemIdx;
String locationFinal;
String needFinal;
String serviceFinal;
String tradeFinal;
String InboxFinal;
String initiatorFinal;
String TimeFinal;
String poFinal;
String phoneFinal;
String warrantyFinal;
String descriptionFinal;
String orderFinal;
String criticalFinal;
String productFinal;   
String problemFinal;
String machineFinal;
String krogerFinal;
String siteFinal;
global Messaging.InboundEmailResult handleInboundEmail
           (Messaging.InboundEmail email, Messaging.InboundEnvelope envelope){  
Messaging.InboundEmailResult result = new Messaging.InboundEmailResult();
 if (email.fromaddress =='shashank.sfdev@gmail.com') //// Kroger locations 
               {

String[] bodySplitted = email.PlainTextBody.split('\n');


krogerFinal = email.subject.substringAfter(')').normalizespace();
poFinal = email.plainTextBody.substringBetween('Call/Action #' , 'Call/Action Type/Status').remove('*').remove('(Include this # on Invoice)').normalizespace();
initiatorFinal = email.plainTextBody.substringBetween('Point of Contact', 'Billing Address').remove('*').normalizespace(); 
tradeFinal = email.plainTextBody.substringBetween('Symptom' , 'Notes').remove('*').normalizespace();
problemFinal = email.plainTextBody.substringBetween('Notes' , 'Service Window').remove('*').remove('Service Requirements:').normalizespace(); 
criticalFinal = email.plainTextBody.substringBetween('Severity' , 'Service').remove('*').normalizespace();
productFinal = email.plainTextBody.substringBetween('Product' , 'Symptom').remove('*').trim();
orderFinal = email.plainTextBody.substringBetween('Service Window' , 'Start Date/Time').remove('*').normalizespace();
inboxFinal = email.plainTextBody.substringBetween('Start Date/Time' , 'Respond By').remove('*').normalizespace();
timeFinal = email.plainTextBody.substringBetween('Respond By' , 'Complete By').remove('*').normalizespace();
needFinal = email.plainTextBody.substringBetween('Complete By' , 'Please open').remove('*').remove('Special Instructions:').remove('-').normalizespace();                   
descriptionfinal = 'Product: ' + productFinal + '\n' + 'Service Window: ' + orderFinal + '\n' + 'Start Date/Time: ' + inboxFinal + '\n' + 'Respond By: ' + timeFinal + '\n' + 'Complete By: ' + needFinal;                    

Map<ID,Schema.RecordTypeInfo> rt_Map = Case.sObjectType.getDescribe().getRecordTypeInfosById();
Id RecordTypeIdCase = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Service - Managed Service Case').getRecordTypeId();
Id rtId = RecordTypeIdCase;                

system.debug('productFinal: ' +productFinal);
system.debug('tradeFinal: ' +tradeFinal);
system.debug('poFinal: ' +poFinal);
system.debug('orderFinal: ' +orderFinal);
system.debug('krogerFinal: ' +krogerFinal);
system.debug('problemFinal: ' +problemFinal);
system.debug('initiatorFinal: ' +initiatorFinal);
system.debug('descriptionfinal: ' +descriptionfinal);
if (krogerFinal != NULL) {
    SVMXC__Site__c [] locArray = [Select Id, Name, SVMXC__Site_Phone__c, SVMXC__Account__r.Id from SVMXC__Site__c where NTT_Legacy_Location_ID__c = :krogerFinal];
            try{      

case c= new case();
c.subject= 'BUNNSERVE REQUEST';
c.Case_Type__c= 'Service Request';
c.Origin='Email';
c.Status='new';
c.AccountId = locArray[0].SVMXC__Account__r.Id;
c.SVMXC__Site__c = locArray[0].Id;  
c.RecordTypeId = rtId;    
c.Description= 'Symptom: ' + tradeFinal + '\n' + 'Notes: ' + problemFinal + '\n' + 'Severity: ' + criticalFinal +  + '\n' + descriptionfinal; 
c.KA_PO__c= poFinal;
c.Location_Contact_Name__c = InitiatorFinal; 
c.BSP_Location_Contact_Phone__c = locArray[0].SVMXC__Site_Phone__c;
c.OwnerId = '00G0x000000K0J3';

insert c; 
}
catch(System.dmlException e)
     {System.debug('Error: Unable to create new Case: ' + e);
     }         

              }
        else if (krogerFinal == null){
              System.debug('No location was found');    
        }

    }   
return result;

      } // Close handleInboundEmail ()
}

TEST CLASS:

@istest 
public class TestEtoCKroger {
    static testMethod void TestEtoCKroger () {


       // create a new email and envelope object
Messaging.InboundEmail email = new Messaging.InboundEmail() ;
Messaging.InboundEnvelope env = new Messaging.InboundEnvelope();           

Map<ID,Schema.RecordTypeInfo> rt_Map = Case.sObjectType.getDescribe().getRecordTypeInfosById();
        Id RecordTypeIdCase = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Service - Managed Service Case').getRecordTypeId();
        Id rtId = RecordTypeIdCase;                

   Account acc = new Account();
        acc.Name = 'Test Account';
        acc.BillingStreet = '123  St.';
        acc.BillingCity = 'Springfield';
        acc.BillingState = 'IL';
        acc.BillingPostalCode = '62704';
        insert acc;

    SVMXC__Site__c loc = new SVMXC__Site__c();
       loc.Name = 'Sample Test';
       loc.NTT_Metro_Remote__c = 'Zone A';
       loc.SVMXC__Street__c = '123 E Main St.';
       loc.SVMXC__City__c = 'Springfield';
       loc.SVMXC__State__c = 'ILLINOIS';
       loc.SVMXC__Zip__c = '62511';
       loc.SVMXC__Country__c = 'United States';
       loc.NTT_Legacy_Location_ID__c = 'Sample Test';   
       loc.SVMXC__Account__c = acc.Id;
       loc.BSP_Location_Contact_Phone__c = '111 222 1343';
       insert loc;
Case cse = new  CASE(
   Subject = 'Test Subject',
   Description = 'Test description',
   Origin = 'Email',
   SVMXC__Site__c = loc.Id,
   Status = 'New',
   recordtypeid = rtId,
   accountid= acc.Id,
   KA_PO__c = '1001',
   BSP_Location_Contact_Phone__c = '111 222 3443',
   Case_Type__c = 'Service Request',
   Location_Contact_Name__c = 'Test Man'

);
insert cse;
       // setup the data for the email
     email.subject = 'Kroger Service Call Notification 10935174/1 (HIGH) Sample Test';
     env.fromAddress = 'someaddress@email.com';
     email.plainTextBody = 'email body for testing';


      EtoCKroger TestEtoCKroger=new EtoCKroger ();
      TestEtoCKroger.handleInboundEmail(email, env);
    Messaging.InboundEmailResult result = TestEtoCKroger.handleInboundEmail(email, env);
System.assertEquals( result.success , true);

Case[] c = [select id, SVMXC__site__r.id, SVMXC__Site__c, recordtypeid,  KA_PO__c, Location_Contact_Name__c, description, BSP_Location_Contact_Phone__c, subject, Case_Type__c, Origin, Status, Account.Name, account.id from Case where SVMXC__Site__c = :loc.Id limit 1]; 
 system.debug('TestEtoCKroger: [' + TestEtoCKroger + ']' );

    if(c.size() > 0)

System.assertEquals(c[0].SVMXC__Site__c, loc.Id);
System.assertEquals(c[0].account.Id, acc.Id);
System.assertEquals(c[0].recordtypeId, 'rtId');
System.assertEquals(c[0].KA_PO__c, '1001');
System.assertEquals(c[0].Location_Contact_Name__c, 'Test Man');       
System.assertEquals(c[0].BSP_Location_Contact_Phone__c, '111 222 3443');
System.assertEquals(c[0].subject, 'Test Subject');
System.assertEquals(c[0].Case_Type__c, 'Service Request'); 
System.assertEquals(c[0].Origin, 'Email');
System.assertEquals(c[0].Status, 'New');  
System.assertEquals(c[0].description, 'Test description');  
 update c;      


    }     

}

Comments