From d5cf2592b1b6d0eb5cb37c78478aa6c8f770fbbd Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 8 Dec 2017 13:44:08 -0500 Subject: [PATCH] 152 - Validating Promoter Registration --- .../Controllers/Auth/RegisterController.php | 5 ++ tests/Feature/AcceptInvitationTest.php | 79 +++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index c5915d8..dd61f22 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -14,6 +14,11 @@ class RegisterController extends Controller $invitation = Invitation::findByCode(request('invitation_code')); abort_if($invitation->hasBeenUsed(), 404); + request()->validate([ + 'email' => ['required', 'email', 'unique:users'], + 'password' => ['required'], + ]); + $user = User::create([ 'email' => request('email'), 'password' => bcrypt(request('password')), diff --git a/tests/Feature/AcceptInvitationTest.php b/tests/Feature/AcceptInvitationTest.php index 61015c2..1b38a19 100644 --- a/tests/Feature/AcceptInvitationTest.php +++ b/tests/Feature/AcceptInvitationTest.php @@ -108,4 +108,83 @@ class AcceptInvitationTest extends TestCase $response->assertStatus(404); $this->assertEquals(0, User::count()); } + + /** @test */ + function email_is_required() + { + $invitation = factory(Invitation::class)->create([ + 'user_id' => null, + 'code' => 'TESTCODE1234', + ]); + + $response = $this->from('/invitations/TESTCODE1234')->post('/register', [ + 'email' => '', + 'password' => 'secret', + 'invitation_code' => 'TESTCODE1234', + ]); + + $response->assertRedirect('/invitations/TESTCODE1234'); + $response->assertSessionHasErrors('email'); + $this->assertEquals(0, User::count()); + } + + /** @test */ + function email_must_be_an_email() + { + $invitation = factory(Invitation::class)->create([ + 'user_id' => null, + 'code' => 'TESTCODE1234', + ]); + + $response = $this->from('/invitations/TESTCODE1234')->post('/register', [ + 'email' => 'not-an-email', + 'password' => 'secret', + 'invitation_code' => 'TESTCODE1234', + ]); + + $response->assertRedirect('/invitations/TESTCODE1234'); + $response->assertSessionHasErrors('email'); + $this->assertEquals(0, User::count()); + } + + /** @test */ + function email_must_be_unique() + { + $existingUser = factory(User::class)->create(['email' => 'john@example.com']); + $this->assertEquals(1, User::count()); + + $invitation = factory(Invitation::class)->create([ + 'user_id' => null, + 'code' => 'TESTCODE1234', + ]); + + $response = $this->from('/invitations/TESTCODE1234')->post('/register', [ + 'email' => 'john@example.com', + 'password' => 'secret', + 'invitation_code' => 'TESTCODE1234', + ]); + + $response->assertRedirect('/invitations/TESTCODE1234'); + $response->assertSessionHasErrors('email'); + $this->assertEquals(1, User::count()); + } + + /** @test */ + function password_is_required() + { + $invitation = factory(Invitation::class)->create([ + 'user_id' => null, + 'code' => 'TESTCODE1234', + ]); + + $response = $this->from('/invitations/TESTCODE1234')->post('/register', [ + 'email' => 'john@example.com', + 'password' => '', + 'invitation_code' => 'TESTCODE1234', + ]); + + $response->assertRedirect('/invitations/TESTCODE1234'); + $response->assertSessionHasErrors('password'); + $this->assertEquals(0, User::count()); + } }