You need to sign in to do that
Don't have an account?
Suresh Raghuram
Issue while passing the oldMap to the Class method while calling from the test class
Hi Community,
I came across the following the situation.
I created an opportunity for the test data and I updated the stage of the opportunity. Expected a value to be changed on the other object.
Sample of my code is as follows.
My issue is in Bold letters. The old map is picking the updated value. where i need to compare old value with new value. but after update the old Map is also takinig new value.
What I am doing wrong.
@isTest
private class opporutnityBusinessLogicTest{
static testmethod void mytestmethod1(){
Ilist<Account> lstAccount = new list<Account>();
list<Opportunity> lstOpportunity = new list<Opportunity>();
list<PP_OPRTY_PRODT__c> lstOpportunityProd =new list<PP_OPRTY_PRODT__c>();
final string BrokerRecType='Customer';
schema.describesobjectresult r=account.sobjecttype.getdescribe();
map<string,schema.recordtypeinfo> m=r.getrecordtypeinfosbyname();
id brkerRecType= m.get(BrokerRecType).getrecordtypeid();
Integer intNoOfRecord=1;
for(integer i=0; i < intNoOfRecord; i++){
account a=new account(Name='Test Customer Account'+i,Broker_Id__c='B99999'+i,PP_ID__c='99999BROKER'+i,Start_Date__c=date.today(),End_Date__c=date.today()+5,recordtypeId=brkerRecType);
lstAccount.add(a);
}
insert lstAccount;
for(integer i=0;i< intNoOfRecord;i++){
Opportunity a=new Opportunity
(CloseDate=date.ValueOf('2015-04-28'),Name='Test Opty ' + i
,StageName='Lead', Strategy__c='Life Insurance'
,Sub_Type__c='New', AccountId = lstAccount[0].Id
,Type='New'
);
lstOpportunity.add(a);
}
insert lstOpportunity;
for(integer i=0;i< intNoOfRecord;i++){
PP_OPRTY_PRODT__c oppProd = new PP_OPRTY_PRODT__c(Name='Dental'+i
, PRODT_STAGE_NM__c ='Lead'
, OPRTY_ID__c=lstOpportunity[0].Id);
lstOpportunityProd.add(oppProd);
}
insert lstOpportunityProd;
List<Opportunity> opt= [Select id, StageName from Opportunity where Id =:lstOpportunity[0].Id];
List<Opportunity> updateOpp = new List<Opportunity>();
test.startTest();
Opportunity oppRecord;
Id oppRecId;
for(Opportunity oppRec : opt){
oppRecId=oppRec.id;
oppRecord=oppRec;
}
map<Id,Opportunity> oldMap=new map<Id,Opportunity>();
oppMap.put(oppRecId,oppRecord);
system.debug('************* Opty Map: '+oldMap);
if(opt != null){
for(Opportunity op:opt){
op.StageName = 'Closed Deferred';
updateOpp.add(op);
}
update updateOpp;
}
system.debug('************* Opty Map: '+oldMap);
OpportunityArchitectureBusinessLogic.updateOpportunityProduct(updateOpp, oldMap);
test.stopTest();
}
}
I came across the following the situation.
I created an opportunity for the test data and I updated the stage of the opportunity. Expected a value to be changed on the other object.
Sample of my code is as follows.
My issue is in Bold letters. The old map is picking the updated value. where i need to compare old value with new value. but after update the old Map is also takinig new value.
What I am doing wrong.
@isTest
private class opporutnityBusinessLogicTest{
static testmethod void mytestmethod1(){
Ilist<Account> lstAccount = new list<Account>();
list<Opportunity> lstOpportunity = new list<Opportunity>();
list<PP_OPRTY_PRODT__c> lstOpportunityProd =new list<PP_OPRTY_PRODT__c>();
final string BrokerRecType='Customer';
schema.describesobjectresult r=account.sobjecttype.getdescribe();
map<string,schema.recordtypeinfo> m=r.getrecordtypeinfosbyname();
id brkerRecType= m.get(BrokerRecType).getrecordtypeid();
Integer intNoOfRecord=1;
for(integer i=0; i < intNoOfRecord; i++){
account a=new account(Name='Test Customer Account'+i,Broker_Id__c='B99999'+i,PP_ID__c='99999BROKER'+i,Start_Date__c=date.today(),End_Date__c=date.today()+5,recordtypeId=brkerRecType);
lstAccount.add(a);
}
insert lstAccount;
for(integer i=0;i< intNoOfRecord;i++){
Opportunity a=new Opportunity
(CloseDate=date.ValueOf('2015-04-28'),Name='Test Opty ' + i
,StageName='Lead', Strategy__c='Life Insurance'
,Sub_Type__c='New', AccountId = lstAccount[0].Id
,Type='New'
);
lstOpportunity.add(a);
}
insert lstOpportunity;
for(integer i=0;i< intNoOfRecord;i++){
PP_OPRTY_PRODT__c oppProd = new PP_OPRTY_PRODT__c(Name='Dental'+i
, PRODT_STAGE_NM__c ='Lead'
, OPRTY_ID__c=lstOpportunity[0].Id);
lstOpportunityProd.add(oppProd);
}
insert lstOpportunityProd;
List<Opportunity> opt= [Select id, StageName from Opportunity where Id =:lstOpportunity[0].Id];
List<Opportunity> updateOpp = new List<Opportunity>();
test.startTest();
Opportunity oppRecord;
Id oppRecId;
for(Opportunity oppRec : opt){
oppRecId=oppRec.id;
oppRecord=oppRec;
}
map<Id,Opportunity> oldMap=new map<Id,Opportunity>();
oppMap.put(oppRecId,oppRecord);
system.debug('************* Opty Map: '+oldMap);
if(opt != null){
for(Opportunity op:opt){
op.StageName = 'Closed Deferred';
updateOpp.add(op);
}
update updateOpp;
}
system.debug('************* Opty Map: '+oldMap);
OpportunityArchitectureBusinessLogic.updateOpportunityProduct(updateOpp, oldMap);
test.stopTest();
}
}
It actually change the reference in oldMap too. It's pretty difficult to tell you the answer but worth trying this
Let me know if it is not working, I'll try it at my end.