Laravel 10, how create logout api unit test?
Hello! I have api service based on laravel 10 arm, passport component with bearer tokens.
My logout function:
public function logout(Request $request): JsonResponse
{
$token = $request->user()->token();
$token->revoke();
$response = ['message' => __('You have been successfully logged out.')];
return response()->json($response, ResponseAlias::HTTP_NO_CONTENT, Common::HEADER, JSON_UNESCAPED_UNICODE);
}
My test:
public function test_api_logout()
{
User::factory()->create([
"name" => "Name",
"surname" => "Surname",
"email" => "[email protected]",
"password" => Hash::make("12345678"),
"remember_token" => Str::random(10),
"user_position_id" => 1,
"factory_id" => 1,
"user_role_id" => 1,
"workcenter_group_id" => 1
]);
$response = $this->postJson('/api/login', ['email' => '[email protected]', 'password' => '12345678']);
$token = $response->json()['token'];
$response = $this->withHeaders([
'Authorization' => 'Bearer ' . $token,
])->get('/api/logout');
if ($response->getStatusCode() === 204) {
$response = $this->withHeaders([
'Authorization' => 'Bearer ' . $token,
])->get('/api/logout');
$response
->assertStatus(401);
}
}
What i do in that test:
- create user through factory
- login
- using recived token i try logout
- after sucessfull logout i try logut again to test logout function
On second logout i must recive 401 code, not authorized (because route is closed), but recive again 204, why?
Api route:
Route::middleware('auth:api')->group(function () {
Route::get('/logout', [ApiAuthController::class, 'logout'])->name('logout.api');
})
Anticipating your questions, i try login using:
Passport::actingAs($user);
But i have sql error:
DETAIL: Failing row contains (null, null, null, null, [], t, 2024-02-29 12:50:06, 2024-02-29 12:50:06, null). (Connection: pgsql, SQL: insert into "oauth_access_tokens" ("scopes", "revoked", "updated_at", "created_at") values ([], 1, 2024-02-29 12:50:06, 2024-02-29 12:50:06)), 197, #0 J:\OpenServer\domains\site.com\vendor\laravel\framework\src\Illuminate\Database\Connection.php(783): Illuminate\Database\Connection->runQueryCallback('insert into "oa...', Arra y, Object(Closure)) )
Please or to participate in this conversation.