You need to sign in to do that
Don't have an account?
Andrew Aldis
Test Class System.QueryException List has no rows for assignment to SObject
I am trying to write a test class for for the class below, which I had deployed to our production before, I made some little modifications ot the class to query a list of related items and put them into a select option list for a Picklist field on a VF page. I thought it was a small change but it seems to have completely messed up my test class and I am not sure why. I get the error: System.QueryException: List has no rows for assignment to SObject. I'd appreciate any assistance.
APEX CLASS
public class RiskEditPage {
Risk__c risk;
PageReference pageRef = new PageReference(ApexPages.currentPage().getUrl());
public List<Work_Order__c> woTemp = new List<Work_Order__c>();
public List<SelectOption> woList {get;set;}
public RiskEditPage(apexPages.StandardController controller){
risk = [Select Name, Assign_To__c, OpId__c, Risk_Mitigation__r.OpId__c, FWI_Work_Order__c, Consequence_of_Failure__c, Covered_in_SOW_Hrs__c,
Custom_Development_Required__c, Description__c, Function__c, Risk_Mitigation__c, Risk_of_Failure__c,
Risk_Mitigation__r.Name, Signoff__c, Signoff2__c, Status__c, Strategy_to_Mitigate_Risk__c, Triggering_Action__c, Type__c,
User_Impact__c, Create_Task__c, Risk_of_Failure_Score__c from Risk__c
where Id = :ApexPages.currentPage().getparameters().get('id')];
woTemp = [Select s.Name, s.Id, s.Status__c, s.Type__c From Work_Order__c s where Opportunity__c = :risk.Risk_Mitigation__r.OpId__c Order By Name Asc];
woList = new List<SelectOption>();
for(Work_Order__c temp : woTemp)
{
woList.add(new SelectOption(temp.Id, temp.Name+': '+temp.Type__c));
}
}
public PageReference saveRisk()
{
update risk;
PageReference pageref = new PageReference('/'+risk.Risk_Mitigation__c);
pageRef.setRedirect(true);
return pageRef;
}
public PageReference saveNew()
{
upsert risk;
PageReference pageref = new PageReference('/apex/RiskNewPage?retURL='+risk.Risk_Mitigation__c+'&CF00N4D000000bXd5='+risk.Risk_Mitigation__r.Name+'kid=aDS4D0000004CAB&CF00N4D000000bXd5_lkid='+risk.Risk_Mitigation__c+'&retURL='+risk.Risk_Mitigation__c+'&scontrolCaching=1&sfdc.override=1');
pageRef.setRedirect(true);
return pageRef;
}
}
TEST CLASS
@istest(seealldata=true)
public class RiskEditPageTest {
static Risk_Mitigation__c setupServicePartner() {
Risk_Mitigation__c partner = new Risk_Mitigation__c();
partner.Name = 'test';
partner.Client_Workbook__c = 'a9f34000000TN1F';
insert partner;
return partner;
}
static Risk__c setupServiceLineItem(final Risk_Mitigation__c partner) {
Risk__c lineItem = new Risk__c();
lineItem.Risk_Mitigation__c = partner.Id;
insert lineItem;
return lineItem;
}
static testmethod void deliverablesCnt_Should_SaveLineItemChanges() {
//Given
Risk_Mitigation__c aBasicPartner = setupServicePartner();
Risk__c unsavedLineItem = new Risk__c();
unsavedLineItem.Risk_Mitigation__c = aBasicPartner.Id;
//when
Test.startTest();
Test.setCurrentPage(Page.RiskEditPage);
RiskEditPage deliverablesCnt = new RiskEditPage(new ApexPages.StandardController(unsavedLineItem));
//deliverablesCnt.getrisk().add(unsavedLineItem);
PageReference pageRef = deliverablesCnt.saveRisk();
Test.stopTest();
//then
List<Risk__c> associatedLineItems = [
SELECT Risk_Mitigation__c
FROM Risk__c
WHERE Risk_Mitigation__c = :aBasicPartner.Id
];
System.assertEquals(1, associatedLineItems.size(), 'The unsaved service partner line item should have been saved');
System.assertEquals(true, pageRef.getRedirect(), 'Page should redirect');
}
static testmethod void deliverablesCnt_Should_SaveNewLineItemChanges() {
//Given
Risk_Mitigation__c aBasicPartner = setupServicePartner();
Risk__c unsavedLineItem = new Risk__c();
unsavedLineItem.Risk_Mitigation__c = aBasicPartner.Id;
//when
Test.startTest();
Test.setCurrentPage(Page.RiskEditPage);
RiskEditPage deliverablesCnt = new RiskEditPage(new ApexPages.StandardController(unsavedLineItem));
//deliverablesCnt.getrisk().add(unsavedLineItem);
PageReference pageRef = deliverablesCnt.saveNew();
Test.stopTest();
//then
List<Risk__c> associatedLineItems = [
SELECT Risk_Mitigation__c
FROM Risk__c
WHERE Risk_Mitigation__c = :aBasicPartner.Id
];
System.assertEquals(1, associatedLineItems.size(), 'The unsaved service partner line item should have been saved');
System.assertEquals(true, pageRef.getRedirect(), 'Page should redirect');
}
}
APEX CLASS
public class RiskEditPage {
Risk__c risk;
PageReference pageRef = new PageReference(ApexPages.currentPage().getUrl());
public List<Work_Order__c> woTemp = new List<Work_Order__c>();
public List<SelectOption> woList {get;set;}
public RiskEditPage(apexPages.StandardController controller){
risk = [Select Name, Assign_To__c, OpId__c, Risk_Mitigation__r.OpId__c, FWI_Work_Order__c, Consequence_of_Failure__c, Covered_in_SOW_Hrs__c,
Custom_Development_Required__c, Description__c, Function__c, Risk_Mitigation__c, Risk_of_Failure__c,
Risk_Mitigation__r.Name, Signoff__c, Signoff2__c, Status__c, Strategy_to_Mitigate_Risk__c, Triggering_Action__c, Type__c,
User_Impact__c, Create_Task__c, Risk_of_Failure_Score__c from Risk__c
where Id = :ApexPages.currentPage().getparameters().get('id')];
woTemp = [Select s.Name, s.Id, s.Status__c, s.Type__c From Work_Order__c s where Opportunity__c = :risk.Risk_Mitigation__r.OpId__c Order By Name Asc];
woList = new List<SelectOption>();
for(Work_Order__c temp : woTemp)
{
woList.add(new SelectOption(temp.Id, temp.Name+': '+temp.Type__c));
}
}
public PageReference saveRisk()
{
update risk;
PageReference pageref = new PageReference('/'+risk.Risk_Mitigation__c);
pageRef.setRedirect(true);
return pageRef;
}
public PageReference saveNew()
{
upsert risk;
PageReference pageref = new PageReference('/apex/RiskNewPage?retURL='+risk.Risk_Mitigation__c+'&CF00N4D000000bXd5='+risk.Risk_Mitigation__r.Name+'kid=aDS4D0000004CAB&CF00N4D000000bXd5_lkid='+risk.Risk_Mitigation__c+'&retURL='+risk.Risk_Mitigation__c+'&scontrolCaching=1&sfdc.override=1');
pageRef.setRedirect(true);
return pageRef;
}
}
TEST CLASS
@istest(seealldata=true)
public class RiskEditPageTest {
static Risk_Mitigation__c setupServicePartner() {
Risk_Mitigation__c partner = new Risk_Mitigation__c();
partner.Name = 'test';
partner.Client_Workbook__c = 'a9f34000000TN1F';
insert partner;
return partner;
}
static Risk__c setupServiceLineItem(final Risk_Mitigation__c partner) {
Risk__c lineItem = new Risk__c();
lineItem.Risk_Mitigation__c = partner.Id;
insert lineItem;
return lineItem;
}
static testmethod void deliverablesCnt_Should_SaveLineItemChanges() {
//Given
Risk_Mitigation__c aBasicPartner = setupServicePartner();
Risk__c unsavedLineItem = new Risk__c();
unsavedLineItem.Risk_Mitigation__c = aBasicPartner.Id;
//when
Test.startTest();
Test.setCurrentPage(Page.RiskEditPage);
RiskEditPage deliverablesCnt = new RiskEditPage(new ApexPages.StandardController(unsavedLineItem));
//deliverablesCnt.getrisk().add(unsavedLineItem);
PageReference pageRef = deliverablesCnt.saveRisk();
Test.stopTest();
//then
List<Risk__c> associatedLineItems = [
SELECT Risk_Mitigation__c
FROM Risk__c
WHERE Risk_Mitigation__c = :aBasicPartner.Id
];
System.assertEquals(1, associatedLineItems.size(), 'The unsaved service partner line item should have been saved');
System.assertEquals(true, pageRef.getRedirect(), 'Page should redirect');
}
static testmethod void deliverablesCnt_Should_SaveNewLineItemChanges() {
//Given
Risk_Mitigation__c aBasicPartner = setupServicePartner();
Risk__c unsavedLineItem = new Risk__c();
unsavedLineItem.Risk_Mitigation__c = aBasicPartner.Id;
//when
Test.startTest();
Test.setCurrentPage(Page.RiskEditPage);
RiskEditPage deliverablesCnt = new RiskEditPage(new ApexPages.StandardController(unsavedLineItem));
//deliverablesCnt.getrisk().add(unsavedLineItem);
PageReference pageRef = deliverablesCnt.saveNew();
Test.stopTest();
//then
List<Risk__c> associatedLineItems = [
SELECT Risk_Mitigation__c
FROM Risk__c
WHERE Risk_Mitigation__c = :aBasicPartner.Id
];
System.assertEquals(1, associatedLineItems.size(), 'The unsaved service partner line item should have been saved');
System.assertEquals(true, pageRef.getRedirect(), 'Page should redirect');
}
}
1) error: System.QueryException: List has no rows for assignment to SObject.
You can get the exact row of the error between the brackets normally.
2) Where have you set the parameter 'id' ?
Class: risk = [Select Name, Assign_To__c, OpId__c, Risk_Mitigation__r.OpId__c, FWI_Work_Order__c, Consequence_of_Failure__c, Covered_in_SOW_Hrs__c,
Custom_Development_Required__c, Description__c, Function__c, Risk_Mitigation__c, Risk_of_Failure__c,
Risk_Mitigation__r.Name, Signoff__c, Signoff2__c, Status__c, Strategy_to_Mitigate_Risk__c, Triggering_Action__c, Type__c,
User_Impact__c, Create_Task__c, Risk_of_Failure_Score__c from Risk__c
where Id = :ApexPages.currentPage().getparameters().get('id')];
Test.startTest();
Test.setCurrentPage(Page.RiskEditPage);
RiskEditPage deliverablesCnt = new RiskEditPage(new ApexPages.StandardController(unsavedLineItem));
//deliverablesCnt.getrisk().add(unsavedLineItem);
// Add parameters to page URL
ApexPages.currentPage().getParameters().put('id', unsavedLineItem.id );
PageReference pageRef = deliverablesCnt.saveNew();
Test.stopTest();
https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_error_handling.htm
Best regards
Alain
All Answers
1) error: System.QueryException: List has no rows for assignment to SObject.
You can get the exact row of the error between the brackets normally.
2) Where have you set the parameter 'id' ?
Class: risk = [Select Name, Assign_To__c, OpId__c, Risk_Mitigation__r.OpId__c, FWI_Work_Order__c, Consequence_of_Failure__c, Covered_in_SOW_Hrs__c,
Custom_Development_Required__c, Description__c, Function__c, Risk_Mitigation__c, Risk_of_Failure__c,
Risk_Mitigation__r.Name, Signoff__c, Signoff2__c, Status__c, Strategy_to_Mitigate_Risk__c, Triggering_Action__c, Type__c,
User_Impact__c, Create_Task__c, Risk_of_Failure_Score__c from Risk__c
where Id = :ApexPages.currentPage().getparameters().get('id')];
Test.startTest();
Test.setCurrentPage(Page.RiskEditPage);
RiskEditPage deliverablesCnt = new RiskEditPage(new ApexPages.StandardController(unsavedLineItem));
//deliverablesCnt.getrisk().add(unsavedLineItem);
// Add parameters to page URL
ApexPages.currentPage().getParameters().put('id', unsavedLineItem.id );
PageReference pageRef = deliverablesCnt.saveNew();
Test.stopTest();
https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_error_handling.htm
Best regards
Alain