From d4bcb02a8eaecdfc32b33f47e49f1f17a37b206b Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 8 Dec 2017 14:35:50 -0500 Subject: [PATCH] 153 - Testing a Console Command --- app/Facades/InvitationCode.php | 14 ++++++++++ app/InvitationCodeGenerator.php | 8 ++++++ app/Providers/AppServiceProvider.php | 2 ++ ...RandomOrderConfirmationNumberGenerator.php | 2 +- database/factories/ModelFactory.php | 5 +++- ..._12_08_173739_create_invitations_table.php | 1 + routes/console.php | 11 +++++--- tests/Feature/InvitePromoterTest.php | 27 +++++++++++++++++++ 8 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 app/Facades/InvitationCode.php create mode 100644 app/InvitationCodeGenerator.php create mode 100644 tests/Feature/InvitePromoterTest.php diff --git a/app/Facades/InvitationCode.php b/app/Facades/InvitationCode.php new file mode 100644 index 0000000..d6d2f96 --- /dev/null +++ b/app/Facades/InvitationCode.php @@ -0,0 +1,14 @@ +app->bind(PaymentGateway::class, StripePaymentGateway::class); $this->app->bind(OrderConfirmationNumberGenerator::class, RandomOrderConfirmationNumberGenerator::class); + $this->app->bind(InvitationCodeGenerator::class, RandomOrderConfirmationNumberGenerator::class); $this->app->bind(TicketCodeGenerator::class, HashidsTicketCodeGenerator::class); } } diff --git a/app/RandomOrderConfirmationNumberGenerator.php b/app/RandomOrderConfirmationNumberGenerator.php index a9e2719..374ba69 100644 --- a/app/RandomOrderConfirmationNumberGenerator.php +++ b/app/RandomOrderConfirmationNumberGenerator.php @@ -2,7 +2,7 @@ namespace App; -class RandomOrderConfirmationNumberGenerator implements OrderConfirmationNumberGenerator +class RandomOrderConfirmationNumberGenerator implements OrderConfirmationNumberGenerator, InvitationCodeGenerator { public function generate() { diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index 1d92179..d87125e 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -80,5 +80,8 @@ $factory->define(App\Order::class, function (Faker\Generator $faker) { }); $factory->define(App\Invitation::class, function (Faker\Generator $faker) { - return []; + return [ + 'email' => 'somebody@example.com', + 'code' => 'TESTCODE1234', + ]; }); diff --git a/database/migrations/2017_12_08_173739_create_invitations_table.php b/database/migrations/2017_12_08_173739_create_invitations_table.php index 05bbff0..5784916 100644 --- a/database/migrations/2017_12_08_173739_create_invitations_table.php +++ b/database/migrations/2017_12_08_173739_create_invitations_table.php @@ -16,6 +16,7 @@ class CreateInvitationsTable extends Migration Schema::create('invitations', function (Blueprint $table) { $table->increments('id'); $table->unsignedInteger('user_id')->nullable(); + $table->string('email'); $table->string('code'); $table->timestamps(); }); diff --git a/routes/console.php b/routes/console.php index 75dd0cd..896ec60 100644 --- a/routes/console.php +++ b/routes/console.php @@ -1,5 +1,7 @@ comment(Inspiring::quote()); -})->describe('Display an inspiring quote'); +Artisan::command('invite-promoter {email}', function ($email) { + $invitation = Invitation::create([ + 'email' => $email, + 'code' => InvitationCode::generate(), + ]); +})->describe('Invite a new promoter to create an account.'); diff --git a/tests/Feature/InvitePromoterTest.php b/tests/Feature/InvitePromoterTest.php new file mode 100644 index 0000000..7ac4b34 --- /dev/null +++ b/tests/Feature/InvitePromoterTest.php @@ -0,0 +1,27 @@ +andReturn('TESTCODE1234'); + + $this->artisan('invite-promoter', ['email' => 'john@example.com']); + + $this->assertEquals(1, Invitation::count()); + $invitation = Invitation::first(); + $this->assertEquals('john@example.com', $invitation->email); + $this->assertEquals('TESTCODE1234', $invitation->code); + } +}