• mirki
  • NEWBIE
  • 34 Points
  • Member since 2017
  • Salesforce Architect

  • Chatter
    Feed
  • 1
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 11
    Replies
Hi everyone,I am new to salesforce and I'm having trouble with a test class. I'm passing a value to the target class variable but when the SOQL query executes, it returns "System.QueryException: List has no rows for assignment to SObject". Please help


Apex Class

global class MembershipContractPreview_ctrl { 
    public String save { get; set; } 
    public String imgSource{get;set;}
    public String selectedSobject {get;set;}
    public Account objAccount {get;set;}
    public Account acc{get;set;}
    public list<MappingWrapper> listMappingWrapper{get;set;}
    public list<string> objects {get;set;}
    public string editSelectedObject {get;set;}
    public list<SelectOption> selectedObjfields {get;set;}
    public string selectedObj {get;set;}
    public Integer index {get;set;}
    public string membershipType{ get;set; }
    public string frequency{ get;set; }
    public string quantities{ get;set; }
    public string members{ get;set; }  
    public string contractDownloadLink{get;set;}
    
    public MembershipContractPreview_ctrl () { 
        //isContractSigned = false;
        frequency = apexpages.currentpage().getparameters().get('token');
        system.debug('>>>>>>>>>>>>>>>>>>>>'+apexpages.currentpage().getparameters().get('token'));
        selectedObjfields = new list<SelectOption>();
        selectedSobject = 'Account';
        init();
    }
    
    
    public void onUpdate(){
        Account acc = new Account(Id = objAccount.Id);
        if(null != imgSource){
            acc.Signature__c='<img src="'+imgSource+'" width="230px" height="71px"></img>';
            acc.Signature_Date__c = system.Now();
            objAccount.Signature__c ='<img src="'+imgSource+'" width="230px" height="71px"></img>';
            objAccount.Signature_Date__c = system.Now();
            //isContractSigned = true;
        }
        //acc.Patient_Type__c = 'Member';
        //acc.Membership_Level__c = 'Child';
        //acc.Membership_Type__c = membershipType;
        //acc.Quantity__c= '1';
        update acc;
        //sendAndUploadContract();//acc.Id);
    }
    
    public void sendAndUploadContract(){
        PageReference pdf = Page.Membershipformpdf;
        // add parent id to the parameters for standardcontroller
        pdf.getParameters().put('id',objAccount.Id);        
        // create the new attachment
        Attachment attach = new Attachment();    
        // the contents of the attachment from the pdf
        Blob body;        
        try {            
            // returns the output of the page as a PDF
            body = pdf.getContent();            
        // need to pass unit test -- current bug    
        } catch (VisualforceException e) {
            body = Blob.valueOf('Is you do not recieve correctly Formated contract, Please contact to Receptionist!');
        }
        ContentVersion conVer = new ContentVersion();
        conVer.ContentLocation = 'S'; // S specify this document is in SF, use E for external files
        conVer.PathOnClient = 'MHC Membership contract_Oct 2018.pdf'; // The files name, extension is very important here which will help the file in preview.
        conVer.Title = 'MHC Membership contract_Oct 2018.pdf'; // Display name of the files
        conVer.VersionData = body;//EncodingUtil.base64Decode(body); // converting your binary string to Blog
        insert conVer;
        Id conDoc = [SELECT ContentDocumentId FROM ContentVersion WHERE Id =:conVer.Id].ContentDocumentId;
        contractDownloadLink = 'https://dev-myhealthcaretestenv.cs89.force.com/sfc/servlet.shepherd/version/download/'+conVer.Id+'?asPdf=false&operationContext=CHATTER';     
        //Create ContentDocumentLink
        ContentDocumentLink cDe = new ContentDocumentLink();
        cDe.ContentDocumentId = conDoc;
        cDe.LinkedEntityId = objAccount.Id; // you can use objectId,GroupId etc
        cDe.ShareType = 'I'; // Inferred permission, checkout description of ContentDocumentLink object for more details
        cDe.Visibility = 'AllUsers';//'InternalUsers';
        insert cDe;
        list<Messaging.SingleEmailMessage> messagingList = new List<Messaging.SingleEmailMessage>();
        Messaging.SingleEmailMessage mail =  new Messaging.SingleEmailMessage();  
        list<String> toAddresses = new list <string>{'usman.sfdc@gmail.com','pintub.sfdc@gmail.com'};
        list<String> ccAddresses = System.Label.GoCardless_CC_Email_Address.split(',');
        mail.setCcAddresses(ccAddresses);
        mail.setToAddresses(toAddresses); 
        mail.setSubject(String.Format(System.Label.GoCardless_Email_Subject, new list<String>{'Test 123'}));
        mail.setHtmlBody(String.Format(System.Label.GoCardless_Email_Body, new list<String>{'Test 123'}));
        List<Messaging.Emailfileattachment> fileAttachments = new List<Messaging.Emailfileattachment>();        
        // Add to attachment file list
        Messaging.Emailfileattachment efa = new Messaging.Emailfileattachment();
        efa.setFileName('MHC Membership contract_Oct 2018.pdf');
        efa.setBody(conVer.VersionData);
        fileAttachments.add(efa);
        mail.setFileAttachments(fileAttachments);
        messagingList.add(mail);
        if(!messagingList.isEmpty()){
            Messaging.sendEmail(messagingList);
        }
    }
         
    public void init(){
        string objSobject = '';
        objects = new list<string>();
        objAccount = [select Name,Patient_Type__c ,Quantity__c,Billing_Address__c,List_Of_Members_Covered_By_The_Contract__c,Membership_Start_Date__c ,ContactId__c,
                      Membership_Change_Dates__c,Signature__c,Signature_Date__c,Contract_Sent_Date__c,Total_Monthly_Membership_Fee__c,Home_Clinic__c ,Membership_Type__c ,
                      Membership_Level__c ,Payment_Frequency__c, (Select Id, ContentDocumentId From ContentDocumentLinks order by ContentDocument.CreatedDate DESC limit 1)  from Account where id=:apexpages.currentpage().getparameters().get('token')];
        listMappingWrapper = new list<MappingWrapper>{new MappingWrapper()};
        if(objAccount != null && objAccount.ContentDocumentLinks.size() > 0){
            contractDownloadLink = 'https://dev-myhealthcaretestenv.cs89.force.com/sfc/servlet.shepherd/version/download/'+[SELECT Id FROM ContentVersion WHERE ContentDocumentId=:objAccount.ContentDocumentLinks.get(0).ContentDocumentId limit 1].Id+'?asPdf=false&operationContext=CHATTER';    
        }        
        if(Apexpages.currentPage().getParameters().get('editSelectedObject') == null){ 
            objSobject = selectedSobject ;  
        }else{
            objSobject = Apexpages.currentPage().getParameters().get('editSelectedObject'); 
        } 
    }
    public class MappingWrapper{
        public string member{get;set;}
        public string quantity{get;set;}
        public MappingWrapper(){}
        public MappingWrapper(string member,string quantity){
            this.member = member;
            this.quantity = quantity;
        }
    }
    public void addMember(){
        listMappingWrapper.add(new MappingWrapper());
    }
    public void removeMember(){
        listMappingWrapper.remove(index);
    }
    public List<SelectOption> getMembersPicklist(){
        List<SelectOption> options = new List<SelectOption>();            
        Schema.DescribeFieldResult fieldResult =
        Account.Membership_Level__c.getDescribe();
        List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();            
        for( Schema.PicklistEntry f : ple){
          options.add(new SelectOption(f.getLabel(), f.getValue()));
        }       
        return options;
    }
    
    public List<SelectOption> getQuantitiesPicklist(){
        List<SelectOption> options = new List<SelectOption>();            
        Schema.DescribeFieldResult fieldResult =
        Account.Quantity__c.getDescribe();
        List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();            
        for( Schema.PicklistEntry f : ple){
          options.add(new SelectOption(f.getLabel(), f.getValue()));
        }       
        return options;
    } 
    
    public List<SelectOption> getFrequencyPicklist(){
        List<SelectOption> options = new List<SelectOption>();            
        Schema.DescribeFieldResult fieldResult =
        Account.Payment_Frequency__c.getDescribe();
        List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();            
        for( Schema.PicklistEntry f : ple){
          options.add(new SelectOption(f.getLabel(), f.getValue()));
        }       
        return options;
    }
    
    public List<SelectOption> getMembershipTypePicklist(){
        List<SelectOption> options = new List<SelectOption>();            
        Schema.DescribeFieldResult fieldResult =
        Account.Membership_Type__c.getDescribe();
        List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();            
        for( Schema.PicklistEntry f : ple){
          options.add(new SelectOption(f.getLabel(), f.getValue()));
        }       
        return options;
    }
    public void sendEmail(){}
    public pageReference onSend(){ 
        pageReference pr = new pageReference('/'+objAccount.Id);
        pr.setRedirect(true);    
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        mail.setTargetObjectId(objAccount.ContactId__c);
        mail.setTemplateId('00X0E000000rjg7'); 
        mail.setWhatId(objAccount.Id);    
        mail.setBccSender(false);
        mail.setReplyTo('Laxminarayan.sfdc@gmail.com');
        mail.setToAddresses(new List<String>{'usman.sfdc@gmail.com'});
        mail.setSenderDisplayName('Membership Contract from MyHealthCare Clinic');
        mail.setSaveAsActivity(false); 
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail }); 
        Account ac2Update = new Account(id=objAccount.Id);
        ac2Update.Contract_Sent_Date__c = System.Now();
        ac2Update.Member_Status__c = 'Pending'; 
        Update ac2Update;
        return pr;
    }         
}


Test class 

@isTest
private class MembershipContractPreview_ctrl_Test{
     static testMethod void membercontract(){
   Test.startTest();
  MembershipContractPreview_ctrl memC = new MembershipContractPreview_ctrl();
   MembershipContractPreview_ctrl.MappingWrapper mw = new MembershipContractPreview_ctrl.MappingWrapper();
       mw.member = 'member';
        mw.quantity = 'quantity';
        Account objacc = new Account();
         objacc.Patient_Type__c = 'Member';
         //objacc.Name = 'Member'; 
         objacc.List_Of_Members_Covered_By_The_Contract__c = 'Member';
         objacc.Membership_Start_Date__c  = system.Today();
         objacc.Membership_Change_Dates__c = system.Today(); 
         //objacc.Home_Clinic__c = 'fulham'; 
         //objacc.Membership_Level__c = 'Child';
         //objacc.Membership_Type__c = 'MHC GP' ;
         objacc.Quantity__c = '1';
         //objacc.Payment_Frequency__c = 'Annual';
         //objacc.Billing_Address__c = 'Member';
         //objacc.ContactId__c = cont.id; 
         objacc.Contract_Sent_Date__c = system.Today();
         //objacc.Total_Monthly_Membership_Fee__c = 1000;
         objacc.Membership_Change_Dates__c = system.Today();
         
         objacc.LastName = 'fulham'; 
         objacc.Date_of_Birth__c = system.Today();
         objacc.Gender__c = 'Male' ;
         objacc.Patient_Type__c = 'New'; 
         insert objacc ;
         Account acc = new Account(Id = objacc.Id);
         objacc.Signature__c = 'Member';
         objacc.Signature_Date__c = system.Today();
         update objacc;
         ContentVersion ContentVer = new ContentVersion();
        ContentVer.Title = 'My Doc';
        ContentVer.ContentUrl= 'test.com';
        Insert ContentVer;
        // Create a ContentDocumentLink
        ContentDocumentLink ContentDL = new ContentDocumentLink();
        ContentDL.ContentDocumentId = [SELECT Id, ContentDocumentId FROM ContentVersion WHERE Id =: ContentVer.Id].ContentDocumentId;
        ContentDL.LinkedEntityId = objacc.id;
        ContentDL.ShareType='V';
        Insert ContentDL;
        // Retrieve ?
        ContentDL = [SELECT Id,ShareType FROM ContentDocumentLink WHERE Id =:ContentDL.Id];
        System.debug('Troll ' + ContentDL.ShareType);
        // Verify the share type is = i
        System.assertEquals('V',ContentDL.ShareType);
        
         PageReference pageRef = Page.MembershipContractPreview;
         pageRef.getParameters().put('id',objacc.id);
         ApexPages.StandardController sc = new ApexPages.StandardController(objacc);
         
         //Test.setCurrentPageReference(pageRef);
         memC.init();
         memC.onUpdate();
         memC.sendAndUploadContract();
        
        Test.stopTest();
   }
   
 }
Create a Batch Apex Class on Account object… Fetch all the Accounts… If Account Type = ‘
Customer - Direct’ then Update the all the child contacts Status field = ‘Signed Off’. Send an email after all the processing. This email should contain the statistics like Processed records count.
I have a custom object namend tpdDatabase. I have an Apex class with the method below to get an instance of this object (by databasename). 

The line "tpdDatabase__c tpDatabase = tpdDatabase__c.getValues(databaseName);" produces this error:

Not of type Custom Settings

I don't quite understand what goed wrong here. Could anyone point me in the right direction? Many thanks in advance!

    public tpdDatabase__c getByDatabaseName(String databaseName) {
        
        tpdDatabase__c tpDatabase = tpdDatabase__c.getValues(databaseName);
        if (tpDatabase == null) {
        return null;
        }
        return tpDatabase; 
    }
Hi All,

I've followed a tutorial about excluding specific domains in email to case, so that if an email from a specific domain is sent to the email2case email, a case won't get created. The application works great in Sandbox but I am struggling to move it to production as the test class seems to require some test entry for the custom metadata type and I am not really sure how to include that in the test class. 

Trigger:
//Tins trigger wiLL. be used to KiLL emaiLs coming via E2C and with certain domain names 2 
trigger AutoE2CCaseDeletion on Case (before insert) { 
    System.debug('Entered Kill Case trigger'); 
    SSK_RestrictedE2CDomains.killEmailToCase(Trigger.New); 
}



Here is the main class:
public with sharing class SSK_RestrictedE2CDomains {
	private static String SSK_RestrictedE2CDomains {
	get{
		return 'Restriced_E2C_Domains';
		
	}
}

private static Set<String> getSupportSetting(String settingName){
	Support_Setting__mdt supportSetting = [
	SELECT Value__c
	FROM Support_Setting__mdt
	WHERE DeveloperName = :settingName
	];
	

	Set<String> settingValues = new Set<String>();

	//settingValues.addAll(supportSetting.Value__c.split(','));
	return settingValues;
}

//Method to kiLL EmaiLs coming in from restricted Domains (E2C) 
public static void killEmailToCase (List<Case> lstCases){ 
	System.debug('killEmailToCase method successfully called'); 
	for(Case newCase: lstCases){ System.debug('Case ID: ' + newCase.Id); 
	System.debug('Case Origin: ' + newCase.Origin); 
	System.debug('Case From/Supplied/Web Email: ' + newCase.SuppliedEmail); 
	System.debug('Record Type name is: ' + newCase.RecordType.DeveloperName); 


//Read the "Restricted E2C Domains" from the Custom Metadata Types Labelled "Support Settings" 
Set<String> restrictedE2CDomains = getSupportSetting(SSK_RestrictedE2CDomains); 
if(newCase.SuppliedEmail != NULL && newCase.SuppliedEmail != 'email2casesmith@gmail.com'){ 
if(newCase.Origin == 'Email' && newCase.SuppliedEmail != NULL && newCase.SuppliedEmail.contains('@')) { 
//SpLit the EmaiL with DeLimiter as 1@' 
//So john.doe@gmaiL.com returns a List - ['fijohn.doe', 'gmaiL.com'] 
//Here the second index wiLL point to the Domain Name which is [1] 
List<String> emailParts = newCase.SuppliedEmail.split('@'); 
if(restrictedE2CDomains.contains(emailParts[1])){ 
	System.debug('Problematic case found and shouldnt be created'); 
	newCase.addError('Creation of cases with these domains are not allowed'); 
} 
} 
} 
} 
}		
}
TestClass1
@isTest 
private class tstE2CDomainNoKill {
	static testMethod void notKillCaseE2C_valid_domain(){

	Account newAcc = new Account();
	newAcc.Name = 'Test Account';
	Insert newAcc;

	Case newCase = new Case();
	newCase.AccountId = newAcc.Id;
	newCase.SuppliedEmail = 'test@gmail.com';
	newCase.Origin = 'Email';
	Insert newCase;
	System.assertNotEquals(NULL, newCase.Id);

	Case newCase2 = new Case();
	newCase.AccountId = newAcc.Id;
	newCase.SuppliedEmail = 'email2casesmith@gmail.com';
	newCase.Origin = 'Email';
	Insert newCase2;
	System.assertNotEquals(NULL, newCase2.Id);


		
	}
}

The above test class does fail and show the following text:

System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, AutoE2CCaseDeletion: execution of BeforeInsert

caused by: System.QueryException: List has no rows for assignment to SObject

Class.SSK_RestrictedE2CDomains.getSupportSetting: line 10, column 1
Class.SSK_RestrictedE2CDomains.killEmailToCase: line 33, column 1
Trigger.AutoE2CCaseDeletion: line 4, column 1: []
Any help/suggestion would highly be appreciated.

Thanks!




 

Hi Guys,
getting variable does not exist when checking the old value is null or not. please suggest

 public static Boolean HasAccess(List<AccountContactRelation> lstNew) {
               for (AccountContactRelation acr : lstNew) {
                system.debug('trigOld-->'+trigger.oldMap.get(acr.Id));
                
                    if(string.isNotBlank(acr.Entity__c) || string.isNotBlank(trigger.oldMap.get(acr.Id).External_Entity__c)  ){// getting  error on this line checking oldmap
                    
                        if(acr.External_Entity__c != 'Customer-facing')
                            throw new acrException(System.Label.Cimited);
                    }
                }
                  return bReturn;
            }
       
I am working on optimizing code that I didn't originally write. 
Each object has multiple triggers, and each trigger has soql queries.
There is a trigger that is hitting the limit for soql queries. Is there an easy way to pinpoint where these queries are?
Hi everyone,I am new to salesforce and I'm having trouble with a test class. I'm passing a value to the target class variable but when the SOQL query executes, it returns "System.QueryException: List has no rows for assignment to SObject". Please help


Apex Class

global class MembershipContractPreview_ctrl { 
    public String save { get; set; } 
    public String imgSource{get;set;}
    public String selectedSobject {get;set;}
    public Account objAccount {get;set;}
    public Account acc{get;set;}
    public list<MappingWrapper> listMappingWrapper{get;set;}
    public list<string> objects {get;set;}
    public string editSelectedObject {get;set;}
    public list<SelectOption> selectedObjfields {get;set;}
    public string selectedObj {get;set;}
    public Integer index {get;set;}
    public string membershipType{ get;set; }
    public string frequency{ get;set; }
    public string quantities{ get;set; }
    public string members{ get;set; }  
    public string contractDownloadLink{get;set;}
    
    public MembershipContractPreview_ctrl () { 
        //isContractSigned = false;
        frequency = apexpages.currentpage().getparameters().get('token');
        system.debug('>>>>>>>>>>>>>>>>>>>>'+apexpages.currentpage().getparameters().get('token'));
        selectedObjfields = new list<SelectOption>();
        selectedSobject = 'Account';
        init();
    }
    
    
    public void onUpdate(){
        Account acc = new Account(Id = objAccount.Id);
        if(null != imgSource){
            acc.Signature__c='<img src="'+imgSource+'" width="230px" height="71px"></img>';
            acc.Signature_Date__c = system.Now();
            objAccount.Signature__c ='<img src="'+imgSource+'" width="230px" height="71px"></img>';
            objAccount.Signature_Date__c = system.Now();
            //isContractSigned = true;
        }
        //acc.Patient_Type__c = 'Member';
        //acc.Membership_Level__c = 'Child';
        //acc.Membership_Type__c = membershipType;
        //acc.Quantity__c= '1';
        update acc;
        //sendAndUploadContract();//acc.Id);
    }
    
    public void sendAndUploadContract(){
        PageReference pdf = Page.Membershipformpdf;
        // add parent id to the parameters for standardcontroller
        pdf.getParameters().put('id',objAccount.Id);        
        // create the new attachment
        Attachment attach = new Attachment();    
        // the contents of the attachment from the pdf
        Blob body;        
        try {            
            // returns the output of the page as a PDF
            body = pdf.getContent();            
        // need to pass unit test -- current bug    
        } catch (VisualforceException e) {
            body = Blob.valueOf('Is you do not recieve correctly Formated contract, Please contact to Receptionist!');
        }
        ContentVersion conVer = new ContentVersion();
        conVer.ContentLocation = 'S'; // S specify this document is in SF, use E for external files
        conVer.PathOnClient = 'MHC Membership contract_Oct 2018.pdf'; // The files name, extension is very important here which will help the file in preview.
        conVer.Title = 'MHC Membership contract_Oct 2018.pdf'; // Display name of the files
        conVer.VersionData = body;//EncodingUtil.base64Decode(body); // converting your binary string to Blog
        insert conVer;
        Id conDoc = [SELECT ContentDocumentId FROM ContentVersion WHERE Id =:conVer.Id].ContentDocumentId;
        contractDownloadLink = 'https://dev-myhealthcaretestenv.cs89.force.com/sfc/servlet.shepherd/version/download/'+conVer.Id+'?asPdf=false&operationContext=CHATTER';     
        //Create ContentDocumentLink
        ContentDocumentLink cDe = new ContentDocumentLink();
        cDe.ContentDocumentId = conDoc;
        cDe.LinkedEntityId = objAccount.Id; // you can use objectId,GroupId etc
        cDe.ShareType = 'I'; // Inferred permission, checkout description of ContentDocumentLink object for more details
        cDe.Visibility = 'AllUsers';//'InternalUsers';
        insert cDe;
        list<Messaging.SingleEmailMessage> messagingList = new List<Messaging.SingleEmailMessage>();
        Messaging.SingleEmailMessage mail =  new Messaging.SingleEmailMessage();  
        list<String> toAddresses = new list <string>{'usman.sfdc@gmail.com','pintub.sfdc@gmail.com'};
        list<String> ccAddresses = System.Label.GoCardless_CC_Email_Address.split(',');
        mail.setCcAddresses(ccAddresses);
        mail.setToAddresses(toAddresses); 
        mail.setSubject(String.Format(System.Label.GoCardless_Email_Subject, new list<String>{'Test 123'}));
        mail.setHtmlBody(String.Format(System.Label.GoCardless_Email_Body, new list<String>{'Test 123'}));
        List<Messaging.Emailfileattachment> fileAttachments = new List<Messaging.Emailfileattachment>();        
        // Add to attachment file list
        Messaging.Emailfileattachment efa = new Messaging.Emailfileattachment();
        efa.setFileName('MHC Membership contract_Oct 2018.pdf');
        efa.setBody(conVer.VersionData);
        fileAttachments.add(efa);
        mail.setFileAttachments(fileAttachments);
        messagingList.add(mail);
        if(!messagingList.isEmpty()){
            Messaging.sendEmail(messagingList);
        }
    }
         
    public void init(){
        string objSobject = '';
        objects = new list<string>();
        objAccount = [select Name,Patient_Type__c ,Quantity__c,Billing_Address__c,List_Of_Members_Covered_By_The_Contract__c,Membership_Start_Date__c ,ContactId__c,
                      Membership_Change_Dates__c,Signature__c,Signature_Date__c,Contract_Sent_Date__c,Total_Monthly_Membership_Fee__c,Home_Clinic__c ,Membership_Type__c ,
                      Membership_Level__c ,Payment_Frequency__c, (Select Id, ContentDocumentId From ContentDocumentLinks order by ContentDocument.CreatedDate DESC limit 1)  from Account where id=:apexpages.currentpage().getparameters().get('token')];
        listMappingWrapper = new list<MappingWrapper>{new MappingWrapper()};
        if(objAccount != null && objAccount.ContentDocumentLinks.size() > 0){
            contractDownloadLink = 'https://dev-myhealthcaretestenv.cs89.force.com/sfc/servlet.shepherd/version/download/'+[SELECT Id FROM ContentVersion WHERE ContentDocumentId=:objAccount.ContentDocumentLinks.get(0).ContentDocumentId limit 1].Id+'?asPdf=false&operationContext=CHATTER';    
        }        
        if(Apexpages.currentPage().getParameters().get('editSelectedObject') == null){ 
            objSobject = selectedSobject ;  
        }else{
            objSobject = Apexpages.currentPage().getParameters().get('editSelectedObject'); 
        } 
    }
    public class MappingWrapper{
        public string member{get;set;}
        public string quantity{get;set;}
        public MappingWrapper(){}
        public MappingWrapper(string member,string quantity){
            this.member = member;
            this.quantity = quantity;
        }
    }
    public void addMember(){
        listMappingWrapper.add(new MappingWrapper());
    }
    public void removeMember(){
        listMappingWrapper.remove(index);
    }
    public List<SelectOption> getMembersPicklist(){
        List<SelectOption> options = new List<SelectOption>();            
        Schema.DescribeFieldResult fieldResult =
        Account.Membership_Level__c.getDescribe();
        List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();            
        for( Schema.PicklistEntry f : ple){
          options.add(new SelectOption(f.getLabel(), f.getValue()));
        }       
        return options;
    }
    
    public List<SelectOption> getQuantitiesPicklist(){
        List<SelectOption> options = new List<SelectOption>();            
        Schema.DescribeFieldResult fieldResult =
        Account.Quantity__c.getDescribe();
        List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();            
        for( Schema.PicklistEntry f : ple){
          options.add(new SelectOption(f.getLabel(), f.getValue()));
        }       
        return options;
    } 
    
    public List<SelectOption> getFrequencyPicklist(){
        List<SelectOption> options = new List<SelectOption>();            
        Schema.DescribeFieldResult fieldResult =
        Account.Payment_Frequency__c.getDescribe();
        List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();            
        for( Schema.PicklistEntry f : ple){
          options.add(new SelectOption(f.getLabel(), f.getValue()));
        }       
        return options;
    }
    
    public List<SelectOption> getMembershipTypePicklist(){
        List<SelectOption> options = new List<SelectOption>();            
        Schema.DescribeFieldResult fieldResult =
        Account.Membership_Type__c.getDescribe();
        List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();            
        for( Schema.PicklistEntry f : ple){
          options.add(new SelectOption(f.getLabel(), f.getValue()));
        }       
        return options;
    }
    public void sendEmail(){}
    public pageReference onSend(){ 
        pageReference pr = new pageReference('/'+objAccount.Id);
        pr.setRedirect(true);    
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        mail.setTargetObjectId(objAccount.ContactId__c);
        mail.setTemplateId('00X0E000000rjg7'); 
        mail.setWhatId(objAccount.Id);    
        mail.setBccSender(false);
        mail.setReplyTo('Laxminarayan.sfdc@gmail.com');
        mail.setToAddresses(new List<String>{'usman.sfdc@gmail.com'});
        mail.setSenderDisplayName('Membership Contract from MyHealthCare Clinic');
        mail.setSaveAsActivity(false); 
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail }); 
        Account ac2Update = new Account(id=objAccount.Id);
        ac2Update.Contract_Sent_Date__c = System.Now();
        ac2Update.Member_Status__c = 'Pending'; 
        Update ac2Update;
        return pr;
    }         
}


Test class 

@isTest
private class MembershipContractPreview_ctrl_Test{
     static testMethod void membercontract(){
   Test.startTest();
  MembershipContractPreview_ctrl memC = new MembershipContractPreview_ctrl();
   MembershipContractPreview_ctrl.MappingWrapper mw = new MembershipContractPreview_ctrl.MappingWrapper();
       mw.member = 'member';
        mw.quantity = 'quantity';
        Account objacc = new Account();
         objacc.Patient_Type__c = 'Member';
         //objacc.Name = 'Member'; 
         objacc.List_Of_Members_Covered_By_The_Contract__c = 'Member';
         objacc.Membership_Start_Date__c  = system.Today();
         objacc.Membership_Change_Dates__c = system.Today(); 
         //objacc.Home_Clinic__c = 'fulham'; 
         //objacc.Membership_Level__c = 'Child';
         //objacc.Membership_Type__c = 'MHC GP' ;
         objacc.Quantity__c = '1';
         //objacc.Payment_Frequency__c = 'Annual';
         //objacc.Billing_Address__c = 'Member';
         //objacc.ContactId__c = cont.id; 
         objacc.Contract_Sent_Date__c = system.Today();
         //objacc.Total_Monthly_Membership_Fee__c = 1000;
         objacc.Membership_Change_Dates__c = system.Today();
         
         objacc.LastName = 'fulham'; 
         objacc.Date_of_Birth__c = system.Today();
         objacc.Gender__c = 'Male' ;
         objacc.Patient_Type__c = 'New'; 
         insert objacc ;
         Account acc = new Account(Id = objacc.Id);
         objacc.Signature__c = 'Member';
         objacc.Signature_Date__c = system.Today();
         update objacc;
         ContentVersion ContentVer = new ContentVersion();
        ContentVer.Title = 'My Doc';
        ContentVer.ContentUrl= 'test.com';
        Insert ContentVer;
        // Create a ContentDocumentLink
        ContentDocumentLink ContentDL = new ContentDocumentLink();
        ContentDL.ContentDocumentId = [SELECT Id, ContentDocumentId FROM ContentVersion WHERE Id =: ContentVer.Id].ContentDocumentId;
        ContentDL.LinkedEntityId = objacc.id;
        ContentDL.ShareType='V';
        Insert ContentDL;
        // Retrieve ?
        ContentDL = [SELECT Id,ShareType FROM ContentDocumentLink WHERE Id =:ContentDL.Id];
        System.debug('Troll ' + ContentDL.ShareType);
        // Verify the share type is = i
        System.assertEquals('V',ContentDL.ShareType);
        
         PageReference pageRef = Page.MembershipContractPreview;
         pageRef.getParameters().put('id',objacc.id);
         ApexPages.StandardController sc = new ApexPages.StandardController(objacc);
         
         //Test.setCurrentPageReference(pageRef);
         memC.init();
         memC.onUpdate();
         memC.sendAndUploadContract();
        
        Test.stopTest();
   }
   
 }