You need to sign in to do that
Don't have an account?

How do I test LeadHistory table? Geting empty query result.
Desperately needing some help here!
I have a batch class that sends an email to a lead owner based on the Status not changing during a specified timeframe. I manually tested it (without the time query filter) and the code was doing what it needs to do. I've now written the test code only to find the Leadhistory query returns an null record set. I can see the Leads have an ID and I perform some status updates on the test method to generate the LeadHistory records so im clueless as to why it is not returning any records.
test method:
When I run the test the test method debugs return a null data set on the LeadHistory query that is supposed to set the CreatedDate. All queries before that work just fine.
Is it that you cant query hte LeadHistory table on a testmethods? (doesnt seem right)
Or that changes to the lead are not tracked in LeadHistory?
Any help here would be much appreciated!
I have a batch class that sends an email to a lead owner based on the Status not changing during a specified timeframe. I manually tested it (without the time query filter) and the code was doing what it needs to do. I've now written the test code only to find the Leadhistory query returns an null record set. I can see the Leads have an ID and I perform some status updates on the test method to generate the LeadHistory records so im clueless as to why it is not returning any records.
test method:
@isTest private class LeadStatusBatchTest { @isTest static void test_method_one() { // First Load some Leads from resource file List<sObject> leads = Test.loadData(Lead.sObjectType, 'Default_Lead_Test_Data'); system.debug('### [LeadStatusBatchTest] leads (loaded test data): '+ leads); //set a datetime to 4 weeks ago to update createdDate Datetime weeksAgo_4 = Datetime.now().addDays(-28); for(Lead ld: (List<Lead>)leads) { //update the status and save to DB ld.Status = 'Open'; Test.setCreatedDate(ld.Id, weeksAgo_4.addDays(-7)); } update leads; //to generate a leadHistory entry for Open status system.debug('### [LeadStatusBatchTest] Updated CreatedDate on Leads: '+ [Select id, CreatedDate From Lead where Id = :leads]); //validate update worked for(lead ld: [select id, status, createdDate From Lead where id in : leads]){ system.assertEquals('Open', ld.Status); system.assertEquals(weeksAgo_4.addDays(-7), ld.CreatedDate); } //get the leadhistory records and update their createddate to same as lead created date for(LeadHistory lh: [select id, oldvalue, newvalue from LeadHistory where LeadId =: leads]){ Test.setCreatedDate(lh.id, weeksAgo_4.addDays(-7)); } system.debug('### [LeadStatusBatchTest] LeadHistory testdata: '+ [select id, oldvalue, newvalue from LeadHistory where LeadId =: leads]); //update Status to Contacted for(lead ld: (List<Lead>)leads){ ld.Status = 'Contacted'; } update leads; //get LeadHistory for Lead and update the CreatedDate for(LeadHistory lh: [select id, oldvalue, newvalue from LeadHistory where LeadId =: leads]){ if(lh.newvalue == 'Contacted') Test.setCreatedDate(lh.id, weeksAgo_4); } system.debug('### [LeadStatusBatchTest] leadHistory Contacted status: '+ [select id, oldvalue, newvalue from LeadHistory where LeadId =: leads]); //validate LeadHistory CreatedDate for(LeadHistory lh: [select id, CreatedDate from LeadHistory where LeadId =: leads]){ system.assertEquals(weeksAgo_4, lh.CreatedDate); } test.startTest(); //run batch class LeadStatusBatch db = new LeadStatusBatch(); database.executeBatch(db); test.stopTest(); system.debug('### [LeadStatusBatchTest] Stopped Test. '); //make validations if execution was successful } }
When I run the test the test method debugs return a null data set on the LeadHistory query that is supposed to set the CreatedDate. All queries before that work just fine.
Is it that you cant query hte LeadHistory table on a testmethods? (doesnt seem right)
Or that changes to the lead are not tracked in LeadHistory?
Any help here would be much appreciated!
Hi!
Did you manage to achieve this?