diff --git a/test/decentralised_book_index_web/live/live_views_permission.exs b/test/decentralised_book_index_web/live/live_views_permission.exs new file mode 100644 index 0000000..bb0bf71 --- /dev/null +++ b/test/decentralised_book_index_web/live/live_views_permission.exs @@ -0,0 +1,168 @@ +defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do + use DecentralisedBookIndexWeb.LiveCase, async: true + + alias DecentralisedBookIndex.Metadata + + setup do + user = generate(user(role: :user)) + moderator = generate(user(role: :moderator)) + admin = generate(user(role: :admin)) + + %{ + user: user, + moderator: moderator, + admin: admin + } + end + + describe "Book Index /books" do + test "can be accessed by regular user", %{conn: conn, user: user} do + {:ok, _view, html} = + conn + |> log_in_user(user) + |> live("/books") + + assert html =~ "Listing Books" + end + + test "can be accessed by moderator", %{conn: conn, moderator: moderator} do + assert {:ok, _view, html} = + conn + |> log_in_user(moderator) + |> live("/books") + + assert html =~ "Listing Books" + end + + test "can be accessed by admin", %{conn: conn, admin: admin} do + assert {:ok, _view, html} = + conn + |> log_in_user(admin) + |> live("/books") + + assert html =~ "Listing Books" + end + end + + describe "Author Index /author" do + test "can be accessed by regular user", %{conn: conn, user: user} do + {:ok, _view, html} = + conn + |> log_in_user(user) + |> live("/authors") + + assert html =~ "Listing Authors" + end + + test "can be accessed by moderator", %{conn: conn, moderator: moderator} do + assert {:ok, _view, html} = + conn + |> log_in_user(moderator) + |> live("/authors") + + assert html =~ "Listing Authors" + end + + test "can be accessed by admin", %{conn: conn, admin: admin} do + assert {:ok, _view, html} = + conn + |> log_in_user(admin) + |> live("/authors") + + assert html =~ "Listing Authors" + end + end + + describe "Publisher Index /publishers" do + test "can't be accessed by regular user", %{conn: conn, user: user} do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(user) + |> live("/publishers") + end + + test "can be accessed by moderator", %{conn: conn, moderator: moderator} do + assert {:ok, _view, html} = + conn + |> log_in_user(moderator) + |> live("/publishers") + + assert html =~ "Listing Publishers" + end + + test "can be accessed by admin", %{conn: conn, admin: admin} do + assert {:ok, _view, html} = + conn + |> log_in_user(admin) + |> live("/publishers") + + assert html =~ "Listing Publishers" + end + end + + describe "Server Index /servers" do + test "can't be accessed by regular user", %{conn: conn, user: user} do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(user) + |> live("/servers") + end + + test "can't be accessed by moderator", %{conn: conn, moderator: moderator} do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(moderator) + |> live("/servers") + end + + test "can be accessed by admin", %{conn: conn, admin: admin} do + assert {:ok, _view, html} = + conn + |> log_in_user(admin) + |> live("/servers") + + assert html =~ "Listing Servers" + end + end + + describe "ObanWeb /oban" do + test "can't be accessed by regular user", %{conn: conn, user: user} do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(user) + |> live("/oban") + end + + test "can't be accessed by moderator", %{conn: conn, moderator: moderator} do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(moderator) + |> live("/oban") + end + end + + describe "User Index /users" do + test "can't be accessed by regular user", %{conn: conn, user: user} do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(user) + |> live("/users") + end + + test "can't be accessed by moderator", %{conn: conn, moderator: moderator} do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(moderator) + |> live("/users") + end + + test "can be accessed by admin", %{conn: conn, admin: admin} do + assert {:ok, _view, html} = + conn + |> log_in_user(admin) + |> live("/users") + + assert html =~ "Listing Users" + end + end +end