You need to sign in to do that
Don't have an account?
Jan Aertgeerts
Need help writing test class for global class with own types
Hi
I'm currently stuck writing a test class for the following code:
My current test class is like this, but it has 0/0:
Can someone help me on the way?
Thanks in advance.
Kind regards
I'm currently stuck writing a test class for the following code:
global class CreateRecurringInvoice { @InvocableMethod(label='Create Recurring Invoice') global static List<CreateRecurringInvoiceResult> createInvoices(List<CreateRecurringInvoiceRequest> requests) { List<CreateRecurringInvoiceResult> results = new List<CreateRecurringInvoiceResult>(); for (CreateRecurringInvoiceRequest request : requests) { results.add(createInvoices(request)); } return results; } public static CreateRecurringInvoiceResult createInvoices(CreateRecurringInvoiceRequest request) { Factuur__c nieuweFactuur = new Factuur__c(); Factuur__c oudeFactuur; Factuurlijn__c factuurlijn; List<String> factuurlijnFields = new List<String> (Factuurlijn__c.SObjectType.getDescribe().fields.getMap().keySet()); List<String> factuurFields = new List<String> (Factuur__c.SObjectType.getDescribe().fields.getMap().keySet()); String soqlParent = '' + 'select ' + String.join(factuurFields, ',') + ', (SELECT ' + String.join(factuurlijnFields, ',') + ' FROM Factuurlijnen__r) from Factuur__c' + ' where id = \'' + request.oldInvoiceId + '\''; for (Factuur__c obj: Database.query(soqlParent)) { oudeFactuur = obj; } nieuweFactuur.Name = oudeFactuur.Name; nieuweFactuur.Klant__c = oudeFactuur.Klant__c; nieuweFactuur.Datum__c = date.today(); nieuweFactuur.Herhalingstermijn__c = oudeFactuur.Herhalingstermijn__c; nieuweFactuur.Recurrente_factuur__c = oudeFactuur.Recurrente_factuur__c; nieuweFactuur.Info__c = oudeFactuur.Info__c; nieuweFactuur.Referentie__c = oudeFactuur.Referentie__c; nieuweFactuur.Project__c = oudeFactuur.Project__c; nieuweFactuur.Betalingstermijn__c = oudeFactuur.Betalingstermijn__c; insert nieuweFactuur; String soqlChild = '' + 'select ' + String.join(factuurlijnFields, ',') + ' from Factuurlijn__c' + ' where Factuur__c = \'' + request.oldInvoiceId + '\''; for (Factuurlijn__c obj: Database.query(soqlChild)) { Factuurlijn__c nieuweFactuurlijn = new Factuurlijn__c(); nieuweFactuurlijn.Name = obj.Name; nieuweFactuurlijn.Factuur__c = nieuweFactuur.Id; nieuweFactuurlijn.Aantal__c = obj.Aantal__c; nieuweFactuurlijn.Bedrag__c = obj.Bedrag__c; nieuweFactuurlijn.BTW__c = obj.BTW__c; nieuweFactuurlijn.Info__c = obj.Info__c; insert nieuweFactuurlijn; } CreateRecurringInvoiceResult result = new CreateRecurringInvoiceResult(); return result; } global class CreateRecurringInvoiceRequest { @InvocableVariable(required=true) public ID oldInvoiceId; } global class CreateRecurringInvoiceResult { @InvocableVariable public ID newInvoiceId; } }
My current test class is like this, but it has 0/0:
@isTest Private class CreateRecurringInvoiceTest { Static testMethod void myUnitTest() { Test.StartTest(); CreateRecurringInvoice cri = new CreateRecurringInvoice(); CreateRecurringInvoice.CreateRecurringInvoiceRequest request = new CreateRecurringInvoice.CreateRecurringInvoiceRequest(); CreateRecurringInvoice.CreateRecurringInvoiceResult result = new CreateRecurringInvoice.CreateRecurringInvoiceResult(); Account acc = new Account(Name = 'Test'); insert acc; Factuur__c oldfact = new Factuur__c(Name = 'Test', Klant__c = acc.Id, Datum__c = date.today()); insert oldfact; request.oldInvoiceId = oldfact.Id; Factuur__c newfact = new Factuur__c(Name = 'Test', Klant__c = acc.Id, Datum__c = date.today()); insert newfact; result.newInvoiceId = newfact.Id; List<CreateRecurringInvoice.CreateRecurringInvoiceResult> results = new List<CreateRecurringInvoice.CreateRecurringInvoiceResult>(); List<CreateRecurringInvoice.CreateRecurringInvoiceRequest> requests = new List<CreateRecurringInvoice.CreateRecurringInvoiceRequest>(); Test.StopTest(); } }
Can someone help me on the way?
Thanks in advance.
Kind regards
Thanks for your reply.
Since it's a static method, I changed your line to:
CreateRecurringInvoice.createInvoices(request);
which did the trick of covering 63%.
Thanks
All Answers
After line 15, just add below code,
cri.createInvoices(request);
Kindly try and share, if it works for you.
Regards
Mohit Bansal
Thanks for your reply.
Since it's a static method, I changed your line to:
CreateRecurringInvoice.createInvoices(request);
which did the trick of covering 63%.
Thanks