charge(1000, $paymentGateway->getValidTestToken(), 'test_acct_0000'); $paymentGateway->charge(2500, $paymentGateway->getValidTestToken(), 'test_acct_1234'); $paymentGateway->charge(4000, $paymentGateway->getValidTestToken(), 'test_acct_1234'); $this->assertEquals(6500, $paymentGateway->totalChargesFor('test_acct_1234')); } /** @test */ function running_a_hook_before_the_first_charge() { $paymentGateway = new FakePaymentGateway; $timesCallbackRan = 0; $paymentGateway->beforeFirstCharge(function ($paymentGateway) use (&$timesCallbackRan) { $timesCallbackRan++; $paymentGateway->charge(2500, $paymentGateway->getValidTestToken(), 'test_acct_1234'); $this->assertEquals(2500, $paymentGateway->totalCharges()); }); $paymentGateway->charge(2500, $paymentGateway->getValidTestToken(), 'test_acct_1234'); $this->assertEquals(1, $timesCallbackRan); $this->assertEquals(5000, $paymentGateway->totalCharges()); } }