Add the logout for the API.
continuous-integration/drone/push Build is failing

This commit is contained in:
2024-08-31 14:47:45 +03:00
parent 2f4fc790be
commit 3eb12de52c
9 changed files with 94 additions and 6 deletions
@@ -64,6 +64,45 @@ defmodule LinkShortenerWeb.Api.V1.AccountsControllerTest do
end
end
describe "user signs out" do
setup [:create_user]
setup %{conn: conn} do
%{token: token} = create_user_token()
conn = conn
|> put_req_header("accept", "application/json")
|> put_req_header("authorization", "Bearer #{token}")
{:ok, conn: conn, token: token}
end
test "renders the message and the token if successfully sign out", %{conn: conn, token: token} do
conn = post(conn, ~p"/api/v1/users/sign_out", %{})
assert %{
"message" => "Successfully sign out",
"token" => token,
} = json_response(conn, 200)
end
test "renders errors if the token is invalid after revoke", %{conn: conn, token: token} do
# revoking
conn = post(conn, ~p"/api/v1/users/sign_out", %{})
# second revoking
conn = post(conn, ~p"/api/v1/users/sign_out", %{})
assert %{
"error" => "invalid_token"
} = json_response(conn, 401)
end
end
defp create_user_token() do
token = user_token_fixture()
%{token: token}
end
defp create_user(_) do
user = user_fixture(@create_attrs)
%{user: user}
@@ -2,6 +2,7 @@ defmodule LinkShortenerWeb.Api.V1.LinkControllerTest do
use LinkShortenerWeb.ConnCase
import LinkShortener.LinksFixtures
import LinkShortener.AccountsFixtures
alias LinkShortener.Links.Link
alias LinkShortener.Links
@@ -25,7 +26,13 @@ defmodule LinkShortenerWeb.Api.V1.LinkControllerTest do
}
setup %{conn: conn} do
{:ok, conn: put_req_header(conn, "accept", "application/json")}
%{token: token} = create_user_token()
conn = conn
|> put_req_header("accept", "application/json")
|> put_req_header("authorization", "Bearer #{token}")
{:ok, conn: conn}
end
describe "index" do
@@ -92,6 +99,11 @@ defmodule LinkShortenerWeb.Api.V1.LinkControllerTest do
end
end
defp create_user_token() do
token = user_token_fixture()
%{token: token}
end
defp create_link(_) do
link = link_fixture()
%{link: link}
+10
View File
@@ -0,0 +1,10 @@
defmodule LinkShortener.Factories.UserFactory do
use ExMachina
def user_factory do
%{
email: sequence(:email, &"user-#{&1}@mail.com"),
password: "some password"
}
end
end
+2 -4
View File
@@ -7,6 +7,7 @@ defmodule LinkShortener.AccountsFixtures do
alias LinkShortener.Accounts
alias LinkShortener.Accounts.User
alias LinkShortenerWeb.Auth.Guardian
alias LinkShortener.Factories.UserFactory
@doc """
Generate a unique user email.
@@ -31,10 +32,7 @@ defmodule LinkShortener.AccountsFixtures do
end
def user_token_fixture(attrs \\ %{}) do
user_params = %{
email: "user@mail.com",
password: "some password"
}
user_params = UserFactory.user_factory()
{:ok, %User{} = user} = Accounts.register_user(user_params)
{:ok, token, _claims} = Guardian.encode_and_sign(user)