我们的要求是处理来自特定电子邮件地址的传入电子邮件并创建案例。我的课很好,但测试课很差,代码覆盖率仅为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.