I've written a test class for order update, though I am stuck at some minor issue which I am unable to get through. My test class looks like:
@IsTest
public class TestCreateMyOrder {
static testMethod void validateCreateMyOrder() {
// for pricebook and product entry
Pricebook2 standardPricebook = new Pricebook2(
Id = Test.getStandardPricebookId(),
IsActive = true
);
update standardPricebook;
standardPricebook = [SELECT IsStandard FROM Pricebook2 WHERE Id = :standardPricebook.Id];
Product2 p = new Product2(Name='My Product', IsActive = true);
insert p;
PricebookEntry pbe = new PricebookEntry(UnitPrice=10.0, Product2Id=p.Id, Pricebook2Id=standardPricebook.Id, IsActive=true);
insert pbe;
//new order entry
Order ord = new Order(
Name='Test Order',
AccountId='0018A00000HWF1YQAX',// this is an existing account id
EffectiveDate=System.today(),
Status='Draft',
Pricebook2Id = standardPricebook.Id
);
insert ord;
//creating order item
OrderItem oi = new OrderItem(
Product2Id=p.Id,
Quantity=1.0,
OrderId=ord.Id,
UnitPrice=10.0
);
insert oi;
//update order status
ord.Status='Activated';
update ord;
}
}
Here, order item insertion is necessary as without any product in an order, the order status can not be set to activated
. The error I am getting here is an exception thrown at the time on insert oi;
:
System.DmlException: Insert failed. First exception on row 0; first error: REQUIRED_FIELD_MISSING, Required fields are missing: [PricebookEntryId]: [PricebookEntryId]
I hope to get some understanding of the error here