Update the API Authentication.
continuous-integration/drone/push Build is passing

This commit is contained in:
2024-08-24 16:18:11 +03:00
parent 32ea2c4ff8
commit 8697be9f17
12 changed files with 196 additions and 1 deletions
@@ -0,0 +1,71 @@
defmodule LinkShortenerWeb.Api.V1.AccountsControllerTest do
use LinkShortenerWeb.ConnCase
import LinkShortener.AccountsFixtures
alias LinkShortener.Accounts.User
@create_attrs %{
email: "user@mail.com",
password: "some password"
}
@update_attrs %{
email: "some updated email",
password: "some updated password"
}
@invalid_password_attrs %{
email: "user@mail.com",
password: ""
}
@invalid_attrs %{
email: nil,
encrypted_password: nil
}
setup %{conn: conn} do
{:ok, conn: put_req_header(conn, "accept", "application/json")}
end
describe "create user with sign up" do
test "renders user when data is valid", %{conn: conn} do
conn = post(conn, ~p"/api/v1/users/sign_up", user: @create_attrs)
assert %{
"email" => "user@mail.com",
"token" => token
} = json_response(conn, 201)
end
test "renders errors when data is invalid", %{conn: conn} do
conn = post(conn, ~p"/api/v1/users/sign_up", user: @invalid_attrs)
assert json_response(conn, 422)["errors"] != %{}
end
end
describe "user sign in" do
setup [:create_user]
test "renders user when data is valid", %{conn: conn} do
conn = post(conn, ~p"/api/v1/users/sign_in", @create_attrs)
assert %{
"email" => email,
"token" => token,
} = json_response(conn, 201)
end
test "renders errors when data is invalid", %{conn: conn} do
conn = post(conn, ~p"/api/v1/users/sign_in", @invalid_password_attrs)
assert %{
"errors" => %{"detail" => "Unauthorized"}
} = json_response(conn, 401)
end
end
defp create_user(_) do
user = user_fixture(@create_attrs)
%{user: user}
end
end
@@ -4,6 +4,13 @@ defmodule LinkShortener.AccountsFixtures do
entities via the `LinkShortener.Accounts` context.
"""
alias LinkShortener.Accounts
alias LinkShortener.Accounts.User
alias LinkShortenerWeb.Auth.Guardian
@doc """
Generate a unique user email.
"""
def unique_user_email, do: "user#{System.unique_integer()}@example.com"
def valid_user_password, do: "hello world!"
@@ -23,6 +30,18 @@ defmodule LinkShortener.AccountsFixtures do
user
end
def user_token_fixture(attrs \\ %{}) do
user_params = %{
email: "user@mail.com",
password: "some password"
}
{:ok, %User{} = user} = Accounts.register_user(user_params)
{:ok, token, _claims} = Guardian.encode_and_sign(user)
token
end
def extract_user_token(fun) do
{:ok, captured_email} = fun.(&"[TOKEN]#{&1}[TOKEN]")
[_, token | _] = String.split(captured_email.text_body, "[TOKEN]")