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); + } +}