159 - Unit Testing Middleware

This commit is contained in:
Adam Wathan
2018-01-22 14:54:15 -05:00
parent 9fceea25bf
commit 9174e9d0c3
6 changed files with 90 additions and 3 deletions

View File

@@ -9,6 +9,11 @@ use Illuminate\Support\Facades\Auth;
class StripeConnectController extends Controller
{
public function connect()
{
return view('backstage.stripe-connect.connect');
}
public function authorizeRedirect()
{
$url = vsprintf('%s?%s', [

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class ForceStripeAccount
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->stripe_account_id === null) {
return redirect()->route('backstage.stripe-connect.connect');
}
// return $next($request);
}
}

View File

@@ -0,0 +1,22 @@
@extends('layouts.master')
@section('body')
<div class="container-fluid bg-soft">
<div class="full-height flex-center">
<div class="constrain constrain-sm flex-fit">
<div class="card p-xs-6">
<h1 class="text-xl wt-light text-center m-xs-b-6">Connect your Stripe account</h1>
<p class="m-xs-b-6">
Good news, TicketBeast now integrates directly with your Stripe account!
</p>
<p class="m-xs-b-6">
To continue, connect your Stripe account by clicking the button below:
</p>
<div>
<a href="{{ route('backstage.stripe-connect.authorize') }}" class="btn btn-block btn-primary">Connect with Stripe</a>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -36,7 +36,8 @@ Route::group(['middleware' => 'auth', 'prefix' => 'backstage', 'namespace' => 'B
Route::get('/concerts/{id}/messages/new', 'ConcertMessagesController@create')->name('backstage.concert-messages.new');
Route::post('/concerts/{id}/messages', 'ConcertMessagesController@store')->name('backstage.concert-messages.store');
Route::get('/stripe-connect/authorize', 'StripeConnectController@authorizeRedirect');
Route::get('/stripe-connect/redirect', 'StripeConnectController@redirect');
Route::get('/stripe-connect/connect', 'StripeConnectController@connect')->name('backstage.stripe-connect.connect');
Route::get('/stripe-connect/authorize', 'StripeConnectController@authorizeRedirect')->name('backstage.stripe-connect.authorize');
Route::get('/stripe-connect/redirect', 'StripeConnectController@redirect')->name('backstage.stripe-connect.redirect');
});

View File

@@ -21,7 +21,8 @@ class ConnectWithStripeTest extends DuskTestCase
$this->browse(function (Browser $browser) use ($user) {
$browser->loginAs($user)
->visit('/backstage/stripe-connect/authorize')
->visit('/backstage/stripe-connect/connect')
->clickLink('Connect with Stripe')
->assertUrlIs('https://connect.stripe.com/oauth/authorize')
->assertQueryStringHas('response_type', 'code')
->assertQueryStringHas('scope', 'read_write')

View File

@@ -0,0 +1,33 @@
<?php
namespace Tests\Unit\Http\Middleware;
use App\User;
use Tests\TestCase;
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use App\Http\Middleware\ForceStripeAccount;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ForceStripeAccountTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function users_without_a_stripe_account_are_forced_to_connect_with_stripe()
{
$this->be(factory(User::class)->create([
'stripe_account_id' => null,
]));
$middleware = new ForceStripeAccount;
$response = $middleware->handle(new Request, function ($request) {
$this->fail("Next middleware was called when it should not have been.");
});
$this->assertInstanceOf(RedirectResponse::class, $response);
$this->assertEquals(route('backstage.stripe-connect.connect'), $response->getTargetUrl());
}
}