add identities

This commit is contained in:
Inhji 2023-03-09 21:42:54 +01:00
parent 839546e22c
commit 360e6fac2b
13 changed files with 488 additions and 0 deletions

104
lib/chiya/identities.ex Normal file
View file

@ -0,0 +1,104 @@
defmodule Chiya.Identities do
@moduledoc """
The Identities context.
"""
import Ecto.Query, warn: false
alias Chiya.Repo
alias Chiya.Identities.Identity
@doc """
Returns the list of identities.
## Examples
iex> list_identities()
[%Identity{}, ...]
"""
def list_identities do
Repo.all(Identity)
end
@doc """
Gets a single identity.
Raises `Ecto.NoResultsError` if the Identity does not exist.
## Examples
iex> get_identity!(123)
%Identity{}
iex> get_identity!(456)
** (Ecto.NoResultsError)
"""
def get_identity!(id), do: Repo.get!(Identity, id)
@doc """
Creates a identity.
## Examples
iex> create_identity(%{field: value})
{:ok, %Identity{}}
iex> create_identity(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_identity(attrs \\ %{}) do
%Identity{}
|> Identity.changeset(attrs)
|> Repo.insert()
end
@doc """
Updates a identity.
## Examples
iex> update_identity(identity, %{field: new_value})
{:ok, %Identity{}}
iex> update_identity(identity, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def update_identity(%Identity{} = identity, attrs) do
identity
|> Identity.changeset(attrs)
|> Repo.update()
end
@doc """
Deletes a identity.
## Examples
iex> delete_identity(identity)
{:ok, %Identity{}}
iex> delete_identity(identity)
{:error, %Ecto.Changeset{}}
"""
def delete_identity(%Identity{} = identity) do
Repo.delete(identity)
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking identity changes.
## Examples
iex> change_identity(identity)
%Ecto.Changeset{data: %Identity{}}
"""
def change_identity(%Identity{} = identity, attrs \\ %{}) do
Identity.changeset(identity, attrs)
end
end

View file

@ -0,0 +1,22 @@
defmodule Chiya.Identities.Identity do
use Ecto.Schema
import Ecto.Changeset
schema "identities" do
field :active, :boolean, default: false
field :name, :string
field :public, :boolean, default: false
field :rel, :string
field :url, :string
field :icon, :string
timestamps()
end
@doc false
def changeset(identity, attrs) do
identity
|> cast(attrs, [:name, :rel, :url, :public, :active, :icon])
|> validate_required([:name, :rel, :url, :public, :active, :icon])
end
end

View file

@ -0,0 +1,62 @@
defmodule ChiyaWeb.IdentityController do
use ChiyaWeb, :controller
alias Chiya.Identities
alias Chiya.Identities.Identity
def index(conn, _params) do
identities = Identities.list_identities()
render(conn, :index, identities: identities)
end
def new(conn, _params) do
changeset = Identities.change_identity(%Identity{})
render(conn, :new, changeset: changeset)
end
def create(conn, %{"identity" => identity_params}) do
case Identities.create_identity(identity_params) do
{:ok, identity} ->
conn
|> put_flash(:info, "Identity created successfully.")
|> redirect(to: ~p"/admin/identities/#{identity}")
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, :new, changeset: changeset)
end
end
def show(conn, %{"id" => id}) do
identity = Identities.get_identity!(id)
render(conn, :show, identity: identity)
end
def edit(conn, %{"id" => id}) do
identity = Identities.get_identity!(id)
changeset = Identities.change_identity(identity)
render(conn, :edit, identity: identity, changeset: changeset)
end
def update(conn, %{"id" => id, "identity" => identity_params}) do
identity = Identities.get_identity!(id)
case Identities.update_identity(identity, identity_params) do
{:ok, identity} ->
conn
|> put_flash(:info, "Identity updated successfully.")
|> redirect(to: ~p"/admin/identities/#{identity}")
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, :edit, identity: identity, changeset: changeset)
end
end
def delete(conn, %{"id" => id}) do
identity = Identities.get_identity!(id)
{:ok, _identity} = Identities.delete_identity(identity)
conn
|> put_flash(:info, "Identity deleted successfully.")
|> redirect(to: ~p"/admin/identities")
end
end

View file

@ -0,0 +1,13 @@
defmodule ChiyaWeb.IdentityHTML do
use ChiyaWeb, :html
embed_templates "identity_html/*"
@doc """
Renders a identity form.
"""
attr :changeset, Ecto.Changeset, required: true
attr :action, :string, required: true
def identity_form(assigns)
end

View file

@ -0,0 +1,8 @@
<.header>
Edit Identity <%= @identity.id %>
<:subtitle>Use this form to manage identity records in your database.</:subtitle>
</.header>
<.identity_form changeset={@changeset} action={~p"/admin/identities/#{@identity}"} />
<.back navigate={~p"/admin/identities"}>Back to identities</.back>

View file

@ -0,0 +1,14 @@
<.simple_form :let={f} for={@changeset} action={@action}>
<.error :if={@changeset.action}>
Oops, something went wrong! Please check the errors below.
</.error>
<.input field={f[:name]} type="text" label="Name" />
<.input field={f[:rel]} type="text" label="Rel" />
<.input field={f[:url]} type="text" label="Url" />
<.input field={f[:public]} type="checkbox" label="Public" />
<.input field={f[:active]} type="checkbox" label="Active" />
<.input field={f[:icon]} type="checkbox" label="Icon" />
<:actions>
<.button>Save Identity</.button>
</:actions>
</.simple_form>

View file

@ -0,0 +1,27 @@
<.header>
Listing Identities
<:actions>
<.link href={~p"/admin/identities/new"}>
<.button>New Identity</.button>
</.link>
</:actions>
</.header>
<.table id="identities" rows={@identities} row_click={&JS.navigate(~p"/admin/identities/#{&1}")}>
<:col :let={identity} label="Name"><%= identity.name %></:col>
<:col :let={identity} label="Rel"><%= identity.rel %></:col>
<:col :let={identity} label="Url"><%= identity.url %></:col>
<:col :let={identity} label="Public"><%= identity.public %></:col>
<:col :let={identity} label="Active"><%= identity.active %></:col>
<:action :let={identity}>
<div class="sr-only">
<.link navigate={~p"/admin/identities/#{identity}"}>Show</.link>
</div>
<.link navigate={~p"/admin/identities/#{identity}/edit"}>Edit</.link>
</:action>
<:action :let={identity}>
<.link href={~p"/admin/identities/#{identity}"} method="delete" data-confirm="Are you sure?">
Delete
</.link>
</:action>
</.table>

View file

@ -0,0 +1,8 @@
<.header>
New Identity
<:subtitle>Use this form to manage identity records in your database.</:subtitle>
</.header>
<.identity_form changeset={@changeset} action={~p"/admin/identities"} />
<.back navigate={~p"/admin/identities"}>Back to identities</.back>

View file

@ -0,0 +1,20 @@
<.header>
Identity <%= @identity.id %>
<:subtitle>This is a identity record from your database.</:subtitle>
<:actions>
<.link href={~p"/admin/identities/#{@identity}/edit"}>
<.button>Edit identity</.button>
</.link>
</:actions>
</.header>
<.list>
<:item title="Name"><%= @identity.name %></:item>
<:item title="Rel"><%= @identity.rel %></:item>
<:item title="Url"><%= @identity.url %></:item>
<:item title="Public"><%= @identity.public %></:item>
<:item title="Active"><%= @identity.active %></:item>
<:item title="Icon"><%= @identity.icon %></:item>
</.list>
<.back navigate={~p"/admin/identities"}>Back to identities</.back>

View file

@ -0,0 +1,16 @@
defmodule Chiya.Repo.Migrations.CreateIdentities do
use Ecto.Migration
def change do
create table(:identities) do
add :name, :string
add :rel, :string
add :url, :string
add :public, :boolean, default: false, null: false
add :active, :boolean, default: false, null: false
add :icon, :string
timestamps()
end
end
end

View file

@ -0,0 +1,80 @@
defmodule Chiya.IdentitiesTest do
use Chiya.DataCase
alias Chiya.Identities
describe "identities" do
alias Chiya.Identities.Identity
import Chiya.IdentitiesFixtures
@invalid_attrs %{active: nil, name: nil, public: nil, rel: nil, url: nil}
test "list_identities/0 returns all identities" do
identity = identity_fixture()
assert Identities.list_identities() == [identity]
end
test "get_identity!/1 returns the identity with given id" do
identity = identity_fixture()
assert Identities.get_identity!(identity.id) == identity
end
test "create_identity/1 with valid data creates a identity" do
valid_attrs = %{
active: true,
name: "some name",
public: true,
rel: "some rel",
url: "some url"
}
assert {:ok, %Identity{} = identity} = Identities.create_identity(valid_attrs)
assert identity.active == true
assert identity.name == "some name"
assert identity.public == true
assert identity.rel == "some rel"
assert identity.url == "some url"
end
test "create_identity/1 with invalid data returns error changeset" do
assert {:error, %Ecto.Changeset{}} = Identities.create_identity(@invalid_attrs)
end
test "update_identity/2 with valid data updates the identity" do
identity = identity_fixture()
update_attrs = %{
active: false,
name: "some updated name",
public: false,
rel: "some updated rel",
url: "some updated url"
}
assert {:ok, %Identity{} = identity} = Identities.update_identity(identity, update_attrs)
assert identity.active == false
assert identity.name == "some updated name"
assert identity.public == false
assert identity.rel == "some updated rel"
assert identity.url == "some updated url"
end
test "update_identity/2 with invalid data returns error changeset" do
identity = identity_fixture()
assert {:error, %Ecto.Changeset{}} = Identities.update_identity(identity, @invalid_attrs)
assert identity == Identities.get_identity!(identity.id)
end
test "delete_identity/1 deletes the identity" do
identity = identity_fixture()
assert {:ok, %Identity{}} = Identities.delete_identity(identity)
assert_raise Ecto.NoResultsError, fn -> Identities.get_identity!(identity.id) end
end
test "change_identity/1 returns a identity changeset" do
identity = identity_fixture()
assert %Ecto.Changeset{} = Identities.change_identity(identity)
end
end
end

View file

@ -0,0 +1,90 @@
defmodule ChiyaWeb.IdentityControllerTest do
use ChiyaWeb.ConnCase
import Chiya.IdentitiesFixtures
@create_attrs %{active: true, name: "some name", public: true, rel: "some rel", url: "some url"}
@update_attrs %{
active: false,
name: "some updated name",
public: false,
rel: "some updated rel",
url: "some updated url"
}
@invalid_attrs %{active: nil, name: nil, public: nil, rel: nil, url: nil}
describe "index" do
test "lists all identities", %{conn: conn} do
conn = get(conn, ~p"/admin/identities")
assert html_response(conn, 200) =~ "Listing Identities"
end
end
describe "new identity" do
test "renders form", %{conn: conn} do
conn = get(conn, ~p"/admin/identities/new")
assert html_response(conn, 200) =~ "New Identity"
end
end
describe "create identity" do
test "redirects to show when data is valid", %{conn: conn} do
conn = post(conn, ~p"/admin/identities", identity: @create_attrs)
assert %{id: id} = redirected_params(conn)
assert redirected_to(conn) == ~p"/admin/identities/#{id}"
conn = get(conn, ~p"/admin/identities/#{id}")
assert html_response(conn, 200) =~ "Identity #{id}"
end
test "renders errors when data is invalid", %{conn: conn} do
conn = post(conn, ~p"/admin/identities", identity: @invalid_attrs)
assert html_response(conn, 200) =~ "New Identity"
end
end
describe "edit identity" do
setup [:create_identity]
test "renders form for editing chosen identity", %{conn: conn, identity: identity} do
conn = get(conn, ~p"/admin/identities/#{identity}/edit")
assert html_response(conn, 200) =~ "Edit Identity"
end
end
describe "update identity" do
setup [:create_identity]
test "redirects when data is valid", %{conn: conn, identity: identity} do
conn = put(conn, ~p"/admin/identities/#{identity}", identity: @update_attrs)
assert redirected_to(conn) == ~p"/admin/identities/#{identity}"
conn = get(conn, ~p"/admin/identities/#{identity}")
assert html_response(conn, 200) =~ "some updated name"
end
test "renders errors when data is invalid", %{conn: conn, identity: identity} do
conn = put(conn, ~p"/admin/identities/#{identity}", identity: @invalid_attrs)
assert html_response(conn, 200) =~ "Edit Identity"
end
end
describe "delete identity" do
setup [:create_identity]
test "deletes chosen identity", %{conn: conn, identity: identity} do
conn = delete(conn, ~p"/admin/identities/#{identity}")
assert redirected_to(conn) == ~p"/admin/identities"
assert_error_sent 404, fn ->
get(conn, ~p"/admin/identities/#{identity}")
end
end
end
defp create_identity(_) do
identity = identity_fixture()
%{identity: identity}
end
end

View file

@ -0,0 +1,24 @@
defmodule Chiya.IdentitiesFixtures do
@moduledoc """
This module defines test helpers for creating
entities via the `Chiya.Identities` context.
"""
@doc """
Generate a identity.
"""
def identity_fixture(attrs \\ %{}) do
{:ok, identity} =
attrs
|> Enum.into(%{
active: true,
name: "some name",
public: true,
rel: "some rel",
url: "some url"
})
|> Chiya.Identities.create_identity()
identity
end
end