You need to sign in to do that
Don't have an account?

Help me! Apex Class test code
global without sharing class ResultFulfillingAggregateScheduler implements Schedulable{ /** * *** AcceptanceExpectedDate is divided into 1st half and 2nd half (1st half: April to September, 2nd half: October to next March) * *** Split timing is based on execution date */ public void execute( SchedulableContext sc ){ // Get record type String conditonRecordTypeA = 'OrderEstimated'; String conditonRecordTypeB = 'OrderRegistration'; Map<String,Schema.RecordTypeInfo> recordTypeMap = new Map<String,Schema.RecordTypeInfo>(); for( Schema.RecordTypeInfo info : Result__c.SObjectType.getDescribe().getRecordTypeInfos() ){ if( info.getDeveloperName() == conditonRecordTypeA || info.getDeveloperName() == conditonRecordTypeB ){ recordTypeMap.put( info.getDeveloperName() , info ); } } /** */ // Set String value List<String> conditionOrderProbabilityRank = new List<String>{ 'A' , 'B' , 'C' }; // Set conditions for first half and second half Date day = Date.today(); Date startDate = Date.newInstance( day.year() - ( day.month() < 4 ? 1 : 0 ) , ( day.month() >= 4 || day.month() <= 9 ) ? 4 : 10 , 1 ); Date endDate = startDate.addMonths( 6 ).addDays( - 1 ); // execute SOQL List<Result__c> resultList = [ SELECT OrderProbabilityRank__c , RecordTypeId , DXSolutionDeptFlg__c , PlatformSolutionDeptFlg__c , DSPSSolutionDeptFlg__c , ManagedServiceDeptFlg__c , EastJapanSolutionDeptFlg__c , ChubuSolutionDeptFlg__c , WestJapanSolutionDeptFlg__c , LimitProfit__c , LimitIncomePartTarget__c FROM Result__c WHERE ( DXSolutionDeptFlg__c = TRUE OR PlatformSolutionDeptFlg__c = TRUE OR DSPSSolutionDeptFlg__c = TRUE OR ManagedServiceDeptFlg__c = TRUE OR EastJapanSolutionDeptFlg__c = TRUE OR ChubuSolutionDeptFlg__c = TRUE OR WestJapanSolutionDeptFlg__c = TRUE ) AND ( FulfillingAggregateFlg__c = FALSE ) AND ( AcceptanceExpectedDate__c >= :startDate AND AcceptanceExpectedDate__c <= :endDate ) AND ( ( RecordType.DeveloperName = :conditonRecordTypeA AND OrderProbabilityRank__c IN :conditionOrderProbabilityRank ) OR RecordType.DeveloperName = :conditonRecordTypeB ) ]; // Save records to aggregate Map<String,Result__c> resultMap = new Map<String,Result__c>(); resultMap.put( '01' , new Result__c( RecordTypeId = recordTypeMap.get( conditonRecordTypeA ).getRecordTypeId() , OrderProbabilityRank__c = 'A' , FulfillingAggregateFlg__c = true , SE3__c = 'AAA' , LimitIncomeAchievementSum__c = 0 , LimitIncomeTargetSum__c = 0 ) ); resultMap.put( '02' , new Result__c( RecordTypeId = recordTypeMap.get( conditonRecordTypeA ).getRecordTypeId() , OrderProbabilityRank__c = 'B' , FulfillingAggregateFlg__c = true , SE3__c = 'AAA' , LimitIncomeAchievementSum__c = 0 , LimitIncomeTargetSum__c = 0 ) ); resultMap.put( '03' , new Result__c( RecordTypeId = recordTypeMap.get( conditonRecordTypeA ).getRecordTypeId() , OrderProbabilityRank__c = 'C' , FulfillingAggregateFlg__c = true , SE3__c = 'AAA' , LimitIncomeAchievementSum__c = 0 , LimitIncomeTargetSum__c = 0 ) ); resultMap.put( '22' , new Result__c( RecordTypeId = recordTypeMap.get( conditonRecordTypeB ).getRecordTypeId() , FulfillingAggregateFlg__c = true , SE3__c = 'AAA', LimitIncomeAchievementSum__c = 0 , LimitIncomeTargetSum__c = 0 ) ); // do the aggregation for( Result__c result : resultList ){ if( result.RecordTypeId == recordTypeMap.get( conditonRecordTypeA ).getRecordTypeId() && result.OrderProbabilityRank__c == 'A' && result.DXSolutionDeptFlg__c ){ resultMap.get( '01' ).LimitIncomeAchievementSum__c += result.LimitProfit__c; resultMap.get( '01' ).LimitIncomeTargetSum__c += result.LimitIncomePartTarget__c; resultMap.get( '01' ).FulfillingAggregateDate__c = day; } if( result.RecordTypeId == recordTypeMap.get( conditonRecordTypeA ).getRecordTypeId() && result.OrderProbabilityRank__c == 'B' && result.DXSolutionDeptFlg__c ){ resultMap.get( '02' ).LimitIncomeAchievementSum__c += result.LimitProfit__c; resultMap.get( '02' ).LimitIncomeTargetSum__c += result.LimitIncomePartTarget__c; resultMap.get( '02' ).FulfillingAggregateDate__c = day; } if( result.RecordTypeId == recordTypeMap.get( conditonRecordTypeA ).getRecordTypeId() && result.OrderProbabilityRank__c == 'C' && result.DXSolutionDeptFlg__c ){ resultMap.get( '03' ).LimitIncomeAchievementSum__c += result.LimitProfit__c; resultMap.get( '03' ).LimitIncomeTargetSum__c += result.LimitIncomePartTarget__c; resultMap.get( '03' ).FulfillingAggregateDate__c = day; } if( result.RecordTypeId == recordTypeMap.get( conditonRecordTypeB ).getRecordTypeId() && result.DXSolutionDeptFlg__c ){ resultMap.get( '22' ).LimitIncomeAchievementSum__c += result.LimitProfit__c; resultMap.get( '22' ).LimitIncomeTargetSum__c += result.LimitIncomePartTarget__c; resultMap.get( '22' ).FulfillingAggregateDate__c = day; } } // insert record insert resultMap.values(); } }
Please tell me how to write the test class.
The below articles give a good insight into how to get started with writing test classes
https://salesforce.stackexchange.com/questions/244788/how-do-i-write-an-apex-unit-test
https://salesforce.stackexchange.com/questions/244794/how-do-i-increase-my-code-coverage-or-why-cant-i-cover-these-lines
Examples of test classes for schedulable interface:
https://salesforce.stackexchange.com/questions/17428/test-class-for-schedulable-interface
https://salesforce.stackexchange.com/questions/95827/test-class-for-scheduler-class
https://salesforce.stackexchange.com/questions/161702/inserting-test-record-with-record-type
Hope this helps! Thanks