/**
  * @param float $loanAmount
  * @param bool $expectedAcceptance
  * @param string $expectedAgentInstance
  *
  * @dataProvider loanApplicationDataProvider
  */
 public function testResolveLoanRequest(float $loanAmount, bool $expectedAcceptance, string $expectedAgentInstance)
 {
     $loanRequest = new LoanApplicationRequest(new BankCustomer('Unit Test Customer'), $loanAmount);
     $loanApprovalResult = $this->loanSystem->resolveLoanRequest($loanRequest);
     $this->assertNotNull($loanApprovalResult);
     $this->assertInstanceOf('\\PetrePatrasc\\ChainOfResponsibility\\LoanApplicationResponse', $loanApprovalResult);
     $this->assertInternalType('bool', $loanApprovalResult->isApproved());
     $this->assertEquals($expectedAcceptance, $loanApprovalResult->isApproved());
     $this->assertNotNull($loanApprovalResult->getAgent());
     $this->assertInstanceOf($expectedAgentInstance, $loanApprovalResult->getAgent());
 }
 /**
  * @inheritDoc
  */
 public function applyForLoan(float $amount, LoanSystem $loanSystem) : LoanApplicationResponse
 {
     $loanRequest = new LoanApplicationRequest($this, $amount);
     return $loanSystem->resolveLoanRequest($loanRequest);
 }