• Amey Patil 10
  • NEWBIE
  • 0 Points
  • Member since 2021

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 1
    Questions
  • 1
    Replies
I have to increase test coverage of the given class.
I am getting error: 
System.DmlException: Process failed. First exception on row 0; first error: NO_APPLICABLE_PROCESS, No applicable approval process was found.: []

Class: 
public with sharing class OpportunityApproveComponent {
	public ProcessInstanceWorkitem[] items{get;set;}
	public void init(){
		items=new ProcessInstanceWorkitem[]{};
		ProcessInstanceWorkitem[] itemes=[Select p.ProcessInstance.Status, p.ProcessInstance.TargetObjectId, 
				p.ProcessInstanceId, p.OriginalActorId, p.Id, p.CreatedById, p.ActorId,p.CreatedDate
			From ProcessInstanceWorkitem p order by CreatedDate desc];
        System.debug('itemes'+itemes);
		set<String> oppids=new set<String>();
		for(ProcessInstanceWorkitem p:itemes){
			if(String.valueOf(p.ProcessInstance.TargetObjectId).startsWith('006')){
				oppids.add(p.ProcessInstance.TargetObjectId);
			}
		}
		map<Id,Opportunity> oppmap=new map<Id,Opportunity>([select id,StageName from Opportunity where id in:oppids and StageName ='Approval Pending']);
		for(ProcessInstanceWorkitem p:itemes){
			if(oppmap.containskey(p.ProcessInstance.TargetObjectId)){
				items.add(p);
			}
		}
	}
}

Test Class: 
@isTest(seeAllData = true)
public class OpportunityApproveComponentTest {
    @isTest
    static void test(){
        Id userId = UserInfo.getUserId();
        
        Account acc = new Account(Name = 'test account', ownerId = userId);
        insert acc;
        
        c2g__codaGeneralLedgerAccount__c gla = new c2g__codaGeneralLedgerAccount__c(Name = '116000 - Accounts Receivable', c2g__Type__c = 'test1',c2g__ReportingCode__c = 'TestDatac2gReport');
        insert gla;
        
        Opportunity opp = new Opportunity(Name = 'test',
                                          stageName = 'Internal Approval',
                                          closeDate = Date.today()+30,
                                          ready_to_be_invoiced__c = true,
                                          AccountId = acc.Id,
                                          ownerId = userId
                                         );
        insert opp;
          
        Approval.ProcessSubmitRequest req1 = new Approval.ProcessSubmitRequest();
        req1.setComments('Submitting request for approval.');
        req1.setObjectId(opp.id);
        
        req1.setSubmitterId(userId); 

        req1.setProcessDefinitionNameOrId(userId);
        req1.setSkipEntryCriteria(true);
        
        Approval.ProcessResult result = Approval.process(req1);

         List<Id> newWorkItemIds = result.getNewWorkitemIds();
        
        Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest();
        req2.setComments('Approving request.');
        req2.setAction('Approve');
        req2.setNextApproverIds(new Id[] {userId});
        
        req2.setWorkitemId(newWorkItemIds.get(0));
        
        Approval.ProcessResult result2 =  Approval.process(req2);
        
        
        Test.startTest();
        OpportunityApproveComponent cmp = new OpportunityApproveComponent();
        cmp.init();
        Test.stopTest();
        
    }
}
Can anyone please provide me the suggestions/ solution on this test class ?

 
Please help me for these questions:

1)A Hierarchy Custom Setting stores a specific URL for each profile in Salesforce.
Which statement can a developer use to retrieve the correct URL for the current user´s profile and display this on a Visualforce page?
A.{!$Setup.Url_Settings__c[Profile.Id].URL__c}
B.{!$Setup.Url_Settings_c.Instance[Profile.Id].URL__c}
C.{!$Setup.Url_Settings__c.URL__c}(Missed)
D.{!$Setup.Url_Settings__c[$Profile.Id].URL__c}