From 88a8eba322827796415af8110a5fca06cd765cd2 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Fri, 16 May 2025 13:10:25 +0300 Subject: [PATCH] Update to refactor tests which check permission for LiveViews. --- .../live/live_views_permission.exs | 351 ++++++++++-------- 1 file changed, 190 insertions(+), 161 deletions(-) diff --git a/test/decentralised_book_index_web/live/live_views_permission.exs b/test/decentralised_book_index_web/live/live_views_permission.exs index e11d573..81cdbda 100644 --- a/test/decentralised_book_index_web/live/live_views_permission.exs +++ b/test/decentralised_book_index_web/live/live_views_permission.exs @@ -15,31 +15,15 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do 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") + test "can be accessed by any user", %{conn: conn, users: users} do + for user <- users do + {:ok, _view, html} = + conn + |> log_in_user(user) + |> live("/books") - assert html =~ "Listing Books" + assert html =~ "Listing Books" + end end end @@ -64,13 +48,18 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do test "can't be accessed by regular user", %{conn: conn, user: user} do for user <- [nil, user] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/books/new") + + conn + |> log_in_user(user) + |> live("/books/new") end end - test "can be accessed by moderator and admin", %{conn: conn, moderator: moderator, admin: admin} do + test "can be accessed by moderator and admin", %{ + conn: conn, + moderator: moderator, + admin: admin + } do for user <- [moderator, admin] do {:ok, _view, html} = conn @@ -90,13 +79,19 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do test "can't be accessed by regular user", %{conn: conn, user: user, book: book} do for user <- [nil, user] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/books/#{book.id}/edit") + + conn + |> log_in_user(user) + |> live("/books/#{book.id}/edit") end end - test "can be accessed by moderator and admin", %{conn: conn, moderator: moderator, admin: admin, book: book} do + test "can be accessed by moderator and admin", %{ + conn: conn, + moderator: moderator, + admin: admin, + book: book + } do for user <- [moderator, admin] do {:ok, _view, html} = conn @@ -109,31 +104,15 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do end describe "Author Index /authors" 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") + test "can be accessed by any user", %{conn: conn, users: users} do + for user <- users do + {:ok, _view, html} = + conn + |> log_in_user(user) + |> live("/authors") - assert html =~ "Listing Authors" + assert html =~ "Listing Authors" + end end end @@ -158,13 +137,18 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do test "can't be accessed by regular user", %{conn: conn, user: user} do for user <- [nil, user] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/authors/new") + + conn + |> log_in_user(user) + |> live("/authors/new") end end - test "can be accessed by moderator and admin", %{conn: conn, moderator: moderator, admin: admin} do + test "can be accessed by moderator and admin", %{ + conn: conn, + moderator: moderator, + admin: admin + } do for user <- [moderator, admin] do {:ok, _view, html} = conn @@ -184,13 +168,19 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do test "can't be accessed by regular user", %{conn: conn, user: user, author: author} do for user <- [nil, user] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/authors/#{author.id}/edit") + + conn + |> log_in_user(user) + |> live("/authors/#{author.id}/edit") end end - test "can be accessed by moderator and admin", %{conn: conn, moderator: moderator, admin: admin, author: author} do + test "can be accessed by moderator and admin", %{ + conn: conn, + moderator: moderator, + admin: admin, + author: author + } do for user <- [moderator, admin] do {:ok, _view, html} = conn @@ -204,28 +194,27 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do 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" + for user <- [nil, user] do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(user) + |> live("/publishers") + end end - test "can be accessed by admin", %{conn: conn, admin: admin} do - assert {:ok, _view, html} = - conn - |> log_in_user(admin) - |> live("/publishers") + test "can be accessed by moderator and admin", %{ + conn: conn, + moderator: moderator, + admin: admin + } do + for user <- [moderator, admin] do + assert {:ok, _view, html} = + conn + |> log_in_user(moderator) + |> live("/publishers") - assert html =~ "Listing Publishers" + assert html =~ "Listing Publishers" + end end end @@ -237,13 +226,19 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do test "can't be accessed by regular user", %{conn: conn, user: user, publisher: publisher} do for user <- [nil, user] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/publishers/#{publisher.id}") + + conn + |> log_in_user(user) + |> live("/publishers/#{publisher.id}") end end - test "can be accessed by moderator and admin", %{conn: conn, moderator: moderator, admin: admin, publisher: publisher} do + test "can be accessed by moderator and admin", %{ + conn: conn, + moderator: moderator, + admin: admin, + publisher: publisher + } do for user <- [moderator, admin] do {:ok, _view, html} = conn @@ -259,13 +254,18 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do test "can't be accessed by regular user", %{conn: conn, user: user} do for user <- [nil, user] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/publishers/new") + + conn + |> log_in_user(user) + |> live("/publishers/new") end end - test "can be accessed by moderator and admin", %{conn: conn, moderator: moderator, admin: admin} do + test "can be accessed by moderator and admin", %{ + conn: conn, + moderator: moderator, + admin: admin + } do for user <- [moderator, admin] do {:ok, _view, html} = conn @@ -285,13 +285,19 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do test "can't be accessed by regular user", %{conn: conn, user: user, publisher: publisher} do for user <- [nil, user] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/publishers/#{publisher.id}/edit") + + conn + |> log_in_user(user) + |> live("/publishers/#{publisher.id}/edit") end end - test "can be accessed by moderator and admin", %{conn: conn, moderator: moderator, admin: admin, publisher: publisher} do + test "can be accessed by moderator and admin", %{ + conn: conn, + moderator: moderator, + admin: admin, + publisher: publisher + } do for user <- [moderator, admin] do {:ok, _view, html} = conn @@ -304,27 +310,28 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do 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") + test "can't be accessed by regular user and moderator", %{ + conn: conn, + user: user, + moderator: moderator + } do + for user <- [nil, user, moderator] do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(user) + |> live("/servers") + end end test "can be accessed by admin", %{conn: conn, admin: admin} do - assert {:ok, _view, html} = - conn - |> log_in_user(admin) - |> live("/servers") + for user <- [admin] do + assert {:ok, _view, html} = + conn + |> log_in_user(admin) + |> live("/servers") - assert html =~ "Listing Servers" + assert html =~ "Listing Servers" + end end end @@ -333,12 +340,18 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do %{server: generate(dbi_server())} end - test "can't be accessed by non-admin user", %{conn: conn, user: user, moderator: moderator, server: server} do + test "can't be accessed by non-admin user", %{ + conn: conn, + user: user, + moderator: moderator, + server: server + } do for user <- [nil, user, moderator] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/servers/#{server.id}") + + conn + |> log_in_user(user) + |> live("/servers/#{server.id}") end end @@ -358,9 +371,10 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do test "can't be accessed by non-admin user", %{conn: conn, user: user, moderator: moderator} do for user <- [nil, user, moderator] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/servers/new") + + conn + |> log_in_user(user) + |> live("/servers/new") end end @@ -381,12 +395,18 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do %{server: generate(dbi_server())} end - test "can't be accessed by non-admin user", %{conn: conn, user: user, moderator: moderator, server: server} do + test "can't be accessed by non-admin user", %{ + conn: conn, + user: user, + moderator: moderator, + server: server + } do for user <- [nil, user, moderator] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/servers/#{server.id}/edit") + + conn + |> log_in_user(user) + |> live("/servers/#{server.id}/edit") end end @@ -403,53 +423,58 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do 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") + test "can't be accessed by regular user and moderator", %{ + conn: conn, + user: user, + moderator: moderator + } do + for user <- [nil, user, moderator] do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(user) + |> live("/oban") + end 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") + test "can't be accessed by regular user and moderator", %{ + conn: conn, + user: user, + moderator: moderator + } do + for user <- [nil, user, moderator] do + assert {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} = + conn + |> log_in_user(user) + |> live("/users") + end end test "can be accessed by admin", %{conn: conn, admin: admin} do - assert {:ok, _view, html} = - conn - |> log_in_user(admin) - |> live("/users") + for user <- [admin] do + assert {:ok, _view, html} = + conn + |> log_in_user(admin) + |> live("/users") - assert html =~ "Listing Users" + assert html =~ "Listing Users" + end end end describe "User Show /users/:id" do - test "can't be accessed by non-admin user", %{conn: conn, user: regular_user, moderator: moderator} do + test "can't be accessed by non-admin user", %{ + conn: conn, + user: regular_user, + moderator: moderator + } do for user <- [nil, regular_user, moderator] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/users/#{regular_user.id}") + + conn + |> log_in_user(user) + |> live("/users/#{regular_user.id}") end end @@ -466,12 +491,17 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do end describe "User Edit /users/:id/edit" do - test "can't be accessed by non-admin user", %{conn: conn, user: regular_user, moderator: moderator} do + test "can't be accessed by non-admin user", %{ + conn: conn, + user: regular_user, + moderator: moderator + } do for user <- [nil, regular_user, moderator] do {:error, {:redirect, %{flash: %{"error" => "Unauthorized!"}, to: "/"}}} - conn - |> log_in_user(user) - |> live("/users/#{regular_user.id}/edit") + + conn + |> log_in_user(user) + |> live("/users/#{regular_user.id}/edit") end end @@ -486,5 +516,4 @@ defmodule DecentralisedBookIndexWeb.LiveViewsPermissions do end end end - end