You need to sign in to do that
Don't have an account?
d.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
sample json:
test class:
Mock class:
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
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