In my test class I insert new products and pricebookentries, in my test class I don't use seeAllDate=true
annotation and in order to retrieve standard pricebook id I used Test.getStandardPricebookId()
method, here's my code:
Product2 p1 = new Product2(Name='Product Monthly 1111', Family='Monthly', isActive=true, CurrencyIsoCode='USD');
Product2 p2 = new Product2(Name='Product Yearly 2222', Family='Yearly', isActive=true, CurrencyIsoCode='USD');
insert new List<Product2>{p1, p2};
Id pricebookId = Test.getStandardPricebookId();
PricebookEntry pbe1 = new PricebookEntry(Pricebook2id=pricebookId, Product2id=p1.ID, isActive=true, CurrencyIsoCode='USD', unitPrice=100);
PricebookEntry pbe2 = new PricebookEntry(Pricebook2id=pricebookId, Product2id=p2.ID, isActive=true, CurrencyIsoCode='USD', unitPrice=50);
insert pbe1;
insert pbe2;
List<PricebookEntry> pbes = [SELECT ID FROM PricebookEntry
WHERE Product2id IN (:p1.Id, :p2.Id) AND Pricebook2.isStandard = TRUE AND Pricebook2.isActive = TRUE AND CurrencyIsoCode = 'USD' AND isActive = TRUE];
System.assertEquals(2, pbes.size());
pbes.size()
returns 0
. I used the same query in console for existing data and I got results. What am I doing wrong?
UPDATE: When I debug this code, standard pricebook returns isStandard and isActive fields both with false values:
List<PricebookEntry> pbez = [SELECT ID, Product2Id, Pricebook2.isStandard, Pricebook2.isActive, CurrencyIsoCode, isActive FROM PricebookEntry];
system.debug(pbez[0].Pricebook2.isStandard);
system.debug(pbez[0].Pricebook2.isActive);
How is it possible to workaround this?