diff --git a/vuesplash/app/Http/Controllers/Auth/LoginController.php b/vuesplash/app/Http/Controllers/Auth/LoginController.php index b2ea669a..c5ad9c88 100644 --- a/vuesplash/app/Http/Controllers/Auth/LoginController.php +++ b/vuesplash/app/Http/Controllers/Auth/LoginController.php @@ -4,6 +4,7 @@ use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\AuthenticatesUsers; +use Illuminate\Http\Request; // ★ 追加 class LoginController extends Controller { @@ -36,4 +37,18 @@ public function __construct() { $this->middleware('guest')->except('logout'); } + + protected function authenticated(Request $request, $user) + { + return $user; + } + + protected function loggedOut(Request $request) + { + // セッションを再生成する + $request->session()->regenerate(); + + return response()->json(); + } + } diff --git a/vuesplash/app/Http/Controllers/Auth/RegisterController.php b/vuesplash/app/Http/Controllers/Auth/RegisterController.php index 0e8d66aa..3b7369a0 100644 --- a/vuesplash/app/Http/Controllers/Auth/RegisterController.php +++ b/vuesplash/app/Http/Controllers/Auth/RegisterController.php @@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Foundation\Auth\RegistersUsers; +use Illuminate\Http\Request; class RegisterController extends Controller { @@ -69,4 +70,9 @@ protected function create(array $data) 'password' => Hash::make($data['password']), ]); } + + protected function registered(Request $request, $user) + { + return $user; + } } diff --git a/vuesplash/app/Providers/RouteServiceProvider.php b/vuesplash/app/Providers/RouteServiceProvider.php index 5ea48d39..392bac2b 100644 --- a/vuesplash/app/Providers/RouteServiceProvider.php +++ b/vuesplash/app/Providers/RouteServiceProvider.php @@ -66,7 +66,7 @@ protected function mapWebRoutes() protected function mapApiRoutes() { Route::prefix('api') - ->middleware('api') + ->middleware('web') ->namespace($this->namespace) ->group(base_path('routes/api.php')); } diff --git a/vuesplash/config/database.php b/vuesplash/config/database.php index 22347a41..c40bbffb 100644 --- a/vuesplash/config/database.php +++ b/vuesplash/config/database.php @@ -40,6 +40,12 @@ 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ], + 'sqlite_testing' => [ + 'driver' => 'sqlite', + 'database' => ':memory:', + 'prefix' => '', + ], + 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), diff --git a/vuesplash/phpunit.xml b/vuesplash/phpunit.xml index 9566b67e..126fb2f2 100644 --- a/vuesplash/phpunit.xml +++ b/vuesplash/phpunit.xml @@ -24,6 +24,7 @@ + diff --git a/vuesplash/routes/api.php b/vuesplash/routes/api.php index c641ca5e..b3d2b858 100644 --- a/vuesplash/routes/api.php +++ b/vuesplash/routes/api.php @@ -16,3 +16,7 @@ Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); +Route::post('/register', 'Auth\RegisterController@register')->name('register'); +Route::post('/login', 'Auth\LoginController@login')->name('login'); +Route::post('/login', 'Auth\LoginController@login')->name('login'); +Route::post('/logout', 'Auth\LoginController@logout')->name('logout'); diff --git a/vuesplash/tests/Feature/LoginApiTest.php b/vuesplash/tests/Feature/LoginApiTest.php new file mode 100644 index 00000000..f84a6add --- /dev/null +++ b/vuesplash/tests/Feature/LoginApiTest.php @@ -0,0 +1,38 @@ +user = factory(User::class)->create(); + } + + /** + * @test + */ + public function should_登録済みのユーザーを認証して返却する() + { + $response = $this->json('POST', route('login'), [ + 'email' => $this->user->email, + 'password' => 'secret', + ]); + + $response + ->assertStatus(200) + ->assertJson(['name' => $this->user->name]); + + $this->assertAuthenticatedAs($this->user); + } +} \ No newline at end of file diff --git a/vuesplash/tests/Feature/LogoutApiTest.php b/vuesplash/tests/Feature/LogoutApiTest.php new file mode 100644 index 00000000..813f2b55 --- /dev/null +++ b/vuesplash/tests/Feature/LogoutApiTest.php @@ -0,0 +1,33 @@ +user = factory(User::class)->create(); + } + + /** + * @test + */ + public function should_認証済みのユーザーをログアウトさせる() + { + $response = $this->actingAs($this->user) + ->json('POST', route('logout')); + + $response->assertStatus(200); + $this->assertGuest(); + } +} diff --git a/vuesplash/tests/Feature/RegisterApiTest.php b/vuesplash/tests/Feature/RegisterApiTest.php new file mode 100644 index 00000000..b97cd7a8 --- /dev/null +++ b/vuesplash/tests/Feature/RegisterApiTest.php @@ -0,0 +1,35 @@ + 'vuesplash user', + 'email' => 'dummy@email.com', + 'password' => 'test1234', + 'password_confirmation' => 'test1234', + ]; + + $response = $this->json('POST', route('register'), $data); + + $user = User::first(); + $this->assertEquals($data['name'], $user->name); + + $response + ->assertStatus(201) + ->assertJson(['name' => $user->name]); + } +} \ No newline at end of file