defmodule HostasWeb.Auth.TokenControllerTest do use HostasWeb.ConnCase # For testing with Ecto alias Hostas.Repo alias Hostas.Denizen @denizen_data %{handle: "testuser", name: "Test User", password: "password"} defp create_denizen, do: Repo.insert!(Denizen.changeset(%Denizen{}, @denizen_data)) describe "token create" do test "creates a token", %{conn: conn} do create_denizen() conn = post(conn, ~p"/hostapi/auth/token", %{handle: "testuser", password: "password"}) assert Map.has_key?(json_response(conn, 201), "token") assert Map.has_key?(json_response(conn, 201), "expires") end test "fails due to password mismatch", %{conn: conn} do create_denizen() conn = post(conn, ~p"/hostapi/auth/token", %{handle: "testuser", password: "incorrect"}) assert json_response(conn, 401)["error"] == "Password mismatch" end test "fails due to non-existant denizen", %{conn: conn} do conn = post(conn, ~p"/hostapi/auth/token", %{handle: "testuser", password: "password"}) assert json_response(conn, 404)["error"] == "No user with handle testuser" end test "fails due to missing fields", %{conn: conn} do conn = post(conn, ~p"/hostapi/auth/token", %{password: "password"}) assert json_response(conn, 422)["error"] == "Missing required parameters" end end end