You need to sign in to do that
Don't have an account?
Vikas Kumar 135
Required fields are missing: [Pricebook2Id] error when creating Test Class
Hi All,
I am getting below error when I run a test on a QuoteLineItem test class I created.
System.DmlException: Insert failed. First exception on row 0; first error: REQUIRED_FIELD_MISSING, Required fields are missing: [Pricebook2Id]: [Pricebook2Id]
My test class is below:
@isTest
public class QuoteLineItemResourceTest {
public static testMethod void getQLI() {
Account objaccount=new Account();
objaccount.Name='TestAccount';
insert objaccount;
Id standardPB = Test.getStandardPricebookId();
Opportunity objopportunity=new Opportunity();
objopportunity.AccountID=objaccount.id;
objopportunity.Name='TestOpportunity';
objopportunity.StageName='Prospecting';
objopportunity.CloseDate=Date.today();
objopportunity.Pricebook2Id = standardPB;
insert objopportunity;
Product2 objProduct2=new Product2();
objProduct2.Name='ABC';
objProduct2.CurrencyIsoCode='USD';
insert objProduct2;
PricebookEntry objpricebookentry =new PricebookEntry();
objpricebookentry.Product2ID = objProduct2.id;
objpricebookentry.UnitPrice=23.50;
objpricebookentry.UseStandardPrice=true;
objopportunity.Pricebook2ID=standardPB;
insert objpricebookentry;
Quote q1 = new Quote();
q1.Name = 'Quote 1';
q1.Budget_Estimate__c = 100;
q1.OpportunityId = objopportunity.Id;
q1.Pricebook2ID=standardPB;
insert q1;
QuoteLineItem objQLI = new QuoteLineItem(QuoteId = q1.Id,
Quantity = 5,
UnitPrice = 10,
PricebookEntryId=objpricebookentry.id,
Product2ID=objProduct2.id,
Operating_System_Id__c = '1;2',
Third_Party_Provider_Id__c = '3;4',
Third_Party_Audience_Id__c = '5;6',
Country_Id__c = '7;8',
State_Id__c = '4;5',
DMA_Id__c = '6;7',
Content_Limitation_Id__c = '4;5',
Carriers_Id__c = '1;3',
Weather_Temperatures_Id__c = '2;3',
Weather_Conditions_Id__c = '4;5',
Geosegment_Id__c = '2;3',
Start_Date__c = Date.today().addDays(1),
End_Date__c = Date.today().addDays(10),
Planned_Cost__c = 100,
Rate__c = 10,
Planned_Unit__c = 100,
Cost_Method__c = 'CPM');
insert objQLI;
Test.startTest();
RestRequest req = new RestRequest();
RestResponse res = new RestResponse();
req.requestURI = '/services/apexrest/QuoteLineItem/'+objQLI.Id;
req.httpMethod = 'GET';
req.addHeader('Content-Type', 'application/json');
RestContext.request = req;
RestContext.response = res;
QuoteLineItemResource.doGet();
Test.stopTest();
}
}
Any help will be appreciated. Thanks.
I am getting below error when I run a test on a QuoteLineItem test class I created.
System.DmlException: Insert failed. First exception on row 0; first error: REQUIRED_FIELD_MISSING, Required fields are missing: [Pricebook2Id]: [Pricebook2Id]
My test class is below:
@isTest
public class QuoteLineItemResourceTest {
public static testMethod void getQLI() {
Account objaccount=new Account();
objaccount.Name='TestAccount';
insert objaccount;
Id standardPB = Test.getStandardPricebookId();
Opportunity objopportunity=new Opportunity();
objopportunity.AccountID=objaccount.id;
objopportunity.Name='TestOpportunity';
objopportunity.StageName='Prospecting';
objopportunity.CloseDate=Date.today();
objopportunity.Pricebook2Id = standardPB;
insert objopportunity;
Product2 objProduct2=new Product2();
objProduct2.Name='ABC';
objProduct2.CurrencyIsoCode='USD';
insert objProduct2;
PricebookEntry objpricebookentry =new PricebookEntry();
objpricebookentry.Product2ID = objProduct2.id;
objpricebookentry.UnitPrice=23.50;
objpricebookentry.UseStandardPrice=true;
objopportunity.Pricebook2ID=standardPB;
insert objpricebookentry;
Quote q1 = new Quote();
q1.Name = 'Quote 1';
q1.Budget_Estimate__c = 100;
q1.OpportunityId = objopportunity.Id;
q1.Pricebook2ID=standardPB;
insert q1;
QuoteLineItem objQLI = new QuoteLineItem(QuoteId = q1.Id,
Quantity = 5,
UnitPrice = 10,
PricebookEntryId=objpricebookentry.id,
Product2ID=objProduct2.id,
Operating_System_Id__c = '1;2',
Third_Party_Provider_Id__c = '3;4',
Third_Party_Audience_Id__c = '5;6',
Country_Id__c = '7;8',
State_Id__c = '4;5',
DMA_Id__c = '6;7',
Content_Limitation_Id__c = '4;5',
Carriers_Id__c = '1;3',
Weather_Temperatures_Id__c = '2;3',
Weather_Conditions_Id__c = '4;5',
Geosegment_Id__c = '2;3',
Start_Date__c = Date.today().addDays(1),
End_Date__c = Date.today().addDays(10),
Planned_Cost__c = 100,
Rate__c = 10,
Planned_Unit__c = 100,
Cost_Method__c = 'CPM');
insert objQLI;
Test.startTest();
RestRequest req = new RestRequest();
RestResponse res = new RestResponse();
req.requestURI = '/services/apexrest/QuoteLineItem/'+objQLI.Id;
req.httpMethod = 'GET';
req.addHeader('Content-Type', 'application/json');
RestContext.request = req;
RestContext.response = res;
QuoteLineItemResource.doGet();
Test.stopTest();
}
}
Any help will be appreciated. Thanks.
While creating the instance of price book entry you have added this line in your code:
objopportunity.Pricebook2ID=standardPB;
Please replace it with:
objpricebookentry.Pricebook2ID=standardPB;
and please make your price book entry active.
I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.
Thanks and Regards,
Deepali Kulshrestha