Skip to main content
Venkatesh Ganta (GIRIKON) ha fatto una domanda in #Apex
I am getting a NullPoint Exception on test class, any help will be appreciated.

My API Class:-

```

@RestResource (urlmapping = '/UpdateBill/*')

    global without sharing class ApiUpdateClass{

        

        @HttpPost

        global static void updateBill(OrderInfo oInfo){

            List<OrderDetail> objOrderDetail = oInfo.orderDt;

            Map<string,string> orderDetailMap=new Map<string,string>();

            List<Delivery_Order__c> upodateableList = new List<Delivery_Order__c>();

            if(objOrderDetail !=null && !objOrderDetail.isEmpty())

            {

                for(OrderDetail obj:objOrderDetail)

                {

                    orderDetailMap.put(obj.doNumber,obj.billNumber);

                }

                List<Delivery_Order__c> objOrderList = [Select id,Name,Bill_Number__c From Delivery_Order__c Where Name in :orderDetailMap.keySet()];

                for(Delivery_Order__c obj:objOrderList)

                {

                    if(orderDetailMap.containsKey(obj.Name))

                    {

                        obj.Bill_Number__c = orderDetailMap.get(obj.Name);

                        obj.Status__c ='Bill Generated';

                        upodateableList.add(obj);

                    }    

                }              

                if(!upodateableList.isEmpty())

                {

                    database.update(upodateableList);

                    RestContext.response.responseBody = Blob.valueOf('{"success":"Update successfully"}');

                }        

            }

            else

            {

                RestContext.response.responseBody = Blob.valueOf('{"error":"There is something went wrong"}');

            }    

            // RestContext.response.responseBody = Blob.valueOf('{"error":"'+objOrderDetailList+'"}');*/

        }

        

        global class  OrderDetail{

            global string billNumber;

            global string doNumber;

            

        }

         global class OrderInfo{

           List<OrderDetail> orderDt { get; set; }

        }

    }

```

Test Class:-

```

@isTest

@isTest

public class ApiUpdateClass_Test {

    

    Public static testmethod void setup() {

        Test.startTest();

        RestRequest request = new RestRequest();

        RestResponse res = new RestResponse();

        request.requestUri ='https://uat-restexplorer.cs32.force.com/services/apexrest/UpdateBill';

        request.httpMethod = 'POST';

        request.addHeader('Content-Type', 'Test/xml');

        RestContext.request = request;

        RestContext.response = res;

        

        ApiUpdateClass.OrderInfo oinfor = new ApiUpdateClass.OrderInfo();

        ApiUpdateClass.OrderDetail od= new ApiUpdateClass.OrderDetail();

        

        od.doNumber='123';

        od.billNumber='234';

        

        //Delivery_Order__c dod =ApiUpdateClass.updateBill(oinfor);

        ApiUpdateClass.updateBill(oinfor);

        System.assertEquals('234', od.billNumber);

        Test.stopTest();

    }

}

```

How to cover code Coverage for Apex rest Api
3 risposte
  1. 23 nov 2021, 07:16
    Hi Venkatesh Ganta 16,

    As you referred Name is the auto number field, I have updated the test class for that. Please refer to the below code, your code coverage will definitely improve. Please mark it as the best answer.

    Apex Class:

    @RestResource (urlmapping = '/UpdateBill/*')

    global without sharing class ApiUpdateClass{

    @HttpPost

    global static void updateBill(OrderInfo oInfo){

    try{

    List<OrderDetail> objOrderDetail = oInfo.orderDt;

    Map<string,string> orderDetailMap=new Map<string,string>();

    List<Delivery_Order__c> upodateableList = new List<Delivery_Order__c>();

    if(objOrderDetail !=null && !objOrderDetail.isEmpty())

    {

    for(OrderDetail obj:objOrderDetail)

    {

    orderDetailMap.put(obj.doNumber,obj.billNumber);

    }

    List<Delivery_Order__c> objOrderList = new List<Delivery_Order__c>();

    objOrderList = [Select id,Name,Bill_Number__c From Delivery_Order__c Where Name in :orderDetailMap.keySet()];

    for(Delivery_Order__c obj:objOrderList)

    {

    if(orderDetailMap.containsKey(obj.Name))

    {

    obj.Bill_Number__c = orderDetailMap.get(obj.Name);

    obj.Status__c ='Bill Generated';

    upodateableList.add(obj);

    }

    }

    if(!upodateableList.isEmpty())

    {

    database.update(upodateableList);

    RestContext.response.responseBody = Blob.valueOf('{"success":"Update successfully"}');

    }

    }

    else

    {

    RestContext.response.responseBody = Blob.valueOf('{"error":"There is something went wrong"}');

    }

    // RestContext.response.responseBody = Blob.valueOf('{"error":"'+objOrderDetailList+'"}');*/

    }

    catch(Exception e){

    System.debug('error >> '+e.getMessage()+'at line >> '+e.getLineNumber());

    }

    }

    global class OrderDetail{

    global string billNumber;

    global string doNumber;

    }

    global class OrderInfo{

    global List<OrderDetail> orderDt { get; set; }

    }

    }

    Test Class : 

    @isTest

    public class ApiUpdateClass_Test {

    public static testmethod void setup() {

    Test.startTest();

    RestRequest request = new RestRequest();

    RestResponse res = new RestResponse();

    request.requestUri ='https://uat-restexplorer.cs32.force.com/services/apexrest/UpdateBill';

    request.httpMethod = 'POST';

    request.addHeader('Content-Type', 'Test/xml');

    RestContext.request = request;

    RestContext.response = res;

    ApiUpdateClass.OrderInfo oinfor = new ApiUpdateClass.OrderInfo();

    ApiUpdateClass.OrderDetail od= new ApiUpdateClass.OrderDetail();

    List<ApiUpdateClass.OrderDetail> OrderDetailList = new List<ApiUpdateClass.OrderDetail>();

    Delivery_Order__c oderObj = new Delivery_Order__c();

    oderObj.Bill_Number__c = '234';

    // oderObj.Name = '123';

    oderObj.Pincode__c= '123233';

    oderObj.From_Address__c = 'Banipark,Jaipur-302016';

    oderObj.To_Address__c='AJMER NH-8';

    oderObj.Date_Of_Delivery__c = system.today();

    oderObj.Status__c = 'Sent to Tally';

    oderObj.GST__c = '24AAACC1206D1ZM';

    insert oderObj;

    oderObj = [Select id ,Name,Bill_Number__c,Pincode__c,From_Address__c,To_Address__c,Date_Of_Delivery__c,Status__c,GST__c from Delivery_Order__c where Bill_Number__c = '234' LIMIT 1 ];

    System.debug('orderOBJ>>'+oderObj);

    od.doNumber=oderObj.Name;

    od.billNumber='234';

    OrderDetailList.add(od);

    oinfor.orderDt = OrderDetailList;

    //Delivery_Order__c dod =ApiUpdateClass.updateBill(oinfor);

    ApiUpdateClass.updateBill(oinfor);

    System.assertEquals('234', od.billNumber);

    Test.stopTest();

    }

    }

    I hope you find the above solution helpful. If it does, please mark it as Best Answer to help others too.

    Thanks and Regards,

    Suraj Tripathi

     
0/9000