charges = collect(); } public function getValidTestToken() { return "valid-token"; } public function charge($amount, $token) { if ($this->beforeFirstChargeCallback !== null) { $callback = $this->beforeFirstChargeCallback; $this->beforeFirstChargeCallback = null; $callback($this); } if ($token !== $this->getValidTestToken()) { throw new PaymentFailedException; } $this->charges[] = $amount; } public function totalCharges() { return $this->charges->sum(); } public function beforeFirstCharge($callback) { $this->beforeFirstChargeCallback = $callback; } }