You need to sign in to do that
Don't have an account?
Apex test class mimic visualforce page fields using controller Extension.
How can I get Apex to mimic passing the field data from the visualforce page to the controllerexstension save method. I have looked at 100's of examples yet still cant find a solution.
vf:
<apex:page standardController="contact" showHeader="false" extensions="appExtension">
<apex:composition template="StdOCEITemplate">
<apex:define name="pagebody">
<apex:form rendered="{!(SelectedEvent.Name != '')}" >
<apex:pageMessages />
<apex:pageBlock title="{!SelectedEvent.Name} - Application Form">
<apex:pageBlockSection title="Main Details" columns="2" >
<apex:inputField value="{!contact.Salutation}" id="title" required="true" />
<apex:outputText > </apex:outputText>
<apex:inputField value="{!contact.FirstName}" id="firstname" required="true" />
<apex:inputField value="{!contact.LastName}" id="lastname" />
<apex:inputField value="{!contact.Email}" id="email" required="true" />
<!-- more vf page here -->
<apex:pageBlockButtons location="bottom" title="Submit">
<apex:commandButton action="{!save}"
value="Submit New Application"/>
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:form>
</apex:define>
</apex:composition>
</apex:page>
controller
public class appExtension {
// Decare Vars from Querystring
Id accountrecordtypeid = ApexPages.currentPage().getParameters().get('AccountRecordTypeID');
Id contactrecordtypeid = ApexPages.currentPage().getParameters().get('ContactTypeID');
Id eventid = ApexPages.currentPage().getParameters().get('eventID');
public appExtension(ApexPages.StandardController controller) {
this.contact =
(Contact)controller.getRecord();
}
/*More Controller code hear */
//This is the method that will save the details to the database
public PageReference save()
{
//set savepoint at start so as to stop account information being set if applicant has already applied for event.
Savepoint sp = Database.setSavepoint();
// Logic to make sure first letter of name/surname is in upper case
String FirstName = Contact.FirstName;
String LastName = Contact.LastName;
if (FirstName != null && LastName != null && FirstName != '' && LastName != ''){
}
test method:
public static testMethod void testappExtensionBusApp() {
ApexPages.standardController controller = new ApexPages.standardController(new Contact());
// Business applicant test where Business applicant selects an existing account.
ApexPages.currentPage().getParameters().put('AccountRecordTypeID',[Select ID from RecordType Where SobjectType = 'Account' and Name = 'Business Organisation' Limit 1].id);
ApexPages.currentPage().getParameters().put('ContactTypeID',[Select ID from RecordType Where SobjectType = 'Contact' and Name = 'Business Applicant' Limit 1].id);
ApexPages.currentPage().getParameters().put('eventID',[select id from SBS_Event__c Where Display_on_website__c = True and Event_Start_Date__c > Today Limit 1].id);
appExtension busextension = new appExtension(controller);
//select a random existing account to associate with.
busextension.picklistValue = [select name from Account limit 1].id;
// this is a insert because email is new in system
//decalre fields from application form
/* Contact contact = new Contact(
Firstname = 'testier',
Lastname = 'tester',
Email = 'test@test.com');
Attempt 1 does not get into If statment*/
/* busextension = new appExtension(controller);
busextension = Firstname('test.');
busextension = Lastname('testier');
busextension = Email('test@test.com');
Attempt 2 does not complile Method does not exist incorrect signiture */
String nextPage = busextension.save().getUrl();
busextension.save.getURL();
// Verify that the success page displays
System.assertEquals('/events/confirmsave', nextPage);
}
}
Hey
1. Setup your contact entirely
2. Instantiate your StandardController
3. Use this in your extension
I.e.
Firstname = 'testier',
Lastname = 'tester',
Email = 'test@test.com');
ApexPages.standardController controller = new ApexPages.standardController(contact );
busextension = new appExtension(controller);
Cheers,
Wes
All Answers
Hey
1. Setup your contact entirely
2. Instantiate your StandardController
3. Use this in your extension
I.e.
Firstname = 'testier',
Lastname = 'tester',
Email = 'test@test.com');
ApexPages.standardController controller = new ApexPages.standardController(contact );
busextension = new appExtension(controller);
Cheers,
Wes
I am having a similar issue. My Apex code is simple, just to be able to save a contact and redirect. But the test gets stuck on the required field in the insert (the last name is required). How do I pass a parameter to the insert in the test method? Here's my code:
public class addContactAffiliation {Contact contact;
public Contact getContact() {
if(contact == null) contact = new Contact();
string AccountID = System.currentPagereference().getParameters().get('AccountID');
contact.System_Affil_OrgID__c = [select Name from Account where Id =: accountId].name;
return contact;
}
public PageReference save() {
// Add the account to the database.
insert contact;
// Send the user to the detail page for the new account.
PageReference affilPage = new PageReference('/a0C/e?CF00N80000003PeoM=' + Contact.firstname + ' ' + Contact.lastname);
affilPage.setRedirect(true);
return affilPage;
}
}
Nevermind, found it. Need to make contact public.
Thanks for posting this code. :)
it really helped in my development.