You need to sign in to do that
Don't have an account?
Venkatesh Ganta 16
How to cover code Coverage for Apex rest Api
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();
}
}
```
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();
}
}
```
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: Test Class : 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
All Answers
I have updated your test class and apex for web service, please update your code accordingly.
Apex Class:
Test Class :
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
@Suraj Thanks for your updated code, the code which you shared is still covering only 57%, here Name is the Auto Number field so it is non writable field so i update my code as below, can you please check.
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;
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();
}
}
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: Test Class : 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