2016-08-30 3 views
0

Я создал класс для salesforce в песочнице, и он работает хорошо, но когда я пытаюсь развернуть его для производства, я получаю низкий код covarage. Я пробовал все, что знаю, но кот нашел решение, Вот код, Любая помощь?Код Saleseforce covrage низкий (53%), и я не знаю, почему

public Class CandidateFileUploads_Ver1{ 

public String parentId ; 
public String idxVal {get;set;} 
public Map<String, Attachment> attachments {get;set;} 
public Map<String, Attachment> attachmentsDup {get;set;} 

public Boolean validateUser {get;set;} 
public String multipulDocs {get;set;} 
public String userMessage {get;set;} 

private static final Map<String, String> descriptionNameMap = new Map<String, String>{ 
'Upload a scan of the Passport'=>'Passport', 
'Upload a Resume (CV)'=>'Resume (CV)'}; 

private static final Map<String, String> descriptionCheckFieldMap = new Map<String, String>{ 
'Upload a scan of the Passport'=>'Passport_Attached__c', 
'Upload a Resume (CV)'=>'CV_Attached__c'}; 


public CandidateFileUploads_Ver1(ApexPages.StandardController controller){ 

    idxVal = ''; 
    validateUser = true; 
    multipulDocs = System.Label.multiple_docs; 
    userMessage = ''; 

    checkUserValid(); 
    attachments = new Map<String, Attachment>();  
    attachmentsDup = new Map<String, Attachment>(); 

    parentId = System.currentPageReference().getParameters().get('Id'); 
    //parentId = '0034E00000FVJzA'; 
    List<Attachment> existingAttachments = fetchAllAttachments(parentId);//get all attachements for thew user 

    for(String key :descriptionNameMap.keySet()){ 
     String kokp = descriptionCheckFieldMap.get(key); 
     attachments.put(key.toLowerCase(), new Attachment(parentId=parentId, Description=key, body=null,Name = kokp)) ; 
    }  

    for(Attachment attach :existingAttachments){ 
     attach.body = null; 
     attachments.put(attach.Description.toLowerCase(), attach);    
    } 
} 

public void checkUserValid(){ 
    String hours = System.Label.hours; 
    String whitelist = System.Label.whitelist; 
    ID pId = System.currentPageReference().getParameters().get('Id'); 
    Boolean validateUser = true; 
    String userMessage; 

    Contact parenter = new Contact(Id=pId); 
    // Validate Proccess status: get proccess string status 
      String getStatus = parenter.Process_Status__c; 
      String[] whitelistArr = whitelist.split(',');// split proccess string 

      Boolean checkWhiteList = false; 
      for(String val : whitelistArr){ 
       if(val == getStatus) { 
        checkWhiteList = true; 
       } 
      } 

      if(validateUser != checkWhiteList){ 
       validateUser = false; 
       userMessage = System.Label.error_not_premitted; 
       return; 
      } 

    //Validate Dates 
      //Datetime getLinktimestamp = (Datetime) contactSObject.get('linktimestamp__c'); 
      Datetime getLinktimestamp = parenter.linktimestamp__c; 
      Datetime getValidTime = getLinktimestamp.addHours(Integer.valueof(hours.trim())); //add 48 hours 
      Datetime timeNow = System.now(); 

      if(getValidTime < timeNow){//if if more then 48 hours 
       validateUser = false; 
       userMessage = System.Label.error_expired; 
       return; 
      } 
} 


public Datetime getLinktimestamp(){ 
    ID pId = System.currentPageReference().getParameters().get('Id'); 
    Datetime accts = [SELECT linktimestamp__c FROM Contact WHERE Id=:pId].linktimestamp__c; 
    return accts; 
} 


public List<Contact> contactObj(){ 
    ID pId = System.currentPageReference().getParameters().get('Id'); 

    sObject mySObject =[SELECT linktimestamp__c,Process_Status__c FROM Contact WHERE Id=:pId]; 
    //Datetime llli = s.linktimestamp__c; 
    String strObjectName = String.valueOf(mySObject.get('linktimestamp__c')); 

    List<Contact> obj = [SELECT linktimestamp__c,Process_Status__c FROM Contact WHERE Id=:pId]; 
    return obj; 
} 

public void uploadAttachment(){  
    List<Attachment> uploads = new List<Attachment>() ; 
    List<Attachment> deletes = new List<Attachment>() ; 

    try{ 
     for(integer i = 0 ; i < attachments.values().size() ; i++){ 

      Attachment attach = attachments.values()[i] ; 
      if(attach.parentId == NULL){ 
         attach.parentId = System.currentPageReference().getParameters().get('Id'); 
      } 
      //this is a file that was uploaded now 
      if(attach.body != NULL){ 
       //remove current attachement before uploading a new one 
       if(attach.Id != NULL){ 
        deletes.add(attachments.values().remove(i)); 
       } 

       attach.Name = renameFile(attach.Name, attach.Description); 
       uploads.add(attach) ; 
      } 
     } 

     if(!deletes.isEmpty()){ 
      delete deletes ; 
     } 

     if(!uploads.isEmpty()){   
      for(Attachment atchmnt :uploads){ 
       atchmnt.Id = null; 
      } 

      insert uploads; 

      Contact parent = new Contact(Id=parentId); 

      for(Attachment attach :getUpdatedAttachments(uploads).values()){ 
       attach.body = null; 
       attachments.put(attach.Description.toLowerCase(), attach); 

       parent.put(descriptionCheckFieldMap.get(attach.Description), true);      
      } 

      update parent; 

      ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.info,'Attachment upload Successfully'); 
      ApexPages.addMessage(myMsg); 
     } 

    }   
    catch(exception e){ 
     ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'An Error occured when uploading attachment'); 
     ApexPages.addMessage(myMsg); 
    } 
} 

public void removeRow(){ 
    Attachment a = attachments.get(idxVal.toLowerCase()); 

    Contact parent = new Contact(Id=parentId); 
    parent.put(descriptionCheckFieldMap.get(a.Description), false); 

    delete a; 
    update parent; 

    system.debug('attachments before: ' + attachments); 
    attachments.put(a.Description.toLowerCase(), new Attachment(parentId = parentId, description = a.description, body=null)); 
    system.debug('attachments after: ' + attachments); 
}  

private static String renameFile(String fileName, String description){ 
    String newName = descriptionNameMap.get(description); 
    if(String.isNotBlank(fileName) && fileName.contains('.')){ 
     newName += fileName.substring(fileName.lastIndexOf('.'), fileName.length()); 
    } 

    return newName; 
} 

private static Map<String,Attachment> getUpdatedAttachments(List<Attachment> attachList){ 

    Map<String,Attachment> attMap = new Map<String,Attachment>(); 

    for(Attachment att : [SELECT Id,Name,Description 
             FROM Attachment 
             WHERE Id = :attachList]){ 
     attMap.put(att.Description.toLowerCase(), att) ;  
    } 

    return attMap; 
} 

public List<Attachment> fetchAllAttachments(String parentId){ 

    return [SELECT Id,Name,Description,parentId 
      FROM Attachment 
      WHERE ParentId =: parentId 
      AND Description IN :descriptionNameMap.keySet()]; 
} 

}

+0

Спасибо за ответы. Но основная проблема заключалась в том, что мне пришлось написать тестовый класс (извините, но я этого не знал). и он отлично работает. – Eli

ответ

1

Вы можете использовать Консоль разработчика, чтобы увидеть, какая часть вашего кода покрыта, а какая нет, а затем адаптируйте свои тесты. При редактировании кода в консоли разработчика в верхнем левом углу страницы есть опция «Кодовый охват».

1

Что вы имеете в виду «Я попробовал все, что я знаю, но кот найти решение»? Это требование Salesforce - код Apex должен покрываться испытаниями, по крайней мере, на 75%. Развертывание не выполняется, если средний охват не соответствует порогу 75%.

Единственное решение здесь - написать тесты для вашего кода.

+0

Как я могу написать тест для конструктора и методов с аргументами? – Eli

+1

Что мешает вам вызывать в методах тестирования ваши конструкторы или методы с аргументами? Например, здесь обсуждается конструктор контроллера тестирования - https://developer.salesforce.com/forums/?id=906F00000008zbRIAQ –

+2

Также https://developer.salesforce.com/docs/atlas.en-us.pages. meta/pages/pages_controller_error_handling.htm может помочь. –

Смежные вопросы