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
nilesh walke 6nilesh walke 6 

please help need code coverage

global with sharing class ReviewStepValidationHelper { 

    public ReviewStepValidationHelper(){}
    
    global static List<String> validateReviewSteps(List<Id> stepIds, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
        return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
                             (SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r) 
                             FROM ReviewStep__c WHERE Id IN: stepIds AND Template__c = false ORDER BY StepNumber__c], 
                             validateSteps,
                             validateWeights,
                             validateReviewers
                            );
    }    
    global static List<String> validateProgramTemplates(Id programId, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
        return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
                             (SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r) 
                             FROM ReviewStep__c WHERE Program__c =: programId AND Template__c = true ORDER BY StepNumber__c],
                             validateSteps,
                             validateWeights,
                             validateReviewers
                            );
    }
    
    global static List<String> validateAnnouncementTemplates(Id announcementId, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
        return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
                             (SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r) 
                             FROM ReviewStep__c WHERE Announcement__c =: announcementId AND Template__c = true ORDER BY StepNumber__c],
                             validateSteps,
                             validateWeights,
                             validateReviewers
                            );
    }
    
    global static List<String> validateAnnouncementSteps(Id announcementId, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
        return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
                             (SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r) 
                             FROM ReviewStep__c WHERE Announcement__c =: announcementId AND Template__c = false ORDER BY StepNumber__c],
                             validateSteps,
                             validateWeights,
                             validateReviewers
                            );
    }
    
    global static List<String> validateSteps(List<ReviewStep__c> steps, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
        List<String> errors = new List<String>();
        try{
            List<Id> stepIds = new List<Id>();
            Set<Id> weightedPanels = new Set<Id>();
            Map<Id, String> panelNameMap = new Map<Id, String>();
            Integer stepNumber = 0;
            Boolean hasStepError = false;
            Boolean weightError = false;
            String stepName = '';
            Decimal weight;
            Decimal stepWeight = 0;
            for(ReviewStep__c step: steps) {
                if(validateSteps) {
                    if(step.StepNumber__c != stepNumber + 1) {
                        hasStepError = true;
                    } else {
                        stepNumber += 1;
                    }
                }
                stepName = step.Name;
                stepWeight += step.Weight__c;
                stepIds.add(step.Id);
                weight = 0;
                if(step.Review_Panels__r.size() > 0) {
                    for(ReviewPanel__c rp: step.Review_Panels__r) {
                        if(rp.Weight__c > 0) {
                            weightedPanels.add(rp.Id);
                            weight += rp.Weight__c;
                        }
                        if(validateReviewers) {
                            /*
                            if(rp.ReviewersCount__c < 1 && rp.Required__c){    // MinimumNumberOfReviewers__c
                                errors.add(step.Name + ' - ' + rp.PanelName__c + ': This panel is required and must have a minimum of 1 reviewer.');
                            }*/
                            //if(rp.ReviewersCount__c < rp.MinimumNumberOfReviewers__c){
                            //    errors.add('Setup Tab - ' + step.Name + ' - ' + rp.PanelName__c + ': This form only has ' + rp.ReviewersCount__c + ' of the required ' + rp.MinimumNumberOfReviewers__c + ' reviewers.');
                            //}
                            if(rp.EndDate__c == null && rp.DueInDays__c == null){
                                errors.add('Setup Tab - ' + step.Name + ' - ' + rp.PanelName__c + ': A value for the Due in Days field is required.');
                            } else if(rp.EndDate__c != null && rp.EndDate__c < System.TODAY()) {
                                errors.add('Setup Tab - ' + step.Name + ' - ' + rp.PanelName__c + ': The form due date(' + rp.EndDate__c + ') cannot be before the current date.');
                            }
                        }
                        panelNameMap.put(rp.Id, step.Name + ' - ' + rp.PanelName__c);
                    }
                } else if(validateSteps && step.Name != 'Funding Decision Memo'){
                    errors.add('Setup Tab - ' + step.Name + ': At least one form is required for this review step.');
                }
                if(weight != 0 && weight != 100 && validateWeights) {
                    if(step.Weight__c != 0) {
                        errors.add('Setup Tab - ' + step.Name + ': The total Review Form weight must equal 100% for a weighted step. It is currently ' + weight + '%.');
                    } else {
                        errors.add('Setup Tab - ' + step.Name + ': The total Review Form weight must equal 100% or 0%. It is currently ' + weight + '%.');
                    }
                } else if(step.Weight__c != 0 && weight != 100 && validateWeights) {
                    errors.add('Setup Tab - ' + step.Name + ': The total Review Form weight must equal 100% for a weighted step. It is currently ' + weight + '%.');
                }
            }
            System.debug('errors 1: '+errors);
            if(validateSteps) {
                if(validateWeights && stepWeight != 100) {
                    errors.add('Setup Tab - The total Review Step weight must equal 100%. It is currently ' + stepWeight + '%.');
                }
                if(hasStepError) {
                    errors.add('Setup Tab - Sequence of Review step must start from 1 and have no gaps.');
                }
                if(stepName != 'Funding Decision Memo') {
                    errors.add('Setup Tab - The Funding Decision Memo must always be the final step in the review process');
                }
            }
            System.debug('errors 2: '+errors);
            if(validateWeights) {
                List<ReviewPanelCategory__c> categories = [SELECT Id, Name, Weight__c, ReviewPanel__c, ReviewPanel__r.PanelName__c, ReviewPanel__r.ReviewStep__r.Name, (SELECT MaxScore__c FROM ReviewCategoryQuestions__r) FROM ReviewPanelCategory__c WHERE ReviewPanel__r.ReviewStep__c IN: stepIds];
                Map<Id, Decimal> weightMap = new Map<Id, Decimal>();
                Decimal maxScore;
                Boolean invalidScore;
                Set<Id> panelsWithCategories = new Set<Id>();
                for(ReviewPanelCategory__c category: categories) {
                    panelsWithCategories.add(category.ReviewPanel__c);
                    invalidScore = false;
                    if(!weightMap.containsKey(category.ReviewPanel__c)) {
                        weightMap.put(category.ReviewPanel__c, 0);
                    }
                    weightMap.put(category.ReviewPanel__c, weightMap.get(category.ReviewPanel__c) + category.Weight__c);
                    maxScore = 0;
                    for(ReviewPanelCategoryQuestion__c question: category.ReviewCategoryQuestions__r) {
                        maxScore += question.MaxScore__c;
                        if(question.MaxScore__c != 0 && category.Weight__c == 0) {
                            invalidScore = true;
                        }
                    }
                    if(invalidScore) {
                        errors.add('Setup Tab - ' + category.ReviewPanel__r.ReviewStep__r.Name + ' - ' + category.ReviewPanel__r.PanelName__c + ': A score cannot be associated to a question in the ' + category.Name + ' section because it does not have a weight.');
                    }
                    if(maxScore == 0 && category.Weight__c != 0) {
                        errors.add('Setup Tab - ' + category.ReviewPanel__r.ReviewStep__r.Name + ' - ' + category.ReviewPanel__r.PanelName__c + ': A score must be associated to at least one question in the ' + category.Name + ' section because it is weighted.');
                    }
                }
                System.debug('errors 3: '+errors);
                for(Id key: panelNameMap.keySet()) {
                    if(!panelsWithCategories.contains(key)) {
                        errors.add('Setup Tab - ' + panelNameMap.get(key) + ': At least one section must be added to this form.');
                    }
                }
                if(weightMap.size() > 0) {
                    for(Id key: weightMap.keySet()) {
                        if(weightMap.get(key) != 100 && weightMap.get(key) != 0) {
                            errors.add('Setup Tab - ' + panelNameMap.get(key) + ': The total section weight must equal 100% or 0%. It is currently ' + weightMap.get(key) + '%.');
                        }
                        if(weightedPanels.contains(key) && weightMap.get(key) == 0) {
                            errors.add('Setup Tab - ' + panelNameMap.get(key) + ': A weighted form must contain weighted sections.');
                        }
                    }
                } else {
                    for(Id panelId: weightedPanels) {
                        errors.add('Setup Tab - ' + panelNameMap.get(panelId) + ': A weighted form must contain weighted sections.');
                    }
                }
                System.debug('errors 4: '+errors);
            }
            System.debug('errors 5: '+errors);
            return errors;
        } catch(Exception e) {
            errors.add(e.getMessage());
            return errors;
        }
    }
CharuDuttCharuDutt
Hii Nilesh Walke
Try Below test Class
@isTest
public class ReviewStepValidationHelperCommentTest {
@isTest
    public Static Void validateReviewStepsUnittest(){
        
        ReviewStep__c rs = new ReviewStep__c();
        rs.Name = 'Test'
        rs.StepNumber__c = '';//Fill This
        rs.Weight__c = '';//Fill This
        rs.Template__c = false;
        /*Fill All Required Fields*/
        insert rs;
        
        Review_Panels__r rp = new Review_Panels__r();
        rp.Name = 'Test Review Panels';
        rp.ReviewStep__c = rs.Id;//If Review Panels Have Master/Lookup RelationShip With ReviewStep
        /*Fill All Required Fields*/
        insert rp;
        ReviewStepValidationHelper.validateReviewSteps(new list<Id>{re.Id},true,true,true);
       
    }
    
    @isTest
    public Static Void validateProgramTemplatesUnittest(){
        Program__c p = new Program__c();
        p.Name 'Test Program';
        Insert P;
        ReviewStep__c rs = new ReviewStep__c();
        rs.Name = 'Test'
        rs.StepNumber__c = '';//Fill This
        rs.Weight__c = '';//Fill This
        rs.Template__c = true;
        rs.Program__c = p.Id
        /*Fill All Required Fields*/
        insert rs;
        
        Review_Panels__r rp = new Review_Panels__r();
        rp.Name = 'Test Review Panels';
        rp.ReviewStep__c = rs.Id;//If Review Panels Have Master/Lookup RelationShip With ReviewStep
        /*Fill All Required Fields*/
        insert rp;
        ReviewStepValidationHelper.validateProgramTemplates(p.Id,true,true,true);
       
    }
     @isTest
    public Static Void validateAnnouncementTemplatesUnittest(){
        Announcement__c a = new Announcement__c();
        a.Name 'Test Announcement';
        Insert P;
        ReviewStep__c rs = new ReviewStep__c();
        rs.Name = 'Test'
        rs.StepNumber__c = '';//Fill This
        rs.Weight__c = '';//Fill This
        rs.Template__c = true;
        rs.Announcement__c = a.Id
        /*Fill All Required Fields*/
        insert rs;
        
        Review_Panels__r rp = new Review_Panels__r();
        rp.Name = 'Test Review Panels';
        rp.ReviewStep__c = rs.Id;//If Review Panels Have Master/Lookup RelationShip With ReviewStep
        /*Fill All Required Fields*/
        insert rp;
        ReviewStepValidationHelper.validateAnnouncementTemplates(a.Id,true,true,true);
       
    }
    @isTest
    public Static Void validateAnnouncementStepsUnittest(){
        Announcement__c a = new Announcement__c();
        a.Name 'Test Announcement';
        Insert P;
        ReviewStep__c rs = new ReviewStep__c();
        rs.Name = 'Test'
        rs.StepNumber__c = '';//Fill This
        rs.Weight__c = '';//Fill This
        rs.Template__c = false;
        rs.Announcement__c = a.Id
        /*Fill All Required Fields*/
        insert rs;
        
        Review_Panels__r rp = new Review_Panels__r();
        rp.Name = 'Test Review Panels';
        rp.ReviewStep__c = rs.Id;//If Review Panels Have Master/Lookup RelationShip With ReviewStep
        /*Fill All Required Fields*/
        insert rp;
        ReviewStepValidationHelper.validateAnnouncementTemplates(a.Id,true,true,true);
       
    }
    
     @isTest
    public static void validateStepsUnittest(){
        Announcement__c a = new Announcement__c();
        a.Name 'Test Announcement';
        Insert P;
        ReviewStep__c rs = new ReviewStep__c();
        rs.Name = 'Test'
        rs.StepNumber__c = '';//Fill This
        rs.Weight__c = '';//Fill This
        rs.Template__c = false;
        rs.Announcement__c = a.Id
        /*Fill All Required Fields*/
        insert rs;
        
        Review_Panels__r rp = new Review_Panels__r();
        rp.Name = 'Test Review Panels';
        rp.ReviewStep__c = rs.Id;//If Review Panels Have Master/Lookup RelationShip With ReviewStep
        /*Fill All Required Fields*/
        insert rp;
        
        ReviewPanelCategory__c rpc = new ReviewPanelCategory__c();
        /*Fill All Required Fields*/
        insert rpc;
        ReviewStepValidationHelper.validateSteps(new List<ReviewStep__c>{rs.Id},true,true,true);
       
    }
}
Please Mark It As Best Answer If It Helps
Thank You!