You need to sign in to do that
Don't have an account?
How to write test query to confirm trigger creates custom object?
I have written a piece of code to create several custom objects when a lead converts. It works, but I don't know how to test the code. How do I write the queries to confirm the custom object was created automatically?
Here is the trigger:
And Here is the start of the test:
Here is the trigger:
trigger createModefromLead on Lead (after update) {
List<Mode__c> UpdateModes = new List<Mode__c>();
List<Mode__c> InsertModes = new List<Mode__c>();
Set<Id> AccountIds = new Set<ID>();
for (Lead l :Trigger.new){
if(l.IsConverted){
AccountIds.add(l.ConvertedAccountId);
}
}
List<Mode__c> ModeList = [SELECT Id, Account__c, Name, Mode_Type__c, Est_Shipping_Spend__c, Est_Shipping_Volume__c FROM Mode__c WHERE Account__c in :AccountIds];
for (Lead l :Trigger.new){
if(l.IsConverted){
//Parcel Mode
if(l.HasParcel__c == TRUE){
Set<Id> ParcelModeCount = new Set<Id>();
for (Mode__c m: ModeList){
if(m.Account__c == l.ConvertedAccountId && m.Mode_Type__c =='Parcel'){
m.Est_Shipping_Spend__c = l.Spend_Annual_Parcel__c;
m.Est_Shipping_Volume__c = l.Count_Daily_Parcel__c;
ParcelModeCount.add(m.Id);
UpdateModes.add(m);
}
}
if(ParcelModeCount.size() == 0){
Mode__c Parcel = new Mode__c(
Name = 'Parcel',
Mode_Type__c = 'Parcel',
Account__c = l.ConvertedAccountId,
Est_Shipping_Spend__c = l.Spend_Annual_Parcel__c,
Est_Shipping_Volume__c = l.Count_Daily_Parcel__c);
InsertModes.add(Parcel);
}
}
}
if(UpdateModes.size()>0){
Update Updatemodes;
}
if(InsertModes.size()>0){
Insert InsertModes;
}
}
}
List<Mode__c> UpdateModes = new List<Mode__c>();
List<Mode__c> InsertModes = new List<Mode__c>();
Set<Id> AccountIds = new Set<ID>();
for (Lead l :Trigger.new){
if(l.IsConverted){
AccountIds.add(l.ConvertedAccountId);
}
}
List<Mode__c> ModeList = [SELECT Id, Account__c, Name, Mode_Type__c, Est_Shipping_Spend__c, Est_Shipping_Volume__c FROM Mode__c WHERE Account__c in :AccountIds];
for (Lead l :Trigger.new){
if(l.IsConverted){
//Parcel Mode
if(l.HasParcel__c == TRUE){
Set<Id> ParcelModeCount = new Set<Id>();
for (Mode__c m: ModeList){
if(m.Account__c == l.ConvertedAccountId && m.Mode_Type__c =='Parcel'){
m.Est_Shipping_Spend__c = l.Spend_Annual_Parcel__c;
m.Est_Shipping_Volume__c = l.Count_Daily_Parcel__c;
ParcelModeCount.add(m.Id);
UpdateModes.add(m);
}
}
if(ParcelModeCount.size() == 0){
Mode__c Parcel = new Mode__c(
Name = 'Parcel',
Mode_Type__c = 'Parcel',
Account__c = l.ConvertedAccountId,
Est_Shipping_Spend__c = l.Spend_Annual_Parcel__c,
Est_Shipping_Volume__c = l.Count_Daily_Parcel__c);
InsertModes.add(Parcel);
}
}
}
if(UpdateModes.size()>0){
Update Updatemodes;
}
if(InsertModes.size()>0){
Insert InsertModes;
}
}
}
And Here is the start of the test:
@isTest
private class createModefromLead_TestClass{
public static testmethod void Convert_NewAcc_CreateMode(){
//Insert Lead
Lead LD1 = new Lead(
LastName = 'LD1',
Email = 'LD1@LCA.com',
Company = 'LCA',
Status = 'Closed - Qualified'
);
Insert LD1;
//Convert Lead
Database.LeadConvert lc = new database.LeadConvert();
lc.setLeadId(LD1.id);
lc.setConvertedStatus('Closed - Qualified');
//Verify LD1 Convert
Database.LeadConvertResult lcr = Database.convertLead(lc);
System.assert(lcr.isSuccess());
//Verify LD1 Creates Mode object on Account
}
}
private class createModefromLead_TestClass{
public static testmethod void Convert_NewAcc_CreateMode(){
//Insert Lead
Lead LD1 = new Lead(
LastName = 'LD1',
Email = 'LD1@LCA.com',
Company = 'LCA',
Status = 'Closed - Qualified'
);
Insert LD1;
//Convert Lead
Database.LeadConvert lc = new database.LeadConvert();
lc.setLeadId(LD1.id);
lc.setConvertedStatus('Closed - Qualified');
//Verify LD1 Convert
Database.LeadConvertResult lcr = Database.convertLead(lc);
System.assert(lcr.isSuccess());
//Verify LD1 Creates Mode object on Account
}
}
Hello, ilewi121, you can use the LeadConvertResult.getAccountId()[1] method to get the ID of the account created upon conversion. With this info, you can construct a query looking for Mode records related to the newly created account. For example:
List<Mode__c> modes = [SELECT Id, Name FROM Mode__c WHERE Account__c = :lcr.getAccountId()];
System.assertEquals(1, modes.size(), 'One and only one Mode should have been created!');
[1]: LeadConvertResult.getAccountId() (http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_Database_LeadConvertResult_instance_methods.htm)
All Answers
Hello, ilewi121, you can use the LeadConvertResult.getAccountId()[1] method to get the ID of the account created upon conversion. With this info, you can construct a query looking for Mode records related to the newly created account. For example:
List<Mode__c> modes = [SELECT Id, Name FROM Mode__c WHERE Account__c = :lcr.getAccountId()];
System.assertEquals(1, modes.size(), 'One and only one Mode should have been created!');
[1]: LeadConvertResult.getAccountId() (http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_Database_LeadConvertResult_instance_methods.htm)