I have a test class that is only covering my trigger 48% and I want to get it as close to 100% as possible. It appears there is one section that I am not covering when using the Developer Console but I am not sure how to modify the class to include these rows. The rows where there is no coverage are the rows between:
for(Opportunitylineitem Opplist :opplinitemlist ){
and
RecipeList.add(rec);
Trigger:
trigger InsertRecipeSheets on Opportunity (after update){
List<Recipe_Sheet__c> RecipeList =new List<Recipe_Sheet__c>();
List<Opportunitylineitem> opplinitemlist =new List<Opportunitylineitem>();
List<Opportunity> Opportunitylist =new List<Opportunity>();
for(Opportunity opp :trigger.new){
if(opp.Create_Recipe_Sheet_s__c==True){
Opplinitemlist =[select Id,PricebookEntry.Product2.Name,PricebookEntry.Product2.Do_Not_Discount__c,Wall_Mount_Stem__c,Quantity,PricebookEntry.Product2.Record_Type_ID__c,Total_Drop__c,Finish_s__c,Notes__c, For_Vaulted_Ceiling__c,PricebookEntry.Product2.id from Opportunitylineitem where Opportunityid =: opp.id AND Product2.Do_Not_Discount__c=False AND Product2.Record_Type_ID__c<>''];
Opportunitylist =[Select Accountid from Opportunity where Id =: opp.id];
for(Opportunitylineitem Opplist :opplinitemlist ){
Recipe_Sheet__c rec =new Recipe_Sheet__c();
rec.Opportunity__c =Opportunitylist[0].Id;
rec.product__c=opplist.PricebookEntry.Product2.Id;
rec.Name=opplist.PricebookEntry.Product2.Name;
rec.For_Vaulted_Ceiling__c=opplist.For_Vaulted_Ceiling__c;
rec.Wall_Mount_Stem__c=opplist.Wall_Mount_Stem__c;
rec.Finish_s__c=opplist.Finish_s__c;
rec.Notes__c=opplist.Notes__c;
rec.Total_Drop__c=opplist.Total_Drop__c;
rec.Quantity__c=opplist.Quantity;
rec.Status__c='Received by Production';
rec.RecordTypeID=opplist.PricebookEntry.Product2.Record_Type_ID__c;
RecipeList.add(rec);
}
insert RecipeList;
}
}
for(Opportunity Opps :Opportunitylist ){
Opps.Create_Recipe_Sheet_s__c=False;
}
update Opportunitylist;
}
Test Class:
@IsTest (OnInstall=true SeeAllData=true) private class TEST_InsertRecipeSheets{
private static testMethod void myUnitTest() {
Account acc=new Account(
Name='test',
Resale_Certificate_Number_Tax_ID__c='NA',
BillingStreet='123',
BillingCity='portsmouth',
BillingState='NH',
BillingpostalCode='03801',
BillingCountry='US'
);
insert acc;
Pricebook2 pb = [select id from Pricebook2 where IsStandard = true limit 1];
//Product2 prods=[select id,name,Do_Not_Discount__c,Record_Type_ID__c from Product2 where IsActive = true AND Record_Type_ID__c<>'' AND Do_Not_Discount__c= FALSE];
// create the product
Product2 p1= new Product2(
name='CLOUD 19',
IsActive=true,
Description='My Product',
ProductCode='12345',
Do_Not_Discount__c=False
);
insert p1;
// create 2nd product
Product2 p2= new Product2(
name='TWIG 5',
IsActive=true,
Description='My Base Product',
ProductCode='11111',
Do_Not_Discount__c=False
);
insert p2;
// create the pricebookentry
PricebookEntry pbe1 = new PricebookEntry(
Pricebook2Id=pb.id,
Product2Id=p1.id,
UnitPrice=1.00,
IsActive=true,
UseStandardPrice=false
);
insert pbe1;
// create 2nd pricebookentry
PricebookEntry pbe2 = new PricebookEntry(
Pricebook2Id=pb.id,
Product2Id=p2.id,
UnitPrice=1.00,
IsActive=true,
UseStandardPrice=false
);
insert pbe2;
Item__c i1 =new Item__c(
Name='Test'
);
insert i1;
Item__c i2 =new Item__c(
Name='Test'
);
insert i2;
Product_Item__c pi1=new Product_Item__c(
Product__c=p1.id,
Item__c=i1.id,
Quantity__c=1,
External_Wall_Mount_Vaulted_Ceiling__c=2,
Standard_Item__c=True
);
insert pi1;
Product_Item__c pi2=new Product_Item__c(
Product__c=p2.id,
Item__c=i2.id,
Quantity__c=2,
External_Wall_Mount_Vaulted_Ceiling__c=3,
Standard_Item__c=True
);
insert pi2;
Product_Item__c pi3=new Product_Item__c(
Product__c=p2.id,
Item__c=i2.id,
Quantity__c=null,
External_Wall_Mount_Vaulted_Ceiling__c=null,
Standard_Item__c=False
);
insert pi3;
// create the opportunity
Opportunity opp1 = new Opportunity(
name='Test Opp 1',
StageName = 'Balance Received',
CloseDate = Date.newInstance(2009,01,01),
Production_Date__c=Date.newInstance(2009,01,01),
Production_Status__c='Received By Production',
Create_Recipe_Sheet_s__c=True,
Pricebook2Id=pb.id
);
insert opp1;
// add the line item
OpportunityLineItem oli1 = new OpportunityLineItem(
Quantity = 1,
PricebookEntryId = pbe1.id,
OpportunityId = opp1.id,
For_Vaulted_Ceiling__c='No',
Wall_Mount_Stem__c='No',
UnitPrice=1
);
insert oli1;
OpportunityLineItem oli2 = new OpportunityLineItem(
Quantity = 2,
PricebookEntryId = pbe2.id,
OpportunityId = opp1.id,
For_Vaulted_Ceiling__c='No',
Wall_Mount_Stem__c='No',
UnitPrice = 2
);
insert oli2;
update opp1;
Recipe_Sheet__c RS1 =new Recipe_Sheet__c(
Opportunity__c=opp1.id,
Product__c=oli1.PricebookEntry.Product2.Id,
Status__c='Inventory Committed',
For_Vaulted_Ceiling__c=oli1.For_Vaulted_Ceiling__c,
Wall_Mount_Stem__c=oli1.Wall_Mount_Stem__c,
Name='Test'
);
insert RS1;
RS1 = [SELECT Id,Product__c,Status__c FROM Recipe_Sheet__c
WHERE Id = :RS1.Id];
System.assertEquals('Inventory Committed', RS1.Status__c);
Recipe_Sheet__c RS2 =new Recipe_Sheet__c(
Opportunity__c=opp1.id,
Product__c=oli2.PricebookEntry.Product2.Id,
Status__c='Inventory Committed',
For_Vaulted_Ceiling__c=oli2.For_Vaulted_Ceiling__c,
Wall_Mount_Stem__c=oli2.Wall_Mount_Stem__c,
Recalculate_Recipe_Sheet_Items__c = True,
Name='Test'
);
insert RS2;
RS2 = [SELECT Id,Product__c,Status__c FROM Recipe_Sheet__c
WHERE Id = :RS2.Id];
System.assertEquals('Inventory Committed', RS2.Status__c);
Recipe_Sheet_Item__c ri1=new Recipe_Sheet_Item__c(
Recipe_Sheet__c=RS1.id,
Item__c=i1.id,
Quantity__c=1
);
insert ri1;
ri1 = [SELECT Id,Recipe_Sheet__c,Item__c, Quantity__c FROM Recipe_Sheet_Item__c
WHERE Id = :ri1.Id];
System.assertEquals(1, ri1.Quantity__c);
Recipe_Sheet_Item__c ri2=new Recipe_Sheet_Item__c(
Recipe_Sheet__c=RS1.id,
Item__c=i2.id,
Quantity__c=3
);
insert ri2;
}
}
Best Answer
You never update your Opportunity after you create line items for it. Try putting:
at the end.
EDIT:
Also try removing AND
Product2.Do_Not_Discount__c=False AND Product2.Record_Type_ID__c<>''
one at a time and see if that makes a difference. You might need to add an additional filter to the product you return in your test class.