元の質問 : Trigger coverage
Pricebook2オブジェクトの IsStandard フィールドは直接updateできないようです。
困った。
そのためテストクラスには標準の価格表のIdを得るメソッドが用意されているみたい。
Test.getStandardPricebookId();
しかし、テストクラスでは標準の価格表のIdが欲しい。
しかたないので、トリガーの方を変更します。
PDF作成の時の回避方法と似た感じですね。
if (Test.isRunningTest() ){
stPrId = Test.getStandardPricebookId();
} else {
Pricebook2 pb = [select Id from Pricebook2 where IsStandard = TRUE][0];
stPrId = pb.Id;
}
/**
* apex:pageを利用してPDFをつくる
*/
@AuraEnabled
public static String createPdf(){
PageReference pageRef = new PageReference('/apex/pdfFkd_test');
pageRef.getParameters().put('mode', 'save');
pageRef.getParameters().put('Title', 'Simple');
//pageRef.getParameters().put('id', paramIds);
//pageRef.getParameters().put('rmk', remarks);
//String body = Test.isRunningTest() ? 'ダミー' : String.valueof(pageRef.getContent());
String body = Test.isRunningTest() ? 'ダミー' : EncodingUtil.Base64Encode(pageRef.getContent());
return body;
}
トリガーの全容
public class Product2TriggerHandler {
public static void AtualizaValorProduto(List<Product2> produtosLista){
list<Id> Idlist = new list<Id>();
list<Product2> ProdsToUpdate = new list<Product2>();
for(Product2 pr:produtosLista){
Idlist.add(pr.Id);
}
Id stPrId;
if (Test.isRunningTest() ){
stPrId = Test.getStandardPricebookId();
} else {
Pricebook2 pb = [select Id from Pricebook2 where IsStandard = TRUE][0];
stPrId = pb.Id;
}
for(Product2 p:produtosLista){
for(Pricebookentry pbe:[select Product2Id,UnitPrice from Pricebookentry where Pricebook2Id = :stPrId and Product2Id IN :Idlist]){
If((pbe.Product2Id == p.Id)&&(p.Preco_catalogo_padrao__c!=pbe.UnitPrice)){
p.Preco_catalogo_padrao__c = pbe.UnitPrice;
system.debug('this is it '+pbe.UnitPrice);
system.debug('this is that '+p.Preco_catalogo_padrao__c);
ProdsToUpdate.add(p);
}
}
}
If(ProdsToUpdate.size()>0&&trigger.isAfter){
update ProdsToUpdate;
}
}
}