You need to sign in to do that
Don't have an account?
SFUser
Hai.. i am trying to coverage below Schedulable class code..everything covered fine except that switch statement of code..let me know how to cover the switch for below code. Thanks in Advance.
======================
Main Class
======================
global class ScheduleInvoice implements Schedulable {
public static String CRON_EXP = '0 0 0 1 * ? *';
global static String scheduleIt() {
ScheduleInvoice sm = new ScheduleInvoice();
return System.schedule('Monthly Reconciliation', CRON_EXP, sm);
}
global void execute(SchedulableContext sc) {Id AccountEIDrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('EID').getRecordTypeId();
Id AccountPVCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('PVC').getRecordTypeId();
Id AccountPMCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('PMC').getRecordTypeId();
Id AccountVMCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('VMC').getRecordTypeId();
Id InvoiceVRCrecordTypeId = Schema.getGlobalDescribe().get('Invoice__c').getDescribe().getRecordTypeInfosByName().get('VRC').getRecordTypeId();
set<ID> recordIds = new Set<ID>();
recordIds.add(AccountEIDrecordTypeId);
recordIds.add(AccountPVCrecordTypeId);
recordIds.add(AccountPMCrecordTypeId);
recordIds.add(AccountVMCrecordTypeId);
List<Invoice__c> invoiceList = new List<Invoice__c>();
List<Invoice__c> invList = new List<Invoice__c>();
Integer m = Date.Today().Month();
Date firstDayOfMonth = System.today().toStartOfMonth();
Date lastDayOfMonth = firstDayOfMonth.addDays(Date.daysInMonth(firstDayOfMonth.year(), firstDayOfMonth.month()) - 1);
Date invDesDate = system.Today().addMonths(1);
Integer invMonth = invDesDate.Month();
Integer invYear = invDesDate.year();
String MonthName;
for (Account acct: [
select Id, Active__c RecordTypeId
from Account
where RecordTypeId IN: recordIds and Active__c = true
]) {
Invoice__c inv = new Invoice__c();
inv.Account__c = acct.Id;
inv.Status__c = 'Accepted';
inv.Date__c = system.Today();
switch on m {
when 1 {
invoiceDate__c = 'Jan 1 to Jan 31';
}
when 2 {
invoiceDate__c = 'Feb 1 to Feb 28';
}
when 3 {
invoiceDate__c = 'Mar 1 to Mar 31';
}
when 4 {
invoiceDate__c = 'Apr 1 to Apr 30';
}
when 5 {
invoiceDate__c = 'May 1 to May 31';
}
when 6 {
invoiceDate__c = 'Jun 1 to Jun 30';
}
when 7 {
invoiceDate__c = 'Jul 1 to Jul 31';
}
when 8 {
invoiceDate__c = 'Aug 1 to Aug 31';
}
when 9 {
invoiceDate__c = 'Sep 1 to Sep 30';
}
when 10 {
invoiceDate__c = 'Oct 1 to Oct 31';
}
when 11 {
invoiceDate__c = 'Nov 1 to Nov 30';
}
when 12 {
invoiceDate__c = 'Dec 1 to Dec 31';
}
}
inv.Payment_Due_Date__c = lastDayOfMonth;
switch on invMonth {
when 1 {
MonthName = 'January';
}
when 2 {
MonthName = 'February';
}
when 3 {
MonthName = 'March';
}
when 4 {
MonthName = 'April';
}
when 5 {
MonthName = 'May';
}
when 6 {
MonthName = 'June';
}
when 7 {
MonthName = 'July';
}
when 8 {
MonthName = 'August';
}
when 9 {
MonthName = 'September';
}
when 10 {
MonthName = 'October';
}
when 11 {
MonthName = 'November';
}
when 12 {
MonthName = 'December';
}
}
inv.RecordTypeId = InvoiceVRCrecordTypeId;
inv.Description__c = MonthName + ' ' + String.valueof(invYear) + ' ' + 'TMC';
invList.add(inv);
}
if (!invList.isEmpty()) {
insert invList;
}
}
}
===========================
Test Class
===========================
@isTest
public class CreatingInvoice_Test {
@isTest static void executeTest(){
Test.startTest();
Id AccountPVCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('PVC').getRecordTypeId();
Id AccountPMCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('PMC').getRecordTypeId();
Id AccountVMCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('VMC').getRecordTypeId();
Id InvoiceVRCrecordTypeId = Schema.getGlobalDescribe().get('Invoice__c').getDescribe().getRecordTypeInfosByName().get('VRC').getRecordTypeId();
SchedulableContext sc = null;
ScheduleInvoice CI = new ScheduleInvoice();
CI.execute(sc);
account a = new account();
a.Name = 'Test Account';
a.Active__c = true;
a.RecordTypeId = AccountVMCrecordTypeId;
insert a;
ScheduleInvoice CI1 = new ScheduleInvoice();
String sch1 = '0 0 0 1 * ? *';
system.schedule('ScheduleInvoice', sch1, CI1);
Test.stopTest();
}
}
Main Class
======================
global class ScheduleInvoice implements Schedulable {
public static String CRON_EXP = '0 0 0 1 * ? *';
global static String scheduleIt() {
ScheduleInvoice sm = new ScheduleInvoice();
return System.schedule('Monthly Reconciliation', CRON_EXP, sm);
}
global void execute(SchedulableContext sc) {Id AccountEIDrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('EID').getRecordTypeId();
Id AccountPVCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('PVC').getRecordTypeId();
Id AccountPMCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('PMC').getRecordTypeId();
Id AccountVMCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('VMC').getRecordTypeId();
Id InvoiceVRCrecordTypeId = Schema.getGlobalDescribe().get('Invoice__c').getDescribe().getRecordTypeInfosByName().get('VRC').getRecordTypeId();
set<ID> recordIds = new Set<ID>();
recordIds.add(AccountEIDrecordTypeId);
recordIds.add(AccountPVCrecordTypeId);
recordIds.add(AccountPMCrecordTypeId);
recordIds.add(AccountVMCrecordTypeId);
List<Invoice__c> invoiceList = new List<Invoice__c>();
List<Invoice__c> invList = new List<Invoice__c>();
Integer m = Date.Today().Month();
Date firstDayOfMonth = System.today().toStartOfMonth();
Date lastDayOfMonth = firstDayOfMonth.addDays(Date.daysInMonth(firstDayOfMonth.year(), firstDayOfMonth.month()) - 1);
Date invDesDate = system.Today().addMonths(1);
Integer invMonth = invDesDate.Month();
Integer invYear = invDesDate.year();
String MonthName;
for (Account acct: [
select Id, Active__c RecordTypeId
from Account
where RecordTypeId IN: recordIds and Active__c = true
]) {
Invoice__c inv = new Invoice__c();
inv.Account__c = acct.Id;
inv.Status__c = 'Accepted';
inv.Date__c = system.Today();
switch on m {
when 1 {
invoiceDate__c = 'Jan 1 to Jan 31';
}
when 2 {
invoiceDate__c = 'Feb 1 to Feb 28';
}
when 3 {
invoiceDate__c = 'Mar 1 to Mar 31';
}
when 4 {
invoiceDate__c = 'Apr 1 to Apr 30';
}
when 5 {
invoiceDate__c = 'May 1 to May 31';
}
when 6 {
invoiceDate__c = 'Jun 1 to Jun 30';
}
when 7 {
invoiceDate__c = 'Jul 1 to Jul 31';
}
when 8 {
invoiceDate__c = 'Aug 1 to Aug 31';
}
when 9 {
invoiceDate__c = 'Sep 1 to Sep 30';
}
when 10 {
invoiceDate__c = 'Oct 1 to Oct 31';
}
when 11 {
invoiceDate__c = 'Nov 1 to Nov 30';
}
when 12 {
invoiceDate__c = 'Dec 1 to Dec 31';
}
}
inv.Payment_Due_Date__c = lastDayOfMonth;
switch on invMonth {
when 1 {
MonthName = 'January';
}
when 2 {
MonthName = 'February';
}
when 3 {
MonthName = 'March';
}
when 4 {
MonthName = 'April';
}
when 5 {
MonthName = 'May';
}
when 6 {
MonthName = 'June';
}
when 7 {
MonthName = 'July';
}
when 8 {
MonthName = 'August';
}
when 9 {
MonthName = 'September';
}
when 10 {
MonthName = 'October';
}
when 11 {
MonthName = 'November';
}
when 12 {
MonthName = 'December';
}
}
inv.RecordTypeId = InvoiceVRCrecordTypeId;
inv.Description__c = MonthName + ' ' + String.valueof(invYear) + ' ' + 'TMC';
invList.add(inv);
}
if (!invList.isEmpty()) {
insert invList;
}
}
}
===========================
Test Class
===========================
@isTest
public class CreatingInvoice_Test {
@isTest static void executeTest(){
Test.startTest();
Id AccountPVCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('PVC').getRecordTypeId();
Id AccountPMCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('PMC').getRecordTypeId();
Id AccountVMCrecordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('VMC').getRecordTypeId();
Id InvoiceVRCrecordTypeId = Schema.getGlobalDescribe().get('Invoice__c').getDescribe().getRecordTypeInfosByName().get('VRC').getRecordTypeId();
SchedulableContext sc = null;
ScheduleInvoice CI = new ScheduleInvoice();
CI.execute(sc);
account a = new account();
a.Name = 'Test Account';
a.Active__c = true;
a.RecordTypeId = AccountVMCrecordTypeId;
insert a;
ScheduleInvoice CI1 = new ScheduleInvoice();
String sch1 = '0 0 0 1 * ? *';
system.schedule('ScheduleInvoice', sch1, CI1);
Test.stopTest();
}
}
First declare a public variable
then
change this line
to
So that you can use the variable value passed from test classthen in test class
Add one line
Final Code will look something like below
===================================
TestClass
Try with this one , let me know how it goes!