Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
100 kB
2
Indexable
Never
/*
* Unit tests for CapitalCallController Apex class.
*
* @author: Luke
* @date: Oct 2012
*/  
@IsTest
public with sharing class TestCapitalCallController { 
    public static Boolean coverBatchStatus = false;
    //Below is a method with @testsetup annotation, the name can be anything like setup(), oneTimeData(), etc.
    @testSetup static void setup() {
        TriggerUtil.skipAccountTriggers = true;

        final ImportWizardSettings__c importWizSettings =  ImportWizardSettings__c.getOrgDefaults();    
        importWizSettings.Record_Insertion_Batch_Size__c = 100;
        upsert importWizSettings;
        
        Account parentAccount = TestObjectFactory.getParentAccount('Test Parent LP', true);
        Account investmentVehicle = TestObjectFactory.getAccount('Test Entity LP', parentAccount, true);
        Account parentAccount1 = TestObjectFactory.getParentAccount('Test Parent LP 1', true);
        Account investmentVehicle1 = TestObjectFactory.getAccount('Test Entity LP 1', parentAccount1, true);
        Account parentAccount2 = TestObjectFactory.getParentAccount('Test Parent LP 2', true);
        Account investmentVehicle2 = TestObjectFactory.getAccount('Test Entity LP 2', parentAccount2, true);
        Account parentAccount3 = TestObjectFactory.getParentAccount('Test Parent LP 3', true);
        Account investmentVehicle3 = TestObjectFactory.getAccount('Test Entity LP 3', parentAccount3, true);
        
        Fund__c fund = TestObjectFactory.getFund(true);
        
        Fund_Allocation_Parent__c fundAllocationParent1 = TestObjectFactory.getTestFundAllocationParent(fund,'LP/GP Split','Half Up',true);
        Fund_Allocation_Parent__c fundAllocationParent2 = TestObjectFactory.getTestFundAllocationParent(fund,'LP/GP Adjustable Split','Half Down',true);
        Fund_Allocation_Parent__c fundAllocationParent3 = TestObjectFactory.getTestFundAllocationParent(fund,'Custom','Half Down',true);
        Fund_Allocation_Parent__c fundAllocationParent4 = TestObjectFactory.getTestFundAllocationParent(fund,'Fund Pro Rata','Half Up',true);
 
        List<Allocation_Settings__c> allocList = new List<Allocation_Settings__c>();
        Allocation_Settings__c alloc1 = new Allocation_Settings__c();
        alloc1.Allocation_Parent_Id__c = fundAllocationParent1.Id;
        alloc1.Fund_Id__c = fund.Id;
        alloc1.Field_Label_Name__c = 'Capital Call Amount';
        alloc1.Name = 'Test _Capital Call Amount';
        allocList.add(alloc1);
        
        Allocation_Settings__c alloc2 = new Allocation_Settings__c();
        alloc2.Allocation_Parent_Id__c = fundAllocationParent1.Id;
        alloc2.Fund_Id__c = fund.Id;
        alloc2.Field_Label_Name__c = 'Management Fees';
        alloc2.Name = 'Test _Management Fees';
        allocList.add(alloc2);
        
        Allocation_Settings__c alloc3 = new Allocation_Settings__c();
        alloc3.Allocation_Parent_Id__c = fundAllocationParent1.Id;
        alloc3.Fund_Id__c = fund.Id;
        alloc3.Field_Label_Name__c = 'Investments';
        alloc3.Name = 'Test _Investments';
        allocList.add(alloc3);
        
        Allocation_Settings__c alloc4 = new Allocation_Settings__c();
        alloc4.Allocation_Parent_Id__c = fundAllocationParent1.Id;
        alloc4.Fund_Id__c = fund.Id;
        alloc4.Field_Label_Name__c = 'Other';
        alloc4.Name = 'Test _Other';
        allocList.add(alloc4);
        
        Allocation_Settings__c alloc5 = new Allocation_Settings__c();
        alloc5.Allocation_Parent_Id__c = fundAllocationParent1.Id;
        alloc5.Fund_Id__c = fund.Id;
        alloc5.Field_Label_Name__c = 'Expenses';
        alloc5.Name = 'Test _Expenses';
        allocList.add(alloc5);
        
        Allocation_Settings__c alloc6 = new Allocation_Settings__c();
        alloc6.Allocation_Parent_Id__c = fundAllocationParent1.Id;
        alloc6.Fund_Id__c = fund.Id;
        alloc6.Field_Label_Name__c = 'Late Admission Interest';
        alloc6.Name = 'Test _Late Admission Interest';
        allocList.add(alloc6);
        
        insert allocList;        
       
        Map<String,Allocation_Settings__c> allocSetting = new Map<String,Allocation_Settings__c>();
        allocSetting = Allocation_Settings__c.getAll();
        
        TriggerUtil.skipAccountTriggers = false;
    }
    @IsTest
    static void testSuccessCapitalCalls() {
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 0.0
        );
        insert capitalCommit2;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(400.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.callToRetrieveCommitments();
        system.debug('in 87 '+controller.currentStep);
        controller.next(); // get passed the selection stage
        system.debug('in 89 '+controller.currentStep);
        controller.previous();
        system.debug('in 90 '+controller.currentStep);
        controller.next();
        system.debug('in 92 '+controller.currentStep);
        controller.next();
        system.debug('in 94 '+controller.currentStep);
        controller.previous();
        system.debug('in 96 '+controller.currentStep);
        controller.next();
        system.debug('in 98 '+controller.currentStep);
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 500.0;
        controller.next(); // go to review step
        system.debug('in 102 '+controller.currentStep); 
        System.assertEquals(CapitalCallController.Step.REVIEW, controller.currentStep);
        controller.previous(); // return to previous step
        System.assertNotEquals(CapitalCallController.Step.REVIEW, controller.currentStep);
        controller.next(); // go back to review step
        System.assertEquals(CapitalCallController.Step.REVIEW, controller.currentStep);
        System.assertNotEquals(null, controller.templateUrl);
        Test.startTest();
        controller.isNullOrZeroCapCommitmentCheckbox = false;
        controller.confirmAndSave();
        Test.stopTest();
        List<Capital_Call_Parent__c> parent = [SELECT Id, Fund__c FROM Capital_Call_Parent__c];
        System.assertEquals(fund.Id, parent[0].Fund__c, 'Capital Call Parent should look up to Fund');
        System.assertEquals(1, parent.size(), 'Expected Capital Call Parent to be generated');
        List<Capital_Call__c> capitalCall1 = [SELECT Capital_Call_Amount__c, Capital_Call_Parent__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit1.Id];
        System.assertEquals(1, capitalCall1.size(), 'Expected Capital Call to be generated for Capital Commitment 1');
        System.assertEquals(parent[0].Id, capitalCall1[0].Capital_Call_Parent__c, 'Capital Call should look up to parent');
        System.assertEquals(500.0, capitalCall1[0].Capital_Call_Amount__c);
        List<Capital_Call__c> capitalCall2 = [SELECT Capital_Call_Amount__c, Capital_Call_Parent__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit2.Id];
        System.assertEquals(1, capitalCall2.size(), 'Expected Capital Call to be generated for Capital Commitment 2');
        System.assertEquals(parent[0].Id, capitalCall2[0].Capital_Call_Parent__c, 'Capital Call should look up to parent');
        System.assertEquals(0.0, capitalCall2[0].Capital_Call_Amount__c);
        //System.assertNotEquals(null, controller.templateUrl);
        controller.returnToFund(); // returns page reference back to Fund
    }
    /*
* Perform negative test where validation should fail
*/
    @IsTest
    static void testCreationOfCapitalCallsWithoutDateAsInput() {
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(400.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.callToRetrieveCommitments();
        controller.next(); // get passed the selection stage
        // Deliberately don't set date
        // Deliberately don't set call amount
        controller.next(); // go to review step
        System.assertEquals(CapitalCallController.Step.REVIEW, controller.currentStep);
        //System.assertEquals(null, controller.newCapitalCalls, 'Shouldn\'t create any capital calls if validation fails');
    }
    /**
* Scenario: No commitments are selected for prorata. 
* Expected Outcome: The step remains on 'COMMITMENT_SELECTION' as no commitments were selected
*/
    @IsTest
    static void testAtleastOneCommitmentSelected() {
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(400.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.callToRetrieveCommitments();
        System.assertEquals(CapitalCallController.Step.COMMITMENT_SELECTION, controller.currentStep, 'The should be kicked off in commitment selection');
        for (Integer pageNumber : controller.mapOfCapitalCommitments.keyset()) {
            for(CapitalCallController.CommitmentWrapper commitment: controller.mapOfCapitalCommitments.get(pageNumber)){
                commitment.checked = false;
            }
        }
        controller.next();
        System.assertEquals(CapitalCallController.Step.COMMITMENT_SELECTION, controller.currentStep, 'The controller should have remained on commitment selection, since we deselected all of the commitments');
    } 
    @IsTest
    static void csvTest() {
        Test.startTest();
        Fund__c fund=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        // Set up Capital Commitment 1:
        final Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entity1.Id,
            Fund_Name__c = fund.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        final Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entity2.Id,
            Fund_Name__c = fund.Id,
            Capital_Commitment__c = 600.0
        );
        insert capitalCommit2;
        fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund.Id];
        final ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        final CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.callToRetrieveCommitments();
        controller.next(); // get passed the selection stage
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 500.0;
        controller.next(); // go to review step
        controller.fileBody = Blob.valueOf(
            'Investment Vehicle,Capital Call Amount\n'+
            'Test Entity LP,100.00\n'+
            'Test Entity LP 1,200.00'
        );
        controller.processCSV();
        controller.confirmAndSave();
        Test.stopTest();
        final List<Capital_Call__c> capitalCall1 = [SELECT Capital_Call_Amount__c, Capital_Call_Parent__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit1.Id];
        System.assertEquals(100.0, capitalCall1[0].Capital_Call_Amount__c);
        final List<Capital_Call__c> capitalCall2 = [SELECT Capital_Call_Amount__c, Capital_Call_Parent__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit2.Id];
        System.assertEquals(200.0, capitalCall2[0].Capital_Call_Amount__c);
    }
    /*
*This is to cover the AllocationRecordsAsyncInsert Class for > 180 records
*/
    @IsTest
    static void testPaginationForCapitalCommitments(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 0.0  
        ); 
        insert capitalCommit2;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(400.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.capitalCommitmentPageSize = 1;
        controller.init();  
        controller.callToRetrieveCommitments();
        system.assertEquals(true,controller.getprev());
        system.assertEquals(false, controller.getnxt());
        system.assertEquals(1,controller.capitalCommitmentCurrentPageNumber);
        controller.nextCapitalCommitmentList();
        system.assertEquals(false,controller.getprev());
        system.assertEquals(true, controller.getnxt());
        system.assertEquals(2,controller.capitalCommitmentCurrentPageNumber);
        controller.previousCapitalCommitmenttList();
        system.assertEquals(1,controller.capitalCommitmentCurrentPageNumber);
    }
    @IsTest
    static void testProcessCSVWithoutBody(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit2;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(800.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.capitalCommitmentPageSize = 1;
        controller.init();
        controller.callToRetrieveCommitments();
        controller.next();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 100.0;
        controller.next();
        Test.startTest();
        controller.processCSV();
        Test.stopTest();
        system.assertEquals(null, controller.fileBody);
    }
    @IsTest
    static void testProcessCSVWithEmptyBody(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit2;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(800.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.capitalCommitmentPageSize = 1;
        controller.init();
        controller.callToRetrieveCommitments();
        controller.next();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 100.0;
        controller.next();
        Test.startTest();
        controller.fileBody = Blob.valueOf('');
        controller.processCSV();
        Test.stopTest();
        if(ApexPages.getMessages().size()!=0){
            for(ApexPages.Message msg:ApexPages.getMessages()){
                System.assertEquals('The CSV file seems to be empty.', msg.getSummary());
                System.assertEquals(ApexPages.Severity.ERROR, msg.getSeverity());
            }
        }
    }
    @IsTest
    static void testProcessIncorrectCsv(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit2;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(800.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.capitalCommitmentPageSize = 1;
        controller.init();
        controller.callToRetrieveCommitments();
        controller.next();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 100.0;
        controller.next();
        Test.startTest();
        controller.fileBody = Blob.valueOf(
            'Investment Vehicle,Capital Call Amount,Investments,Late Admission Interest,Expenses Outside of Commitment,Management Fees,Expenses,Other\n'+
            'Test Entity LP,50.00,9,8,4,2,5,1\n'+
            'Test Entity LP,50.00,test9,8,4,2,5,1'
        );
        controller.processCSV();
        Test.stopTest();
        system.debug(controller.mapOfCapitalCalls);
        system.debug(apexpages.getMessages());
        if(ApexPages.getMessages().size()!=0){
            for(ApexPages.Message msg:ApexPages.getMessages()){
                System.assertEquals('Unable to process value test9. Remove all commas from numbers prior to processing CSV file.', msg.getSummary());
                System.assertEquals(ApexPages.Severity.ERROR, msg.getSeverity());
            }
        }
    } 
    @IsTest
    static void testPaginationForZeroCapitalCommitments(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 0.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 0.0
        );
        insert capitalCommit2;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(0.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.capitalCommitmentPageSize = 1;
        controller.init();
        controller.callToRetrieveCommitments();
        system.assertEquals(true,controller.getprev());
        system.assertEquals(false, controller.getnxt());
        system.assertEquals(1,controller.capitalCommitmentCurrentPageNumber);
        controller.nextCapitalCommitmentList();
        system.assertEquals(false,controller.getprev());
        system.assertEquals(true, controller.getnxt());
        system.assertEquals(2,controller.capitalCommitmentCurrentPageNumber);
        controller.previousCapitalCommitmenttList();
        system.assertEquals(1,controller.capitalCommitmentCurrentPageNumber);
        controller.next();
        System.assertEquals(CapitalCallController.Step.COMMITMENT_CHECK, controller.currentStep);
        system.assertEquals(0, controller.zerocapitalCommitmentCurrentPageNumber);
        system.assertEquals(true, controller.getzeroprev());
        system.assertEquals(false, controller.getzeronxt());
        controller.nextzeroCapitalCommitmentList();
        system.assertEquals(true, controller.getzeronxt());
        system.assertEquals(false, controller.getzeroprev());
        system.assertEquals(1, controller.zerocapitalCommitmentCurrentPageNumber);
        controller.previousZeroCapitalCommitmenttList();
    }
    
    @IsTest
    static void testPaginationForCapitalCalls(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        // Set up Capital Commitment 1:
        Test.startTest();
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entity1.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entity2.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit2;
        // Set up Capital Commitment 3:
        Capital_Commitment__c capitalCommit3 = new Capital_Commitment__c(
            LP_Entity__c = entity3.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit3; 
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(300.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments();
        system.assertEquals(2,controller.mapOfCapitalCommitments.size());
        system.assertEquals(1,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(true,controller.getprev());
        system.assertEquals(false,controller.getnxt());
        controller.nextCapitalCommitmentList();
        system.assertEquals(2,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(false,controller.getprev());
        system.assertEquals(true,controller.getnxt());
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 100.0;
        controller.tempCall.Investments__c = 50.00;
        controller.tempCall.Management_Fees__c = 60.00;
        controller.tempCall.Expenses__c = 70.00;
        controller.tempCall.Other__c = 80.00;
        controller.next();
        system.assertEquals(2,controller.mapOfCapitalCalls.size());
        system.assertEquals(1,controller.capitalCallCurrentPageNumber);
        controller.confirmAndSave();
        Test.stopTest();
        List<Capital_Call_Parent__c> parent = [Select Id, Fund__c From Capital_Call_Parent__c];
        System.assertEquals(1, parent.size());
        System.assertEquals(fund1.Id, parent[0].Fund__c);
        List<Capital_Call__c> capitalCall1 = [SELECT Capital_Call_Parent__c,Capital_Call_Amount__c,Investments__c,Management_Fees__c,Expenses__c,Other__c,Capital_Commitment__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit1.Id];
        System.assertEquals(1, capitalCall1.size());
        System.assertEquals(parent[0].Id, capitalCall1[0].Capital_Call_Parent__c);
        System.assertEquals(33.33, capitalCall1[0].Capital_Call_Amount__c);
        if (SObjectType.Capital_Call__c.FieldSets.getMap().containsKey('Import_Wizard_Fields')) {
            FieldSet fieldSet = SObjectType.Capital_Call__c.FieldSets.Import_Wizard_Fields;
                List<String> fieldNames = new List<String>();
                for (FieldSetMember field : fieldSet.getFields()) {
                    fieldNames.add(field.getFieldPath());
                }
            system.debug('###fieldNames'+fieldNames);
                if (fieldNames.contains('Investments__c')) {
                    System.assertEquals(16.67, capitalCall1[0].Investments__c);
                }
                if (fieldNames.contains('Management_Fees__c')) {
                    System.assertEquals(20.00, capitalCall1[0].Management_Fees__c);
                }
                if (fieldNames.contains('Expenses__c')) {
                    System.assertEquals(23.33, capitalCall1[0].Expenses__c);
                }
                if (fieldNames.contains('Other__c')) {
                    System.assertEquals(26.67, capitalCall1[0].Other__c);
                }
        }

        List<Capital_Call__c> capitalCall2 = [SELECT Capital_Call_Parent__c,Capital_Call_Amount__c,Investments__c,Management_Fees__c,Expenses__c,Other__c,Capital_Commitment__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit2.Id];
        System.assertEquals(1, capitalCall2.size());
        System.assertEquals(parent[0].Id, capitalCall2[0].Capital_Call_Parent__c);
        System.assertEquals(33.33,capitalCall2[0].Capital_Call_Amount__c);
         if (SObjectType.Capital_Call__c.FieldSets.getMap().containsKey('Import_Wizard_Fields')) {
            FieldSet fieldSet = SObjectType.Capital_Call__c.FieldSets.Import_Wizard_Fields;
                List<String> fieldNames = new List<String>();
                for (FieldSetMember field : fieldSet.getFields()) {
                    fieldNames.add(field.getFieldPath());
                }
            system.debug('###fieldNames'+fieldNames);
                if (fieldNames.contains('Investments__c')) {
                    System.assertEquals(16.67, capitalCall1[0].Investments__c);
                }
                if (fieldNames.contains('Management_Fees__c')) {
                    System.assertEquals(20.00, capitalCall1[0].Management_Fees__c);
                }
                if (fieldNames.contains('Expenses__c')) {
                    System.assertEquals(23.33, capitalCall1[0].Expenses__c);
                }
                if (fieldNames.contains('Other__c')) {
                    System.assertEquals(26.67, capitalCall1[0].Other__c);
                }
        }
        List<Capital_Call__c> capitalCall3 = [SELECT Capital_Call_Parent__c,Capital_Call_Amount__c,Investments__c,Management_Fees__c,Expenses__c,Other__c,Capital_Commitment__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit3.Id];
        System.assertEquals(1, capitalCall3.size());
        System.assertEquals(parent[0].Id, capitalCall3[0].Capital_Call_Parent__c);
        System.assertEquals(33.33,capitalCall3[0].Capital_Call_Amount__c);
         if (SObjectType.Capital_Call__c.FieldSets.getMap().containsKey('Import_Wizard_Fields')) {
            FieldSet fieldSet = SObjectType.Capital_Call__c.FieldSets.Import_Wizard_Fields;
                List<String> fieldNames = new List<String>();
                for (FieldSetMember field : fieldSet.getFields()) {
                    fieldNames.add(field.getFieldPath());
                }
            system.debug('###fieldNames'+fieldNames);
                if (fieldNames.contains('Investments__c')) {
                    System.assertEquals(16.67, capitalCall1[0].Investments__c);
                }
                if (fieldNames.contains('Management_Fees__c')) {
                    System.assertEquals(20.00, capitalCall1[0].Management_Fees__c);
                }
                if (fieldNames.contains('Expenses__c')) {
                    System.assertEquals(23.33, capitalCall1[0].Expenses__c);
                }
                if (fieldNames.contains('Other__c')) {
                    System.assertEquals(26.67, capitalCall1[0].Other__c);
                }
        }
        system.assertEquals(2,controller.sizeOfCapitalCommitmentsMap);
    } 
    @isTest
    static void testBatchExecutionOfCapitalCalls(){
        final ImportWizardSettings__c importWizSettings = ImportWizardSettings__c.getOrgDefaults();
        importWizSettings.Record_Insertion_Batch_Size__c = 100;
        importWizSettings.Long_Running_Batch_Time_Threshold__c = 0;//Setting this value to zero to make sure long running process gets executed for this transaction.
        upsert importWizSettings;
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];   
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity Lp 2'];
        Account entity4 = [Select Id,Name from Account where Name='Test Entity Lp 3'];
        Account parentLP1 = [Select Id,Name from Account where Name='Test Parent LP'];
        Test.startTest();
        Account parentAccount5 = TestObjectFactory.getParentAccount('Test Parent 5', true);
        Account investmentVehicle5 = TestObjectFactory.getAccount('Test Entity 5', parentAccount5, true);
        Account parentAccount6 = TestObjectFactory.getParentAccount('Test Parent 6', true);
        Account investmentVehicle6 = TestObjectFactory.getAccount('Test Entity 6', parentAccount6, true);
        Account entity5 = [Select Id,Name from Account where Name='Test Entity 5'];
        Account entity6 = [Select Id,Name from Account where Name='Test Entity 6'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entity1.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entity2.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit2;
        // Set up Capital Commitment 3:
        Capital_Commitment__c capitalCommit3 = new Capital_Commitment__c(
            LP_Entity__c = entity3.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit3; 
        Capital_Commitment__c capitalCommit4 = new Capital_Commitment__c(
            LP_Entity__c = entity4.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit4; 
        Capital_Commitment__c capitalCommit5 = new Capital_Commitment__c(
            LP_Entity__c = entity5.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit5; 
        Capital_Commitment__c capitalCommit6 = new Capital_Commitment__c(
            LP_Entity__c = entity6.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit6; 
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(600.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.capitalCallsSuccessPageSize = 2;
        controller.capitalCallfailurePageSize = 2;
        controller.callToRetrieveCommitments();
        system.assertEquals(3,controller.mapOfCapitalCommitments.size());
        system.assertEquals(1,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(true,controller.getprev());
        system.assertEquals(false,controller.getnxt());
        controller.nextCapitalCommitmentList();
        system.assertEquals(2,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(false,controller.getprev());
        system.assertEquals(false,controller.getnxt());
        controller.nextCapitalCommitmentList();
        system.assertEquals(3,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(false,controller.getprev());
        system.assertEquals(true,controller.getnxt());
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 300.0;
        controller.next();
        system.assertEquals(3,controller.mapOfCapitalCalls.size());
        system.assertEquals(1,controller.capitalCallCurrentPageNumber);
        coverBatchStatus = True;
        upsert controller.parent;
        for (Integer pageNum : Controller.mapOfCapitalCalls.keySet()) {
            for (CapitalCallController.CapitalCallWrapper wrapped : Controller.mapOfCapitalCalls.get(pageNum)) {
                if(wrapped.record.Capital_Commitment__c == capitalCommit2.Id || wrapped.record.Capital_Commitment__c == capitalCommit4.Id || wrapped.record.Capital_Commitment__c == capitalCommit6.Id){
                    wrapped.record.LP_Entity__c = parentLP1.Id;
                }
                wrapped.record.Capital_Call_Parent__c = Controller.parent.Id;
                Controller.capitalCallRecords.add(wrapped.record);
            }
        }  
        controller.confirmAndSave();
        Boolean batchOnHold = false;
        Boolean batchOnPreparing = false;
        Boolean batchOnQueued = false;
        Boolean batchOnProcessesing = false;
        Boolean batchOnCompleted = false;
        Boolean batchLongRunning = false;
        controller.BatchJobStatus = 'Holding';   
        controller.executionStatusOfBatch();
        controller.BatchJobStatus = 'Preparing';   
        controller.executionStatusOfBatch();
        controller.BatchJobStatus = 'Queued';   
        controller.executionStatusOfBatch();
        controller.BatchJobStatus = 'Processing'; 
        controller.executionStatusOfBatch();
        Test.stopTest();
        controller.BatchJobStatus = 'Completed';
        controller.executionStatusOfBatch(); 
        
        List<Apexpages.Message> msgs = ApexPages.getMessages();
        for(Apexpages.Message msg:msgs){
            if (msg.getDetail().contains('Batch has been started execution please wait...')){
                batchOnHold = true;
            }
            if (msg.getDetail().contains('Successfully initiated process to create Capital calls. \n Please followup with \'Capital calls Update Status\' & \'Capital calls Last Updated Date\' fields to know the status.')){
                batchOnPreparing = true;
            }
            if (msg.getDetail().contains('Batch has been queued please wait for the batch to start execution...')){
                batchOnQueued = true;
            }
            if (msg.getDetail().contains('Batch has started proccessing the records please wait while we show you the capital calls that are successfully created')){
                batchOnProcessesing = true;
            }
            if (msg.getDetail().contains('Batch has finished creating capital calls successfully')){
                batchOnCompleted = true;
            }
            if (msg.getDetail().contains('The server is experiencing unusually high traffic.This job is in queue and will be completed.')){
                batchLongRunning = true;
            }
        }
        system.assertEquals(true, batchLongRunning);
        system.assertEquals(true, batchOnHold);
        system.assertEquals(true, batchOnPreparing);
        system.assertEquals(true, batchOnQueued);
        system.assertEquals(true, batchOnProcessesing);
        system.assertEquals(true, batchOnCompleted);
        List<Capital_Call_Parent__c> parent = [Select Id,Capital_Call_Update_Status__c,Fund__c From Capital_Call_Parent__c];
        system.assertEquals(2,controller.mapOfCapitalCallSuccess.size());
        system.assertEquals(true,controller.getcapitalcallsuccessprev());
        system.assertEquals(false,controller.getcapitalcallssuccessnxt());
        system.assertEquals(1,controller.capitalSuccessCurrentPageNumber);
        controller.nextCapitalCallSuccessList();
        system.assertEquals(false,controller.getcapitalcallsuccessprev());
        system.assertEquals(true,controller.getcapitalcallssuccessnxt());
        system.assertEquals(2,controller.capitalSuccessCurrentPageNumber);
        controller.previousCapitalCallSuccessList();
        system.assertEquals(2,controller.mapOfFailureCapitalCommitments.size());
        system.assertEquals(true,controller.getcapitalcallsfailureprev());
        system.assertEquals(false,controller.getcapitalcallsfailurenxt());
        system.assertEquals(1,controller.failureCapitalCommitCurrentPageNumber);
        controller.nexttCapitalCallFailureList();
        system.assertEquals(false,controller.getcapitalcallsfailureprev());
        system.assertEquals(true,controller.getcapitalcallsfailurenxt());
        system.assertEquals(2,controller.failureCapitalCommitCurrentPageNumber);
        controller.previoustCapitalCallFailureList();
        System.assertEquals(1, parent.size());
        System.assertEquals(fund1.Id, parent[0].Fund__c);
        List<Capital_Call__c> capitalCall1 = [SELECT Capital_Call_Parent__c,Capital_Call_Amount__c,Investments__c,Management_Fees__c,Expenses__c,Other__c,Capital_Commitment__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit1.Id];
        System.assertEquals(1, capitalCall1.size());
        System.assertEquals(parent[0].Id, capitalCall1[0].Capital_Call_Parent__c);
        List<Capital_Call__c> capitalCall2 = [SELECT Capital_Call_Parent__c,Capital_Call_Amount__c,Investments__c,Management_Fees__c,Expenses__c,Other__c,Capital_Commitment__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit2.Id];
        System.assertEquals(0, capitalCall2.size());
        List<Capital_Call__c> capitalCall3 = [SELECT Capital_Call_Parent__c,Capital_Call_Amount__c,Investments__c,Management_Fees__c,Expenses__c,Other__c,Capital_Commitment__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit3.Id];
        System.assertEquals(1, capitalCall3.size());
        System.assertEquals(parent[0].Id, capitalCall3[0].Capital_Call_Parent__c);
        List<Capital_Call__c> capitalCall4 = [SELECT Capital_Call_Parent__c,Capital_Call_Amount__c,Investments__c,Management_Fees__c,Expenses__c,Other__c,Capital_Commitment__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit4.Id];
        System.assertEquals(0, capitalCall4.size());
        List<Capital_Call__c> capitalCall5 = [SELECT Capital_Call_Parent__c,Capital_Call_Amount__c,Investments__c,Management_Fees__c,Expenses__c,Other__c,Capital_Commitment__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit5.Id];
        System.assertEquals(1, capitalCall5.size());
        System.assertEquals(parent[0].Id, capitalCall5[0].Capital_Call_Parent__c);
        List<Capital_Call__c> capitalCall6 = [SELECT Capital_Call_Parent__c,Capital_Call_Amount__c,Investments__c,Management_Fees__c,Expenses__c,Other__c,Capital_Commitment__c FROM Capital_Call__c WHERE Capital_Commitment__c = :capitalCommit6.Id];
        System.assertEquals(0, capitalCall6.size());
        controller.returnToFund(); // returns page reference back to Fund
        system.assertEquals(3,controller.sizeOfCapitalCommitmentsMap);
        system.assertEquals(2,controller.sizeOfCapitalCallsSuccesssMap);
        system.assertEquals(2,controller.sizeOfFailureCapitalCommitMap);
        system.assertEquals('Completed',parent[0].Capital_Call_Update_Status__c);
        system.assertEquals(3,controller.TotalNumberOfCapitalCallsProccessed);
        system.assertEquals(3,controller.TotalNumberOfCapitalCallsFailed);
    }
    /*
* Test for batch of distribution with Aborted as status
*/
    @IsTest
    static void testBatchWithAbortedStatusForCapitalCalls(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        // Set up Capital Commitment 1:
        Test.startTest();
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entity1.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entity2.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit2;
        // Set up Capital Commitment 3:
        Capital_Commitment__c capitalCommit3 = new Capital_Commitment__c(
            LP_Entity__c = entity3.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit3; 
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(300.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments();
        system.assertEquals(2,controller.mapOfCapitalCommitments.size());
        system.assertEquals(1,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(true,controller.getprev());
        system.assertEquals(false,controller.getnxt());
        controller.nextCapitalCommitmentList();
        system.assertEquals(2,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(false,controller.getprev());
        system.assertEquals(true,controller.getnxt());
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 300.0;
        controller.next();
        system.assertEquals(2,controller.mapOfCapitalCalls.size());
        system.assertEquals(1,controller.capitalCallCurrentPageNumber);
        controller.confirmAndSave();
        AsyncApexJob batchJob = [SELECT Id, Status, JobItemsProcessed, TotalJobItems, NumberOfErrors ,CreatedDate,ExtendedStatus
                                 FROM AsyncApexJob WHERE ID =: controller.BatchId ];
        system.abortJob(controller.BatchId); 
        Test.stopTest();
        controller.executionStatusOfBatch();
        List<Capital_Call_Parent__c> parent = [Select Id,Capital_Call_Update_Status__c,Fund__c From Capital_Call_Parent__c];
        System.assertEquals(1, parent.size());
        System.assertEquals(fund1.Id, parent[0].Fund__c);
        List<Distribution__c> listOfdistributions = [SELECT Distribution_Amount__c, Gain_Loss__c, Distribution_Parent__c FROM Distribution__c WHERE Distribution_Parent__c = :parent[0].Id];
        System.assertEquals(0, listOfdistributions.size());
        controller.returnToFund(); // returns page reference back to Fund
        system.assertEquals(2,controller.sizeOfCapitalCommitmentsMap);
        system.assertEquals('Aborted',parent[0].Capital_Call_Update_Status__c);
    }
    @isTest
    static void testShowPopup() {
       
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 0.0
        );
        insert capitalCommit2;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(400.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        test.startTest();
        String fullName = 'Capital_Call__c.Import_Wizard_Fields';
        Boolean success = true;
        String field1 = 'Management_Fees__c';
        String field2 = 'Expenses_Outside_of_Commitment__c';
        MetadataServiceHelperMock mockImpl = new MetadataServiceHelperMock(fullName, success, field1,field2);
        System.Test.setMock(WebServiceMock.class, mockImpl);
        test.stopTest();
        controller.showPopup();
        System.assertEquals(true, controller.displayPopup);
        System.assertNotEquals(null, controller.leftOptions);
        System.assertNotEquals(null, controller.rightOptions);
    }
    
    @isTest
    static void testClosePopup() {
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 0.0
        );
        insert capitalCommit2;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(400.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        test.startTest();
         String fullName = 'Capital_Call__c.Import_Wizard_Fields';
        Boolean success = true;
         String field1 = 'Management_Fees__c';
        String field2 = 'Expenses_Outside_of_Commitment__c';
        MetadataServiceHelperMock mockImpl = new MetadataServiceHelperMock(fullName, success,field1,field2);
        System.Test.setMock(WebServiceMock.class, mockImpl);
        test.stopTest();
        controller.closePopup();
        System.assertEquals(false, controller.displayPopUp);
    } 
    @isTest
    static void TestupdateFieldsOfFieldset() {
        
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 0.0
        );
        insert capitalCommit2;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(400.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        test.startTest();
        String fullName = 'Capital_Call__c.Import_Wizard_Fields';
        Boolean success = true;
         String field1 = 'Management_Fees__c';
        String field2 = 'Expenses_Outside_of_Commitment__c';
       MetadataServiceHelperMock mockImpl = new MetadataServiceHelperMock(fullName, success, field1,field2);
        System.Test.setMock(WebServiceMock.class, mockImpl);
        test.stopTest();
        controller.showPopup();
        controller.updateFieldsOfFieldset();
        
        System.assertEquals(true, controller.updateFieldset);
        System.assertEquals(1, controller.updateFieldsetcounter);
    }
    @isTest
    static void testupdateFieldsOfFieldset_Failure() {
        
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entityLP = [Select Id,Name from Account where Name='Test Entity LP'];
        // Set up Capital Commitment 1:
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 400.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entityLP.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 0.0
        );
        insert capitalCommit2;
        Fund__c fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(400.0, fund.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        CapitalCallController controller = new CapitalCallController(sc);
        test.startTest();
         String fullName = 'Capital_Call__c.Import_Wizard_Fields';
        Boolean success = false;
         String field1 = 'Management_Fees__c';
        String field2 = 'Expenses_Outside_of_Commitment__c';
       MetadataServiceHelperMock mockImpl = new MetadataServiceHelperMock(fullName, success,field1,field2);
        System.Test.setMock(WebServiceMock.class, mockImpl);
        test.stopTest();
        controller.showPopup();
        controller.updateFieldsOfFieldset();
        System.assertEquals(false, controller.updateFieldset);
    }

    //Test to check error message gets displayed on Capital Call
    @isTest
    static void testBatchForErrorMsgOnCapitalCalls(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        fund1.Capital_Calls_Update_Status__c = 'In Progress';
        update fund1;   
        Test.startTest();
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.callToRetrieveCommitments();
        List<ApexPages.Message> msgList = ApexPages.getMessages();
        for(ApexPages.Message msg : ApexPages.getMessages()){
            System.assertEquals(true, msg.getDetail().contains('A batch is already in progress! You cannot create new Capital Calls while the batch is in progress.'));
            System.assertEquals(ApexPages.Severity.ERROR, msg.getSeverity());
        }
    }
    @isTest 
    Static void testvalidateFieldValues_TRUE(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        // Set up Capital Commitment 1:
        Test.startTest();
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entity1.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entity2.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit2;
        // Set up Capital Commitment 3:
        Capital_Commitment__c capitalCommit3 = new Capital_Commitment__c(
            LP_Entity__c = entity3.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit3; 
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(300.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments();
        system.assertEquals(2,controller.mapOfCapitalCommitments.size());
        system.assertEquals(1,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(true,controller.getprev());
        system.assertEquals(false,controller.getnxt());
        controller.nextCapitalCommitmentList();
        system.assertEquals(2,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(false,controller.getprev());
        system.assertEquals(true,controller.getnxt());
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 100.0;
        controller.tempCall.Investments__c = 50.00;
        controller.tempCall.Management_Fees__c = 60.00;
        controller.tempCall.Expenses__c = 70.00;
        controller.tempCall.Other__c = 80.00;
        controller.isNullOrZeroCapCommitmentCheckbox = true;
        controller.next();
        Integer sizeOfCapitalCallsSaved = 0;
        for (Integer pageNum : controller.mapOfCapitalCalls.keySet()) {
            for (CapitalCallController.CapitalCallWrapper capCallRecord : controller.mapOfCapitalCalls.get(pageNum)) {
                sizeOfCapitalCallsSaved = sizeOfCapitalCallsSaved+1;
        	}
        }
        system.assertEquals(2,controller.mapOfCapitalCalls.size());
        system.assertEquals(1,controller.capitalCallCurrentPageNumber);
        controller.confirmAndSave();
        Test.stopTest();
        system.assert(true,controller.isNullOrZeroCapCommitmentCheckbox);
        List<Capital_Call_Parent__c> parent = [Select Id, Fund__c,(Select Id From Capital_Calls__r) From Capital_Call_Parent__c WHERE Id =:controller.parent.Id];
        System.assertEquals(sizeOfCapitalCallsSaved, parent[0].Capital_Calls__r.size());
        System.assertEquals(1, parent.size());
        System.assertEquals(fund1.Id, parent[0].Fund__c);
    }
    @isTest 
    static void testvalidateFieldValues_withAllZerosTRUECase(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        // Set up Capital Commitment 1:
        Test.startTest();
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entity1.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entity2.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit2;
        // Set up Capital Commitment 3:
        Capital_Commitment__c capitalCommit3 = new Capital_Commitment__c(
            LP_Entity__c = entity3.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit3; 
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(300.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments();
        system.assertEquals(2,controller.mapOfCapitalCommitments.size());
        system.assertEquals(1,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(true,controller.getprev());
        system.assertEquals(false,controller.getnxt());
        controller.nextCapitalCommitmentList();
        system.assertEquals(2,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(false,controller.getprev());
        system.assertEquals(true,controller.getnxt());
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 0.00;
        controller.tempCall.Investments__c = 00.00;
        controller.tempCall.Management_Fees__c = 00.00;
        controller.tempCall.Expenses__c = 00.00;
        controller.tempCall.Other__c = 00.00;
        controller.isNullOrZeroCapCommitmentCheckbox = true;
        controller.next();
        Integer sizeOfCapitalCallsSaved = 0;
        for (Integer pageNum : controller.mapOfCapitalCalls.keySet()) {
            for (CapitalCallController.CapitalCallWrapper capCallRecord : controller.mapOfCapitalCalls.get(pageNum)) {
                sizeOfCapitalCallsSaved = sizeOfCapitalCallsSaved+1;
            }
        }
        controller.confirmAndSave();
        Test.stopTest();
        system.assert(true,controller.isNullOrZeroCapCommitmentCheckbox);
        List<Capital_Call_Parent__c> parent = [Select Id, Fund__c,(Select Id From Capital_Calls__r) From Capital_Call_Parent__c WHERE Id =:controller.parent.Id];
        System.assertNotEquals(sizeOfCapitalCallsSaved, parent[0].Capital_Calls__r.size());
        System.assertEquals(1, parent.size());
        System.assertEquals(fund1.Id, parent[0].Fund__c);
    }
    @isTest
    Static void testvalidateFieldValues_withAllZerosFalseCase(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        // Set up Capital Commitment 1:
        Test.startTest();
        Capital_Commitment__c capitalCommit1 = new Capital_Commitment__c(
            LP_Entity__c = entity1.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit1;
        // Set up Capital Commitment 2:
        Capital_Commitment__c capitalCommit2 = new Capital_Commitment__c(
            LP_Entity__c = entity2.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit2;
        // Set up Capital Commitment 3:
        Capital_Commitment__c capitalCommit3 = new Capital_Commitment__c(
            LP_Entity__c = entity3.Id,
            Fund_Name__c = fund1.Id,
            Capital_Commitment__c = 100.0
        );
        insert capitalCommit3; 
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(300.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments();
        system.assertEquals(2,controller.mapOfCapitalCommitments.size());
        system.assertEquals(1,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(true,controller.getprev());
        system.assertEquals(false,controller.getnxt());
        controller.nextCapitalCommitmentList();
        system.assertEquals(2,controller.capitalCommitmentCurrentPageNumber);
        system.assertEquals(false,controller.getprev());
        system.assertEquals(true,controller.getnxt());
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 0.0;
        controller.tempCall.Investments__c = 0.00;
        controller.tempCall.Management_Fees__c = 0.00;
        controller.tempCall.Expenses__c = 0.00;
        controller.tempCall.Other__c = 0.00;
        controller.isNullOrZeroCapCommitmentCheckbox = false;
        controller.next();
        Integer sizeOfCapitalCallsSaved = 0;
        for (Integer pageNum : controller.mapOfCapitalCalls.keySet()) {
            for (CapitalCallController.CapitalCallWrapper capCallRecord : controller.mapOfCapitalCalls.get(pageNum)) {
                sizeOfCapitalCallsSaved = sizeOfCapitalCallsSaved+1;
            }
        }
        controller.confirmAndSave();
        Test.stopTest();
        system.assertEquals(false,controller.isNullOrZeroCapCommitmentCheckbox);
        List<Capital_Call_Parent__c> parent = [Select Id, Fund__c,(Select Id From Capital_Calls__r) From Capital_Call_Parent__c WHERE Id =:controller.parent.Id];
        System.assertEquals(sizeOfCapitalCallsSaved, parent[0].Capital_Calls__r.size());
        System.assertEquals(1, parent.size());
        System.assertEquals(fund1.Id, parent[0].Fund__c);
        
    }
    
    // Scenario 1 : Creating a fund allocation parent with allocType = 'LP/GP Split' with all the metrics allocated and rounding type as Half-Up
    @isTest 
    static void testAllocationLPGPSplit_HalfUp(){
        Fund__c fund1=[Select Id,Name from Fund__c where Name='Test Fund'];        
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        
        Test.startTest();
        Capital_Commitment__c capitalCommitment1 = TestObjectFactory.getCapitalCommitment(true, entity1.Id, fund1.Id);
        Capital_Commitment__c capitalCommitment2 = TestObjectFactory.getCapitalCommitment(true, entity2.Id, fund1.Id);
        Capital_Commitment__c capitalCommitment3 = TestObjectFactory.getCapitalCommitment(true, entity3.Id, fund1.Id);
        
        ImportWizardSettings__c impWizSetting = new ImportWizardSettings__c();
        impWizSetting.Enable_Allocation_Feature__c = true;
        impWizSetting.Record_Insertion_Batch_Size__c = 100;
        impWizSetting.Long_Running_Batch_Time_Threshold__c =35;
        insert impWizSetting;
        
        List<String> fundAllocFieldsList = new List<String>{'Capital Call Amount','Management Fees','Expenses','Other','Late Admission Interest','Investments'};   
        List<Fund_Allocation_Parent__c> fundAllocParentList = [SELECT Id, Name,Allocation_Type__c,Fund_to_Allocate__c, Metrics_to_Allocate__c,Rounding_Type__c FROM Fund_Allocation_Parent__c WHERE Allocation_Type__c = 'LP/GP Split' AND Rounding_Type__c = 'Half Up' LIMIT 1];
        Map<String,String> metricToFundAllocMap = new Map<String,String>{'Capital Call Amount' => fundAllocParentList[0].Id, 'Management Fees' => fundAllocParentList[0].Id,'Expenses' => fundAllocParentList[0].Id,'Other' => fundAllocParentList[0].Id,'Late Admission Interest'  => fundAllocParentList[0].Id,'Investments'  => fundAllocParentList[0].Id};
            
        Fund_Allocation__c fundAlloc = TestObjectFactory.getTestFundAllocation(true,fundAllocParentList[0],fund1);
        Fund_Allocation_Member__c fundAllocMember1 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment1);
        Fund_Allocation_Member__c fundAllocMember2 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment2);
        Fund_Allocation_Member__c fundAllocMember3 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment3);
       

        List<Allocation_Settings__c> allocSettingList = [Select Id,Name,Field_Label_Name__c,Allocation_Parent_Id__c from Allocation_Settings__c];
        List<Allocation_Settings__c> updatedAllocSetttingList = new List<Allocation_Settings__c>();
        for(Allocation_Settings__c alloc : allocSettingList){
            alloc.Allocation_Parent_Id__c = fundAllocParentList[0].Id;
            updatedAllocSetttingList.add(alloc);
        }
        update updatedAllocSetttingList;
        
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(300.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments(); 
        controller.nextCapitalCommitmentList();
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.assignmentCallToAllocationSettings();
        controller.defaultProRataFlag = false;
        controller.setDefaultCalculationToMap();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 115.00;
        controller.tempCall.Investments__c = 215.00;
        controller.tempCall.Management_Fees__c = 315.00;
        controller.tempCall.Expenses__c = 415.00;
        controller.tempCall.Other__c = 515.00;
        controller.tempCall.Late_Admission_Interest__c = 615.00;
        controller.isNullOrZeroCapCommitmentCheckbox = true;
        controller.next();
        controller.getCurrentStepName();
        Integer sizeOfCapitalCallsSaved = 0;
        System.debug('controller.mapOfCapitalCalls.keySet(): '+controller.mapOfCapitalCalls.keySet());
        for (Integer pageNum : controller.mapOfCapitalCalls.keySet()) {
            for (CapitalCallController.CapitalCallWrapper capCallRecord : controller.mapOfCapitalCalls.get(pageNum)) {
                sizeOfCapitalCallsSaved = sizeOfCapitalCallsSaved+1;
            }
        }
        controller.closeAllocSettPopup();
        controller.confirmAndSave();
        controller.saveSettings();
        Test.stopTest();
        system.assert(true,controller.isNullOrZeroCapCommitmentCheckbox);
        List<Capital_Call_Parent__c> parent = [Select Id, Fund__c,(Select Id,Management_Fees__c,Late_Admission_Interest__c,Capital_Call_Amount__c,Expenses__c,Other__c,Investments__c From Capital_Calls__r) From Capital_Call_Parent__c WHERE Id =:controller.parent.Id];
        for(Capital_Call__c capCall : parent[0].Capital_Calls__r){
            System.assertEquals(84.00,capCall.Management_Fees__c);
            System.assertEquals(30.67,capCall.Capital_Call_Amount__c); 
            System.assertEquals(57.33,capCall.Investments__c);
            System.assertEquals(137.33,capCall.Other__c);
            System.assertEquals(110.67,capCall.Expenses__c);
            System.assertEquals(164,capCall.Late_Admission_Interest__c);
        }
    }
    
    //Scenario2 : Creating a fund allocation parent with allocType = 'LP/GP Split Adjustable' with all the metrics allocated and rounding type as Half-Down
    @isTest 
    static void testAllocationLPGPSplitAdjustable_HalfDown(){
        Fund__c fund1 = [Select Id,Name from Fund__c where Name='Test Fund'];        
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        
        Test.startTest();
        
        Capital_Commitment__c capitalCommitment1 = TestObjectFactory.getCapitalCommitment(true, entity1.Id, fund1.Id);
        Capital_Commitment__c capitalCommitment2 = TestObjectFactory.getCapitalCommitment(true, entity2.Id, fund1.Id);
        Capital_Commitment__c capitalCommitment3 = TestObjectFactory.getCapitalCommitment(true, entity3.Id, fund1.Id);
        
        ImportWizardSettings__c impWizSetting = new ImportWizardSettings__c();
        impWizSetting.Enable_Allocation_Feature__c = true;
        impWizSetting.Record_Insertion_Batch_Size__c = 100;
        impWizSetting.Long_Running_Batch_Time_Threshold__c =35;
        insert impWizSetting;
        
        List<String> fundAllocFieldsList = new List<String>{'Capital Call Amount','Management Fees','Expenses','Other','Late Admission Interest','Investments'};   
        List<Fund_Allocation_Parent__c> fundAllocParentList = [SELECT Id, Name,Allocation_Type__c,Fund_to_Allocate__c, Metrics_to_Allocate__c,Rounding_Type__c FROM Fund_Allocation_Parent__c WHERE Allocation_Type__c = 'LP/GP Adjustable Split' AND Rounding_Type__c = 'Half Down' LIMIT 1];
        Map<String,String> metricToFundAllocMap = new Map<String,String>{'Capital Call Amount' => fundAllocParentList[0].Id, 'Management Fees' => fundAllocParentList[0].Id,'Expenses' => fundAllocParentList[0].Id,'Other' => fundAllocParentList[0].Id,'Late Admission Interest'  => fundAllocParentList[0].Id,'Investments'  => fundAllocParentList[0].Id};
       
        Fund_Allocation__c fundAlloc = TestObjectFactory.getTestFundAllocation(true,fundAllocParentList[0],fund1);
        Fund_Allocation_Member__c fundAllocMember1 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment1);
        Fund_Allocation_Member__c fundAllocMember2 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment2);
        Fund_Allocation_Member__c fundAllocMember3 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment3);
        
        List<Allocation_Settings__c> allocSettingList = [Select Id,Name,Field_Label_Name__c,Allocation_Parent_Id__c from Allocation_Settings__c];
        List<Allocation_Settings__c> updatedAllocSetttingList = new List<Allocation_Settings__c>();
        for(Allocation_Settings__c alloc : allocSettingList){
            alloc.Allocation_Parent_Id__c = fundAllocParentList[0].Id;
            updatedAllocSetttingList.add(alloc);
        }
        update updatedAllocSetttingList;
        
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(300.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments(); 
        controller.nextCapitalCommitmentList();
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.assignmentCallToAllocationSettings();
        controller.defaultProRataFlag = false;
        controller.setDefaultCalculationToMap();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 115.00;
        controller.tempCall.Investments__c = 215.00;
        controller.tempCall.Management_Fees__c = 315.00;
        controller.tempCall.Expenses__c = 415.00;
        controller.tempCall.Other__c = 515.00;
        controller.tempCall.Late_Admission_Interest__c = 615.00;
        controller.isNullOrZeroCapCommitmentCheckbox = true;
        controller.next();
        controller.getCurrentStepName();
        Integer sizeOfCapitalCallsSaved = 0;
        System.debug('controller.mapOfCapitalCalls.keySet(): '+controller.mapOfCapitalCalls.keySet());
        for (Integer pageNum : controller.mapOfCapitalCalls.keySet()) {
            for (CapitalCallController.CapitalCallWrapper capCallRecord : controller.mapOfCapitalCalls.get(pageNum)) {
                sizeOfCapitalCallsSaved = sizeOfCapitalCallsSaved+1;
            }
        }
        controller.closeAllocSettPopup();
        controller.confirmAndSave();
        controller.saveSettings();
        Test.stopTest();
        system.assert(true,controller.isNullOrZeroCapCommitmentCheckbox);
        List<Capital_Call_Parent__c> parent = [Select Id, Fund__c,(Select Id,Management_Fees__c,Capital_Call_Amount__c,Expenses__c,Other__c,Investments__c From Capital_Calls__r) From Capital_Call_Parent__c WHERE Id =:controller.parent.Id];
        for(Capital_Call__c capCall : parent[0].Capital_Calls__r){
            System.assertEquals(78.75,capCall.Management_Fees__c);
            System.assertEquals(28.75,capCall.Capital_Call_Amount__c);
            System.assertEquals(103.75,capCall.Expenses__c);
            System.assertEquals(128.75,CapCall.Other__c);
            System.assertEquals(53.75,CapCall.Investments__c);
            System.assertEquals(153.75,CapCall.Late_Admission_Interest__c);
        }
    }
    //Scenario3 : Creating a fund allocation parent with allocType = 'Fund Pro Rata' with all the metrics allocated and rounding type as Half-Up
    @isTest 
    static void testAllocationFundProRata_HalfUp(){
        Fund__c fund1 = [Select Id,Name from Fund__c where Name='Test Fund'];        
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        
        Test.startTest();
        Capital_Commitment__c capitalCommitment1 = TestObjectFactory.getCapitalCommitment(true, entity1.Id, fund1.Id);
        Capital_Commitment__c capitalCommitment2 = TestObjectFactory.getCapitalCommitment(true, entity2.Id, fund1.Id);
        Capital_Commitment__c capitalCommitment3 = TestObjectFactory.getCapitalCommitment(true, entity3.Id, fund1.Id);
        
        ImportWizardSettings__c impWizSetting = new ImportWizardSettings__c();
        impWizSetting.Enable_Allocation_Feature__c = true;
        impWizSetting.Record_Insertion_Batch_Size__c = 100;
        impWizSetting.Long_Running_Batch_Time_Threshold__c =35;
        insert impWizSetting;
        
        List<String> fundAllocFieldsList = new List<String>{'Capital Call Amount','Management Fees','Expenses','Other','Late Admission Interest','Investments'};   
        System.debug('parentList: '+[SELECT Id, Name,Allocation_Type__c,Fund_to_Allocate__c, Metrics_to_Allocate__c,Rounding_Type__c FROM Fund_Allocation_Parent__c WHERE Allocation_Type__c = 'Fund Pro Rata' AND Rounding_Type__c = 'Half Up' LIMIT 1]);
        List<Fund_Allocation_Parent__c> fundAllocParentList = [SELECT Id, Name,Allocation_Type__c,Fund_to_Allocate__c, Metrics_to_Allocate__c,Rounding_Type__c FROM Fund_Allocation_Parent__c WHERE Allocation_Type__c = 'Fund Pro Rata' AND Rounding_Type__c = 'Half Up' LIMIT 1];
        Map<String,String> metricToFundAllocMap = new Map<String,String>{'Capital Call Amount' => fundAllocParentList[0].Id, 'Management Fees' => fundAllocParentList[0].Id,'Expenses' => fundAllocParentList[0].Id,'Other' => fundAllocParentList[0].Id,'Late Admission Interest'  => fundAllocParentList[0].Id,'Investments'  => fundAllocParentList[0].Id};
       
        Fund_Allocation__c fundAlloc = TestObjectFactory.getTestFundAllocation(true,fundAllocParentList[0],fund1);
        Fund_Allocation_Member__c fundAllocMember1 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment1);
        Fund_Allocation_Member__c fundAllocMember2 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment2);
        Fund_Allocation_Member__c fundAllocMember3 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment3);
        
        List<Allocation_Settings__c> allocSettingList = [Select Id,Name,Field_Label_Name__c,Allocation_Parent_Id__c from Allocation_Settings__c];
        List<Allocation_Settings__c> updatedAllocSetttingList = new List<Allocation_Settings__c>();
        for(Allocation_Settings__c alloc : allocSettingList){
            alloc.Allocation_Parent_Id__c = fundAllocParentList[0].Id;
            updatedAllocSetttingList.add(alloc);
        }
        update updatedAllocSetttingList;
        
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(300.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.enableAllocationFeature = true;
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments(); 
        controller.nextCapitalCommitmentList();
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.assignmentCallToAllocationSettings();
        controller.defaultProRataFlag = false;
        controller.setDefaultCalculationToMap();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 115.00;
        controller.tempCall.Investments__c = 215.00;
        controller.tempCall.Management_Fees__c = 315.00;
        controller.tempCall.Expenses__c = 415.00;
        controller.tempCall.Other__c = 515.00;
        controller.tempCall.Late_Admission_Interest__c = 615.00;
        controller.isNullOrZeroCapCommitmentCheckbox = true;
        controller.next();
        controller.getCurrentStepName();
        Integer sizeOfCapitalCallsSaved = 0;
        System.debug('controller.mapOfCapitalCalls.keySet(): '+controller.mapOfCapitalCalls.keySet());
        for (Integer pageNum : controller.mapOfCapitalCalls.keySet()) {
            for (CapitalCallController.CapitalCallWrapper capCallRecord : controller.mapOfCapitalCalls.get(pageNum)) {
                sizeOfCapitalCallsSaved = sizeOfCapitalCallsSaved+1;
            }
        }
        controller.closeAllocSettPopup();
        controller.confirmAndSave();
        controller.saveSettings();
        Test.stopTest();
        List<Capital_Call_Parent__c> parent = [Select Id, Fund__c,(Select Id,Management_Fees__c,Capital_Call_Amount__c,Expenses__c,Other__c,Investments__c,Late_Admission_Interest__c From Capital_Calls__r) From Capital_Call_Parent__c WHERE Id =:controller.parent.Id];
        for(Capital_Call__c capCall : parent[0].Capital_Calls__r){
            System.assertEquals(105.00,capCall.Management_Fees__c);
            System.assertEquals(38.33,capCall.Capital_Call_Amount__c);
            System.assertEquals(138.33,capCall.Expenses__c);
            System.assertEquals(171.67,CapCall.Other__c);
            System.assertEquals(71.67,CapCall.Investments__c);
            System.assertEquals(205.00,CapCall.Late_Admission_Interest__c);
        }
    }
    
    //Scenario 4: Creating a fund allocation parent with allocType = 'Custom' and rounding type as 'Half down'
   @isTest 
    static void testAllocationCustom_HalfDown(){
        Fund__c fund1 = [Select Id,Name from Fund__c where Name='Test Fund'];        
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        
        Test.startTest();
        Capital_Commitment__c capitalCommitment1 = TestObjectFactory.getCapitalCommitment(true, entity1.Id, fund1.Id);
        Capital_Commitment__c capitalCommitment2 = TestObjectFactory.getCapitalCommitment(true, entity2.Id, fund1.Id);
        Capital_Commitment__c capitalCommitment3 = TestObjectFactory.getCapitalCommitment(true, entity3.Id, fund1.Id);
        
        ImportWizardSettings__c impWizSetting = new ImportWizardSettings__c();
        impWizSetting.Enable_Allocation_Feature__c = true;
        impWizSetting.Record_Insertion_Batch_Size__c = 100;
        impWizSetting.Long_Running_Batch_Time_Threshold__c =35;
        insert impWizSetting;
        
        List<String> fundAllocFieldsList = new List<String>{'Capital Call Amount','Management Fees','Expenses','Other','Late Admission Interest','Investments'};   
        List<Fund_Allocation_Parent__c> fundAllocParentList = [SELECT Id, Name,Allocation_Type__c,Fund_to_Allocate__c, Metrics_to_Allocate__c,Rounding_Type__c FROM Fund_Allocation_Parent__c WHERE Allocation_Type__c = 'Fund Pro Rata' AND Rounding_Type__c = 'Half Up' LIMIT 1];
        Map<String,String> metricToFundAllocMap = new Map<String,String>{'Capital Call Amount' => fundAllocParentList[0].Id, 'Management Fees' => fundAllocParentList[0].Id,'Expenses' => fundAllocParentList[0].Id,'Other' => fundAllocParentList[0].Id,'Late Admission Interest'  => fundAllocParentList[0].Id,'Investments'  => fundAllocParentList[0].Id};
        
        Fund_Allocation__c fundAlloc = TestObjectFactory.getTestFundAllocation(true,fundAllocParentList[0],fund1);
        Fund_Allocation_Member__c fundAllocMember1 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment1);
        Fund_Allocation_Member__c fundAllocMember2 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment2);
        Fund_Allocation_Member__c fundAllocMember3 = TestObjectFactory.getTestFundAllocationMember(true,fundAlloc,fundAllocParentList[0],capitalCommitment3);
        
        List<Allocation_Settings__c> allocSettingList = [Select Id,Name,Field_Label_Name__c,Allocation_Parent_Id__c from Allocation_Settings__c];
        List<Allocation_Settings__c> updatedAllocSetttingList = new List<Allocation_Settings__c>();
        for(Allocation_Settings__c alloc : allocSettingList){
            alloc.Allocation_Parent_Id__c = fundAllocParentList[0].Id;
            updatedAllocSetttingList.add(alloc);
        }
        update updatedAllocSetttingList;
        
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(300.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments(); 
        controller.nextCapitalCommitmentList();
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.assignmentCallToAllocationSettings();
        controller.defaultProRataFlag = false;
        controller.setDefaultCalculationToMap();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 115.00;
        controller.tempCall.Investments__c = 215.00;
        controller.tempCall.Management_Fees__c = 315.00;
        controller.tempCall.Expenses__c = 415.00;
        controller.tempCall.Other__c = 515.00;
        controller.tempCall.Late_Admission_Interest__c = 615.00;
        controller.isNullOrZeroCapCommitmentCheckbox = true;
        controller.next();
        controller.getCurrentStepName();
        Integer sizeOfCapitalCallsSaved = 0;
        System.debug('controller.mapOfCapitalCalls.keySet(): '+controller.mapOfCapitalCalls.keySet());
        for (Integer pageNum : controller.mapOfCapitalCalls.keySet()) {
            for (CapitalCallController.CapitalCallWrapper capCallRecord : controller.mapOfCapitalCalls.get(pageNum)) {
                sizeOfCapitalCallsSaved = sizeOfCapitalCallsSaved+1;
            }
        }
        controller.closeAllocSettPopup();
        controller.confirmAndSave();
        controller.saveSettings();
        Test.stopTest();
        List<Capital_Call_Parent__c> parent = [Select Id, Fund__c,(Select Id,Management_Fees__c,Capital_Call_Amount__c,Expenses__c,Other__c,Investments__c,Late_Admission_Interest__c From Capital_Calls__r) From Capital_Call_Parent__c WHERE Id =:controller.parent.Id];
		
        Integer temp = 1;
        for(Capital_Call__c capCall: parent[0].Capital_Calls__r)
            if(temp == 1){
        	System.assertEquals(85.05,capCall.Management_Fees__c);
            System.assertEquals(31.05,parent[0].Capital_Calls__r[0].Capital_Call_Amount__c);
            System.assertEquals(112.05,parent[0].Capital_Calls__r[0].Expenses__c);
            System.assertEquals(139.05,parent[0].Capital_Calls__r[0].Other__c);
            System.assertEquals(58.05,parent[0].Capital_Calls__r[0].Investments__c);
            System.assertEquals(166.05,parent[0].Capital_Calls__r[0].Late_Admission_Interest__c);
            temp+=1;
            }else if(temp == 2){
            System.assertEquals(127.57,parent[0].Capital_Calls__r[1].Management_Fees__c);
            System.assertEquals(46.57,parent[0].Capital_Calls__r[1].Capital_Call_Amount__c);
            System.assertEquals(168.07,parent[0].Capital_Calls__r[1].Expenses__c);
            System.assertEquals(208.57,parent[0].Capital_Calls__r[1].Other__c);
            System.assertEquals(87.07,parent[0].Capital_Calls__r[1].Investments__c);
            System.assertEquals(249.08,parent[0].Capital_Calls__r[1].Late_Admission_Interest__c);
            temp+=1;
            }else if(temp == 3){
            System.assertEquals(42.52,parent[0].Capital_Calls__r[2].Management_Fees__c);
            System.assertEquals(15.52,parent[0].Capital_Calls__r[2].Capital_Call_Amount__c);
            System.assertEquals(56.02,parent[0].Capital_Calls__r[2].Expenses__c);
            System.assertEquals(69.52,parent[0].Capital_Calls__r[2].Other__c);
            System.assertEquals(29.02,parent[0].Capital_Calls__r[2].Investments__c);
            System.assertEquals(83.038,parent[0].Capital_Calls__r[2].Late_Admission_Interest__c);
            }
    }
    //Scenario5 : Testing the functionality of allocations using Csv method
    @IsTest
    static void csvForAllocationsTest() {
        Fund__c fund=[Select Id,Name from Fund__c where Name='Test Fund'];
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        
        Capital_Commitment__c capitalCommitment1 = TestObjectFactory.getCapitalCommitment(true, entity1.Id, fund.Id);
        Capital_Commitment__c capitalCommitment2 = TestObjectFactory.getCapitalCommitment(true, entity2.Id, fund.Id);
        Capital_Commitment__c capitalCommitment3 = TestObjectFactory.getCapitalCommitment(true, entity3.Id, fund.Id);
        
        ImportWizardSettings__c impWizSetting = new ImportWizardSettings__c();
        impWizSetting.Enable_Allocation_Feature__c = true;
        impWizSetting.Record_Insertion_Batch_Size__c = 100;
        impWizSetting.Long_Running_Batch_Time_Threshold__c =35;
        insert impWizSetting;
        
        Test.startTest();
        
        List<String> fundAllocFieldsList = new List<String>{'Capital Call Amount','Management Fees','Expenses','Other','Late Admission Interest','Investments'};   
        List<Fund_Allocation_Parent__c> fundAllocParentList = [SELECT Id, Name,Allocation_Type__c,Fund_to_Allocate__c, Metrics_to_Allocate__c,Rounding_Type__c FROM Fund_Allocation_Parent__c WHERE Allocation_Type__c = 'LP/GP Split' AND Rounding_Type__c = 'Half Up' LIMIT 1];
        Map<String,String> metricToFundAllocMap = new Map<String,String>{'Capital Call Amount' => fundAllocParentList[0].Id, 'Management Fees' => fundAllocParentList[0].Id,'Expenses' => fundAllocParentList[0].Id,'Other' => fundAllocParentList[0].Id,'Late Admission Interest'  => fundAllocParentList[0].Id,'Investments'  => fundAllocParentList[0].Id};
            
        fund = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund.Id];
        final ApexPages.StandardController sc = new ApexPages.StandardController(fund);
        final CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments(); 
        controller.nextCapitalCommitmentList();
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.assignmentCallToAllocationSettings();
        controller.defaultProRataFlag = false;
        controller.setDefaultCalculationToMap();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 115.00;
        controller.tempCall.Investments__c = 215.00;
        controller.tempCall.Management_Fees__c = 315.00;
        controller.tempCall.Expenses__c = 415.00;
        controller.tempCall.Other__c = 515.00;
        controller.tempCall.Late_Admission_Interest__c = 615.00;
        controller.isNullOrZeroCapCommitmentCheckbox = true;
        controller.next(); 
        controller.fileBody = Blob.valueOf(
            'Investment Vehicle,Capital Call Amount,Investments,Management Fees,Expenses,Other,Late Admission Interest,Due Date\n'+
            'Investment Vehicle 1,30.67,57.33,84.00,110.67,137.33,164.00\n'+
            'Investment Vehicle 2,30.67,57.33,84.00,110.67,137.33,164.00\n'+
            'Investment Vehicle 3,30.67,57.33,84.00,110.67,137.33,164.00\n'
        );
        controller.processCSV();
        controller.confirmAndSave();
        Test.stopTest();
    }
    @isTest static void testAllocation_withDefaultProRataFlagTrue(){
        Fund__c fund1 = [Select Id,Name from Fund__c where Name='Test Fund'];        
        Account entity1 = [Select Id,Name from Account where Name='Test Entity LP'];
        Account entity2 = [Select Id,Name from Account where Name='Test Entity LP 1'];
        Account entity3 = [Select Id,Name from Account where Name='Test Entity LP 2'];
        
        Test.startTest();
        Capital_Commitment__c capitalCommitment1 = TestObjectFactory.getCapitalCommitment(true, entity1.Id, fund1.Id);
        Capital_Commitment__c capitalCommitment2 = TestObjectFactory.getCapitalCommitment(true, entity2.Id, fund1.Id);
        Capital_Commitment__c capitalCommitment3 = TestObjectFactory.getCapitalCommitment(true, entity3.Id, fund1.Id);
        
        ImportWizardSettings__c impWizSetting = new ImportWizardSettings__c();
        impWizSetting.Enable_Allocation_Feature__c = true;
        impWizSetting.Record_Insertion_Batch_Size__c = 100;
        impWizSetting.Long_Running_Batch_Time_Threshold__c =35;
        insert impWizSetting;
        
        List<Allocation_Settings__c> allocSettingList = [Select Id,Name,Field_Label_Name__c,Allocation_Parent_Id__c from Allocation_Settings__c where Field_Label_Name__c = 'Other'];
        allocSettingList[0].Name = 'Test_Other';
        Update allocSettingList;
        
        List<String> fundAllocFieldsList = new List<String>{'Capital Call Amount','Management Fees','Expenses','Other','Late Admission Interest','Investments'};   
        Map<String,String> metricToFundAllocMap = new Map<String,String>{'Capital Call Amount' => 'Pro-Rata', 'Management Fees' => 'Pro-Rata','Expenses' => 'Pro-Rata','Other' => 'Pro-Rata','Late Admission Interest'  => 'Pro-Rata','Investments'  => 'Pro-Rata'};
        
        fund1 = [SELECT Total_Committed_Capital__c FROM Fund__c WHERE Id = :fund1.Id];
        System.assertEquals(300.0, fund1.Total_Committed_Capital__c);
        ApexPages.StandardController sc = new ApexPages.StandardController(fund1);
        CapitalCallController controller = new CapitalCallController(sc);
        controller.init();
        controller.enableAllocationFeature = true;
        controller.capitalCommitmentPageSize = 2;
        controller.capitalCallPageSize = 2;
        controller.callToRetrieveCommitments(); 
        controller.nextCapitalCommitmentList();
        controller.previousCapitalCommitmenttList();
        controller.next();
        controller.assignmentCallToAllocationSettings();
        controller.defaultProRataFlag = true;
        controller.setDefaultCalculationToMap();
        controller.tempCall.Due_Date__c = Date.today();
        controller.tempCall.Capital_Call_Amount__c = 115.00;
        controller.tempCall.Investments__c = 215.00;
        controller.tempCall.Management_Fees__c = 315.00;
        controller.tempCall.Expenses__c = 415.00;
        controller.tempCall.Other__c = 515.00;
        controller.tempCall.Late_Admission_Interest__c = 615.00;
        controller.isNullOrZeroCapCommitmentCheckbox = true;
        controller.next();
        controller.getCurrentStepName();
        Integer sizeOfCapitalCallsSaved = 0;
        System.debug('controller.mapOfCapitalCalls.keySet(): '+controller.mapOfCapitalCalls.keySet());
        for (Integer pageNum : controller.mapOfCapitalCalls.keySet()) {
            for (CapitalCallController.CapitalCallWrapper capCallRecord : controller.mapOfCapitalCalls.get(pageNum)) {
                sizeOfCapitalCallsSaved = sizeOfCapitalCallsSaved+1;
            }
        }
        controller.closeAllocSettPopup();
        controller.confirmAndSave();
        controller.saveSettings();
        Test.stopTest();
        List<Capital_Call_Parent__c> parent = [Select Id, Fund__c,(Select Id,Management_Fees__c,Capital_Call_Amount__c,Expenses__c,Other__c,Investments__c,Late_Admission_Interest__c From Capital_Calls__r) From Capital_Call_Parent__c WHERE Id =:controller.parent.Id];
        for(Capital_Call__c capCall : parent[0].Capital_Calls__r){
            System.assertEquals(105.00,capCall.Management_Fees__c);
            System.assertEquals(38.33,capCall.Capital_Call_Amount__c);
            System.assertEquals(138.33,capCall.Expenses__c);
            System.assertEquals(171.67,CapCall.Other__c);
            System.assertEquals(71.67,CapCall.Investments__c);
            System.assertEquals(205.00,CapCall.Late_Admission_Interest__c);
        }
    }
}