You need to sign in to do that
Don't have an account?
Developer.mikie.Apex.Student
Testing Save and New Extension
Hey there,
I need a small hand with testing the new bit of code that I have added to my extension. I feel like I am one line of code away from passing, i have just never tested for a save and new, so I am not sure on how to do this. The extension already saves, cancels and clones (and passes 100%). The save and new fucntion was jsut added and I was hoping I could get a small hand in testing for it. The newly added bits will be highlighted:
public class extSaveSerButton {
public Service__c ser {get;set;}
public extSaveSerButton(ApexPages.StandardController controller) {
this.ser = (Service__c)controller.getRecord();
}
Public PageReference saveDestinyService(){
if(System.currentPageReference().getParameters().get('clone') == '1'){
//Set record id to null
ser.Id = null;
}
insert ser;
// Send the user to the detail page for the new account.
PageReference pageRef= new PageReference('/apex/DestinyAccount?id='+ser.account__c+'&Sfdc.override=1');
pageRef.getParameters().put('tab','Destiny Services');
return pageRef;
}
Public PageReference saveNewDestinyService(){
insert ser;
// Send the user to the detail page for the new account.
PageReference pageRef= new PageReference('/a0I/e');
return pageRef;
}
Public PageReference cancelDestinyService(){
PageReference pageRef = new PageReference('/apex/DestinyAccount?id='+ser.account__c+'&Sfdc.override=1');
pageRef.getParameters().put('tab','Destiny Services');
return pageRef;
}
}
test:
static testMethod void TestExtSaveSerButton(){
Account acc = new Account(Name = 'Test Ser Account');
insert acc;
//Now lets create Destiny Products record that will be reference for the Standard Account
Service__c serTest = new Service__c(Account__c = acc.id);
//call the apepages stad controller
Apexpages.Standardcontroller stdSer = new Apexpages.Standardcontroller(serTest);
ApexPages.currentPage().getParameters().put('clone', '1');
//now call the class and reference the standardcontroller in the class.
extSaveSerButton extSer = new extSaveSerButton(stdSer);
//call the pageReference in the class.
extSer.saveDestinyService();
extSer.saveNewDestinyService();
extser.cancelDestinyService();
Thank you for your time.
I need a small hand with testing the new bit of code that I have added to my extension. I feel like I am one line of code away from passing, i have just never tested for a save and new, so I am not sure on how to do this. The extension already saves, cancels and clones (and passes 100%). The save and new fucntion was jsut added and I was hoping I could get a small hand in testing for it. The newly added bits will be highlighted:
public class extSaveSerButton {
public Service__c ser {get;set;}
public extSaveSerButton(ApexPages.StandardController controller) {
this.ser = (Service__c)controller.getRecord();
}
Public PageReference saveDestinyService(){
if(System.currentPageReference().getParameters().get('clone') == '1'){
//Set record id to null
ser.Id = null;
}
insert ser;
// Send the user to the detail page for the new account.
PageReference pageRef= new PageReference('/apex/DestinyAccount?id='+ser.account__c+'&Sfdc.override=1');
pageRef.getParameters().put('tab','Destiny Services');
return pageRef;
}
Public PageReference saveNewDestinyService(){
insert ser;
// Send the user to the detail page for the new account.
PageReference pageRef= new PageReference('/a0I/e');
return pageRef;
}
Public PageReference cancelDestinyService(){
PageReference pageRef = new PageReference('/apex/DestinyAccount?id='+ser.account__c+'&Sfdc.override=1');
pageRef.getParameters().put('tab','Destiny Services');
return pageRef;
}
}
test:
static testMethod void TestExtSaveSerButton(){
Account acc = new Account(Name = 'Test Ser Account');
insert acc;
//Now lets create Destiny Products record that will be reference for the Standard Account
Service__c serTest = new Service__c(Account__c = acc.id);
//call the apepages stad controller
Apexpages.Standardcontroller stdSer = new Apexpages.Standardcontroller(serTest);
ApexPages.currentPage().getParameters().put('clone', '1');
//now call the class and reference the standardcontroller in the class.
extSaveSerButton extSer = new extSaveSerButton(stdSer);
//call the pageReference in the class.
extSer.saveDestinyService();
extSer.saveNewDestinyService();
extser.cancelDestinyService();
Thank you for your time.
After calling saveDestinyService() function, your page has already been redirected to a new page.
So you would need to load the data controller class again before calling the saveNewDestinyService() method.
It is a good practice to add Test.startTest() and Test.stopTest() in your test method.
Let me know if you need more help. Also this question should have been went in Apex section.
Thanks,
Rahul
All Answers
After calling saveDestinyService() function, your page has already been redirected to a new page.
So you would need to load the data controller class again before calling the saveNewDestinyService() method.
It is a good practice to add Test.startTest() and Test.stopTest() in your test method.
Let me know if you need more help. Also this question should have been went in Apex section.
Thanks,
Rahul
Thanks for the reply. I Do use the start and stoptest tags, except this is a portion of my test which tests all my extensions similar to this(I have 5 objects which all have similar extensions).
How would I go about loading the data controller class again in my test method?
Thank you so much for your help
I did it and it passed 100% :). I will post my code, please tell me if there is anything I can simplify or change to make it better.
static testMethod void TestExtSaveSerButton(){
Account acc = new Account(Name = 'Test Ser Account');
insert acc;
//Now lets create Destiny Products record that will be reference for the Standard Account
Service__c serTest = new Service__c(Account__c = acc.id);
service__c viceTest = new Service__c(Account__c = acc.id);
//call the apepages stad controller
Apexpages.Standardcontroller stdSer = new Apexpages.Standardcontroller(serTest);
ApexPages.currentPage().getParameters().put('clone', '1');
//now call the class and reference the standardcontroller in the class.
extSaveSerButton extSer = new extSaveSerButton(stdSer);
//call the pageReference in the class.
extSer.saveDestinyService();
extser.cancelDestinyService();
Apexpages.Standardcontroller stdvice = new Apexpages.Standardcontroller(viceTest);
extSaveSerButton extSer2 = new extSaveSerButton (stdvice);
extSer2.saveNewDestinyService();
One more very good approach would be to write different unit test methods for each scenarios.
Thanks,
Rahul