Current section
Files
Jump to
Current section
Files
test/pkce_test.exs
defmodule PkceTest do
use ExUnit.Case
alias ClientTestHelper
alias KindeClientSDK
alias Plug.Conn
import Mock
@domain Application.compile_env(:kinde_sdk, :domain) |> String.replace("\"", "")
@grant_type :authorization_code_flow_pkce
setup_all do
conn = Plug.Test.conn(:get, "/") |> Plug.Test.init_test_session(%{})
{conn, client} = ClientTestHelper.initialize_valid_client(conn, @grant_type)
{:ok, conn: conn, client: client}
end
test "initialize the client", %{conn: conn, client: client} do
assert client.token_endpoint == @domain <> "/oauth2/token"
refute is_nil(Conn.get_session(conn, :kinde_cache_pid))
end
test "login", %{conn: conn, client: client} do
KindeClientSDK.save_kinde_client(conn, client)
conn = KindeClientSDK.login(conn, client)
refute Enum.empty?(Conn.get_resp_header(conn, "location"))
end
test "login with audience", %{conn: conn, client: _} do
additional_params = %{
audience: @domain <> "/api"
}
{conn, client} =
ClientTestHelper.initialize_valid_client_add_params(conn, @grant_type, additional_params)
KindeClientSDK.save_kinde_client(conn, client)
conn = KindeClientSDK.login(conn, client)
refute Enum.empty?(Conn.get_resp_header(conn, "location"))
end
test "login with additional", %{conn: conn, client: _} do
additional_params = %{
audience: @domain <> "/api"
}
{conn, client} =
ClientTestHelper.initialize_valid_client_add_params(conn, @grant_type, additional_params)
KindeClientSDK.save_kinde_client(conn, client)
additional_params_more = %{
org_code: "org_123",
org_name: "My Application"
}
conn = KindeClientSDK.login(conn, client, additional_params_more)
refute Enum.empty?(Conn.get_resp_header(conn, "location"))
end
test "register with additional", %{conn: conn, client: _} do
additional_params = %{
audience: @domain <> "/api"
}
{conn, client} =
ClientTestHelper.initialize_valid_client_add_params(conn, @grant_type, additional_params)
KindeClientSDK.save_kinde_client(conn, client)
additional_params_more = %{
org_code: "org_123",
org_name: "My Application"
}
conn = KindeClientSDK.register(conn, client, additional_params_more)
refute Enum.empty?(Conn.get_resp_header(conn, "location"))
end
test "create org", %{conn: conn, client: _} do
additional_params = %{
audience: @domain <> "/api"
}
{conn, client} =
ClientTestHelper.initialize_valid_client_add_params(conn, @grant_type, additional_params)
KindeClientSDK.save_kinde_client(conn, client)
conn = KindeClientSDK.create_org(conn, client)
refute Enum.empty?(Conn.get_resp_header(conn, "location"))
end
test "create org with additional", %{conn: conn, client: _} do
additional_params = %{
audience: @domain <> "/api"
}
{conn, client} =
ClientTestHelper.initialize_valid_client_add_params(conn, @grant_type, additional_params)
KindeClientSDK.save_kinde_client(conn, client)
additional_params_more = %{
org_code: "org_123",
org_name: "My Application"
}
conn = KindeClientSDK.create_org(conn, client, additional_params_more)
refute Enum.empty?(Conn.get_resp_header(conn, "location"))
end
test "valid pkce login", %{conn: conn} do
{conn, client} = ClientTestHelper.init_valid_pkce_client(conn, :authorization_code_flow_pkce)
conn = ClientTestHelper.mock_pkce_token(conn, client.cache_pid)
assert Map.get(KindeClientSDK.get_all_data(conn), :access_token) != nil
assert Map.get(KindeClientSDK.get_all_data(conn), :expires_in) != nil
assert Map.get(KindeClientSDK.get_all_data(conn), :id_token) != nil
assert Map.get(KindeClientSDK.get_all_data(conn), :refresh_token) != nil
end
test "returns old token if not expired", %{conn: conn} do
{conn, client} = ClientTestHelper.init_valid_pkce_client(conn, :authorization_code_flow_pkce)
conn = ClientTestHelper.mock_pkce_token(conn, client.cache_pid)
old_refresh_token = Map.get(KindeClientSDK.get_all_data(conn), :refresh_token)
old_access_token = Map.get(KindeClientSDK.get_all_data(conn), :access_token)
:timer.sleep(30)
conn =
with_mock KindeClientSDK,
get_token: fn _ ->
ClientTestHelper.mock_pkce_token(conn, client.cache_pid)
end do
KindeClientSDK.get_token(conn)
end
new_refresh_token = Map.get(KindeClientSDK.get_all_data(conn), :refresh_token)
new_access_token = Map.get(KindeClientSDK.get_all_data(conn), :access_token)
assert old_refresh_token == new_refresh_token
assert old_access_token == new_access_token
end
test "use of refresh token to get new access-token", %{conn: conn} do
{conn, client} = ClientTestHelper.init_valid_pkce_client(conn, :authorization_code_flow_pkce)
conn = ClientTestHelper.mock_pkce_token(conn, client.cache_pid)
old_refresh_token = Map.get(KindeClientSDK.get_all_data(conn), :refresh_token)
old_access_token = Map.get(KindeClientSDK.get_all_data(conn), :access_token)
:timer.sleep(70)
conn =
with_mock KindeClientSDK,
get_token: fn _ ->
ClientTestHelper.mock_result_for_refresh_token(conn, client.cache_pid)
end do
KindeClientSDK.get_token(conn)
end
new_refresh_token = Map.get(KindeClientSDK.get_all_data(conn), :refresh_token)
new_access_token = Map.get(KindeClientSDK.get_all_data(conn), :access_token)
assert old_refresh_token != new_refresh_token
assert old_access_token != new_access_token
end
end