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
d.tejdeep@nicomatic.ind.tejdeep@nicomatic.in 

Test class code coverage error

I am inserting multiple invoice and invoice items  at using post web service REST API

Main class
 
@RestResource(urlMapping='/InsertInvoiceandInvoiceitems/*')
global class Bulkinsert_InvoiceInvoiceitems
{  
   global class myWrapper
   {
     public List<Invoice__c> Invoicelst;
     public List<Invoice_Item__c> InvoiceLineslst;
      public string status;
      public string message;
   }
   
@HttpPost
   global static myWrapper doPost()
   {
      
    RestRequest req = RestContext.request;
    Blob body = req.requestBody;
    String requestString = body.toString();
     //system.debug(requestString);
      myWrapper response=new myWrapper(); //this is object of wrapper class
      
      JsonParserInv rw = (JsonParserInv)JSON.deserialize(requestString,JsonParserInv.class);
       List<Invoice__c> InvList=new List<Invoice__c>();
       List<Invoice_Item__c> InvItemsList=new List<Invoice_Item__c>();
       List<Invoice_Item__c> InvItemsList123=new List<Invoice_Item__c>();
       Map<Integer,Invoice_Item__c> mapinvitems = new Map<Integer,Invoice_Item__c>();
       Map<Integer,List<Invoice_Item__c>> mapInvIdToInvitems = new Map<Integer,List<Invoice_Item__c>>();
       
       integer i;
       integer j;
       for(i=0;i<rw.Invoicesdata.invoices.size();i++){
           Invoice__c inv =new Invoice__c();
           inv.Account_Code__c=rw.Invoicesdata.invoices[i].accountCode;
           inv.Invoice_Number__c=rw.Invoicesdata.invoices[i].customerPo;
           date mydate = date.parse(rw.Invoicesdata.invoices[i].invoiceDate); 
           InvList.add(inv);
           //system.debug(InvList);
           for(j=0;j<rw.Invoicesdata.invoices[i].invoiceLines.size();j++){
           Invoice_Item__c ils = new Invoice_Item__c();
            ils.Name= rw.Invoicesdata.invoices[i].customerPo ;
            ils.Product_Family_code__c=rw.Invoicesdata.invoices[i].invoiceLines[j].familly;
            ils.Product_Family__c=rw.Invoicesdata.invoices[i].invoiceLines[j].famillyName; 
         //   InvItemsList.add(ils);
            mapinvitems.put(j, ils);    
               system.debug(mapinvitems);   
           }
          mapInvIdToInvitems.put(i,mapinvitems.values());
           system.debug(mapInvIdToInvitems.keyset());             
       }   
 
      try
      {
          insert InvList;
          //Invoicelst.addall(InvList);
          
          
          for(Integer k = 0; k < InvList.size(); k++)
          {
             for(Invoice_Item__c objinvitems : mapInvIdToInvitems.get(k))
             {
                objinvitems.Invoice__c = InvList[k].Id;
                InvItemsList.add(objinvitems);
             }
          }
          
          insert InvItemsList;
          
          
         response.Invoicelst=InvList;
         response.InvoiceLineslst=InvItemsList;
         response.status='Success';
         response.Message='Total No of Invoice inserted :'+InvList.size()+ '===' +'Total No of Invoice items inserted :'+InvItemsList.size();
      }
       
      catch(exception ex)
      {
         response.Invoicelst=null;
         response.InvoiceLineslst=null;
         response.status='ERROR';
         response.Message='could not create record'+ ex.getMessage();
      }
      
      return response;
   }
   
}
json apex parser
 
public class JsonParserInv{
    public Invoicesdata Invoicesdata{get;set;}
	public class Invoicesdata{
		public list<invoices> invoices{get;set;}
	}
	public class invoices{
		public String invoiceDate{get;set;}
		public String customerPo{get;set;}
		public list<invoiceLines> invoiceLines{get;set;}
		public String accountCode{get;set;}
	}
	public class invoiceLines{
		public String familly{get;set;}
		public String famillyName{get;set;}
	}
}

sample json:
'{"Invoicesdata":{"invoices": [{"accountCode" : "ELECTRONIC","customerPo" : "AV1600117","invoiceDate" : "05/01/2016","invoiceLines" : [{"DAS" : "","familly" : "","famillyName" : ""}]}]}}';

test class:
 
@isTest
public class TestBulkinsert_InvoiceInvoiceitems { 
 static testmethod void Testinvitems(){
     List<invoice__c> lstinv=new List<invoice__c>();
          integer j;
     for(j=0;j<=10;j++){     
           Invoice__c inv =new Invoice__c();
           inv.Account_Code__c='test'+j;
           inv.Invoice_Number__c='testpo'+j;
           date mydate = date.parse('23/2/2020');
           inv.Date_of_Invoice__c= mydate;
           //insert inv;
           //system.debug(InvList);
           lstinv.add(inv);
     }
     List<Invoice_Item__c> lstinvitems=new List<Invoice_Item__c>();
     
     integer i;
     for(i=0;i<=10;i++){
           Invoice_Item__c ils = new Invoice_Item__c();
            ils.Invoice__c=lstinv[i].id;
            ils.Product_Family_code__c='68';
            ils.Product_Family__c='879'; 
            lstinvitems.add(ils);
     }    
     Bulkinsert_InvoiceInvoiceitems.myWrapper reqw= new Bulkinsert_InvoiceInvoiceitems.myWrapper();
     reqw.InvoiceLineslst=lstinvitems;
     reqw.Invoicelst=lstinv;
     reqw.message=null;
     reqw.status=null;
    Test.startTest();

         //As Per Best Practice it is important to instantiate the Rest Context
    RestRequest req = new RestRequest();
    RestResponse res = new RestResponse();
    req.requestURI = '/services/apexrest/InsertInvoiceandInvoiceitems'; //Request URL
    req.httpMethod = 'POST';
    req.requestBody = Blob.valueof(JsonMsg);
    RestContext.request = req;
    RestContext.response= res;
    Test.setMock(HttpCalloutMock.class, new Mock()); 
    Bulkinsert_InvoiceInvoiceitems.myWrapper res2 =new Bulkinsert_InvoiceInvoiceitems.myWrapper(); 
   JsonParserInv rw = (JsonParserInv)JSON.deserialize(JsonMsg,JsonParserInv.class);
     JsonParserInv.Invoicesdata invdata=new JsonParserInv.Invoicesdata();
     JsonParserInv.invoices invs=new JsonParserInv.invoices();
     JsonParserInv.invoiceLines inves=new JsonParserInv.invoiceLines();
        Bulkinsert_InvoiceInvoiceitems.doPost();
    Test.stopTest();

   // System.assertEquals('expected value', actual, 'Value is incorrect');
        
   }
}

Mock class:
 
@isTest
global class Mock implements HttpCalloutMock {
    // Implement this interface method
    global HTTPResponse respond(HTTPRequest req) {
        // Optionally, only send a mock response for a specific endpoint
        // and method.
       // System.assertEquals('http://example.com/example/test', req.getEndpoint());
      //  System.assertEquals('POST', req.getMethod());
        
        // Create a fake response
        HttpResponse res = new HttpResponse();
        res.setHeader('Content-Type', 'application/json');
        res.setBody('{"Invoicesdata":{"invoices": [{"accountCode" : "DICOELECTRONIC","customerPo" : "AV1600117","invoiceDate" : "05/01/2016","invoiceLines" : [{"familly" : "tes","famillyName" : "testfamily"}]}]}}');
        res.setStatusCode(200);
        return res;
    }
}

i cant able to cross code coverage from this line in main class "Bulkinsert_InvoiceInvoiceitems"
JsonParserInv rw = (JsonParserInv)JSON.deserialize(requestString,JsonParserInv.class);

can someone can help me regarding this