function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
cathy369cathy369 

Simple Trigger works 'live' but not when Test class run

okay... we are adding a new object that we want to which we want to assign an order number... we already have an order number on the opportunity object, and we do not want duplicate order numbers between the 2 objects.

i have created a 3rd object, Order_number and written a simple trigger & class to get the next order number... it works in test when I add records individually, but when I run a test class i receive the following error:

System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, getOrdNum: execution of BeforeInsert

caused by: System.QueryException: List has no rows for assignment to SObject

Class.orderNumber.getOrderNumber: line 5, column 1
Trigger.getOrdNum: line 4, column 1: []

here is the trigger & class...

any help at all would be greatly appreciated!
trigger getOrdNum on Opportunity (before insert) {

    for (Opportunity o : Trigger.new){
       o.Test_SF_Ord_Num__c = orderNumber.getOrderNumber();
    }
}

--------------------------------------------------
public class orderNumber {

   public static decimal getOrderNumber(){
  
      Order_Number__c orderNum = [SELECT Order_Num__c FROM Order_Number__c WHERE Name = 'ORDER'];
   
      orderNum.Order_Num__c += 1;
     
      update orderNum;
   
      return orderNum.Order_Num__c;

   }
}

 
Best Answer chosen by cathy369
Amit Chaudhary 8Amit Chaudhary 8
Please post your test class . It look like you did not created test data for Order_Number__c object in your Test class.

Please update your OrderNumber test class like below
public class orderNumber {

   public static decimal getOrderNumber(){
  
      List<Order_Number__c> ListorderNum = [SELECT Order_Num__c FROM Order_Number__c WHERE Name = 'ORDER'];
   
      if( ListorderNum.size() > 0 )
      {
        ListorderNum[0].Order_Num__c += 1;
        update orderNum[0];
        return orderNum[0].Order_Num__c;
      }  
      return 0;

   }
}



 

All Answers

Amit Chaudhary 8Amit Chaudhary 8
Please post your test class . It look like you did not created test data for Order_Number__c object in your Test class.

Please update your OrderNumber test class like below
public class orderNumber {

   public static decimal getOrderNumber(){
  
      List<Order_Number__c> ListorderNum = [SELECT Order_Num__c FROM Order_Number__c WHERE Name = 'ORDER'];
   
      if( ListorderNum.size() > 0 )
      {
        ListorderNum[0].Order_Num__c += 1;
        update orderNum[0];
        return orderNum[0].Order_Num__c;
      }  
      return 0;

   }
}



 
This was selected as the best answer
cathy369cathy369
Thanks for your help!  By changing the class as you suggested, my test worked.... You're right, I did not post my test class... I was using an existing test class that creates orders, so by default would test this.

Thanks again.