65 - Extracting a Contract Test

This commit is contained in:
Adam Wathan
2017-01-18 15:18:50 -05:00
parent 529e4d83bc
commit 8c38d3c20c
5 changed files with 41 additions and 44 deletions

View File

@@ -35,7 +35,7 @@ class FakePaymentGateway implements PaymentGateway
{
$chargesFrom = $this->charges->count();
$callback($this);
return $this->charges->slice($chargesFrom)->values();
return $this->charges->slice($chargesFrom)->reverse()->values();
}
public function totalCharges()

View File

@@ -28,7 +28,7 @@
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
"tests"
]
},
"scripts": {

View File

@@ -8,40 +8,13 @@ use Illuminate\Foundation\Testing\DatabaseTransactions;
class FakePaymentGatewayTest extends TestCase
{
use PaymentGatewayContractTests;
protected function getPaymentGateway()
{
return new FakePaymentGateway;
}
/** @test */
function can_fetch_charges_created_during_a_callback()
{
$paymentGateway = $this->getPaymentGateway();
$paymentGateway->charge(2000, $paymentGateway->getValidTestToken());
$paymentGateway->charge(3000, $paymentGateway->getValidTestToken());
$newCharges = $paymentGateway->newChargesDuring(function ($paymentGateway) {
$paymentGateway->charge(4000, $paymentGateway->getValidTestToken());
$paymentGateway->charge(5000, $paymentGateway->getValidTestToken());
});
$this->assertCount(2, $newCharges);
$this->assertEquals([4000, 5000], $newCharges->all());
}
/** @test */
function charges_with_a_valid_payment_token_are_successful()
{
$paymentGateway = $this->getPaymentGateway();
$newCharges = $paymentGateway->newChargesDuring(function ($paymentGateway) {
$paymentGateway->charge(2500, $paymentGateway->getValidTestToken());
});
$this->assertCount(1, $newCharges);
$this->assertEquals(2500, $newCharges->sum());
}
/** @test */
function charges_with_an_invalid_payment_token_fail()
{

View File

@@ -0,0 +1,35 @@
<?php
trait PaymentGatewayContractTests
{
abstract protected function getPaymentGateway();
/** @test */
function charges_with_a_valid_payment_token_are_successful()
{
$paymentGateway = $this->getPaymentGateway();
$newCharges = $paymentGateway->newChargesDuring(function ($paymentGateway) {
$paymentGateway->charge(2500, $paymentGateway->getValidTestToken());
});
$this->assertCount(1, $newCharges);
$this->assertEquals(2500, $newCharges->sum());
}
/** @test */
function can_fetch_charges_created_during_a_callback()
{
$paymentGateway = $this->getPaymentGateway();
$paymentGateway->charge(2000, $paymentGateway->getValidTestToken());
$paymentGateway->charge(3000, $paymentGateway->getValidTestToken());
$newCharges = $paymentGateway->newChargesDuring(function ($paymentGateway) {
$paymentGateway->charge(4000, $paymentGateway->getValidTestToken());
$paymentGateway->charge(5000, $paymentGateway->getValidTestToken());
});
$this->assertCount(2, $newCharges);
$this->assertEquals([5000, 4000], $newCharges->all());
}
}

View File

@@ -8,6 +8,8 @@ use App\Billing\PaymentFailedException;
*/
class StripePaymentGatewayTest extends TestCase
{
use PaymentGatewayContractTests;
protected function setUp()
{
parent::setUp();
@@ -19,19 +21,6 @@ class StripePaymentGatewayTest extends TestCase
return new StripePaymentGateway(config('services.stripe.secret'));
}
/** @test */
function charges_with_a_valid_payment_token_are_successful()
{
$paymentGateway = $this->getPaymentGateway();
$newCharges = $paymentGateway->newChargesDuring(function ($paymentGateway) {
$paymentGateway->charge(2500, $paymentGateway->getValidTestToken());
});
$this->assertCount(1, $newCharges);
$this->assertEquals(2500, $newCharges->sum());
}
/** @test */
function charges_with_an_invalid_payment_token_fail()
{