Apex入站电子邮件服务测试类的代码覆盖率差

时间:2018-11-30 17:37:30

标签: unit-testing salesforce apex-code salesforce-communities

我们的要求是处理来自特定电子邮件地址的传入电子邮件并创建案例。我的课很好,但测试课很差,代码覆盖率仅为10%。谁能帮帮我吗。我可以很轻松地处理电子邮件,但无法通过考试。谢谢!

*** 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 ()
}

下面是文本类

@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;      


    }     

}

以下是我们客户的典型模板。我必须解析电子邮件正文并创建大小写。

**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.
Please present company identification and the Service Hub call number to which this visit is in response.

0 个答案:

没有答案