6.5 - Hooking into Charges

This commit is contained in:
Adam Wathan
2016-11-19 20:50:31 -05:00
parent d855fa3e16
commit 85c79f32b8
2 changed files with 26 additions and 0 deletions

View File

@@ -5,6 +5,7 @@ namespace App\Billing;
class FakePaymentGateway implements PaymentGateway class FakePaymentGateway implements PaymentGateway
{ {
private $charges; private $charges;
private $beforeFirstChargeCallback;
public function __construct() public function __construct()
{ {
@@ -18,6 +19,10 @@ class FakePaymentGateway implements PaymentGateway
public function charge($amount, $token) public function charge($amount, $token)
{ {
if ($this->beforeFirstChargeCallback !== null) {
$this->beforeFirstChargeCallback->__invoke($this);
}
if ($token !== $this->getValidTestToken()) { if ($token !== $this->getValidTestToken()) {
throw new PaymentFailedException; throw new PaymentFailedException;
} }
@@ -28,4 +33,9 @@ class FakePaymentGateway implements PaymentGateway
{ {
return $this->charges->sum(); return $this->charges->sum();
} }
public function beforeFirstCharge($callback)
{
$this->beforeFirstChargeCallback = $callback;
}
} }

View File

@@ -30,4 +30,20 @@ class FakePaymentGatewayTest extends TestCase
$this->fail(); $this->fail();
} }
/** @test */
function running_a_hook_before_the_first_charge()
{
$paymentGateway = new FakePaymentGateway;
$callbackRan = false;
$paymentGateway->beforeFirstCharge(function ($paymentGateway) use (&$callbackRan) {
$callbackRan = true;
$this->assertEquals(0, $paymentGateway->totalCharges());
});
$paymentGateway->charge(2500, $paymentGateway->getValidTestToken());
$this->assertTrue($callbackRan);
$this->assertEquals(2500, $paymentGateway->totalCharges());
}
} }