livebook/test/livebook_web/live/hub/new_live_test.exs
2023-05-26 15:40:45 -03:00

135 lines
4.5 KiB
Elixir

defmodule LivebookWeb.Hub.NewLiveTest do
use Livebook.TeamsIntegrationCase, async: true
alias Livebook.Teams.Org
import Phoenix.LiveViewTest
test "render hub selection cards", %{conn: conn} do
{:ok, view, _html} = live(conn, ~p"/hub")
# shows the new options
assert has_element?(view, "#new-org")
assert has_element?(view, "#join-org")
end
describe "new-org" do
test "persist a new hub", %{conn: conn, node: node, user: user} do
name = "new-org-test"
{:ok, view, _html} = live(conn, ~p"/hub")
# select the new org option
view
|> element("#new-org")
|> render_click()
# builds the form data
attrs = %{"org" => %{"name" => name, "emoji" => "🐈"}}
# finds the form and change data
form = element(view, "#new-org-form")
render_change(form, attrs)
# submits the form
render_submit(form, attrs)
# gets the org request by name
org_request = :erpc.call(node, Hub.Integration, :get_org_request_by!, [[name: name]])
# check if the form has the url to confirm
link_element = element(view, "#new-org-form a")
assert render(link_element) =~ "/org-request/#{org_request.id}/confirm"
# force org request confirmation
:erpc.call(node, Hub.Integration, :confirm_org_request, [org_request, user])
# wait for the c:handle_info/2 cycle
# check if the page redirected to edit hub page
# and check the flash message
%{"success" => "Hub added successfully"} =
assert_redirect(view, "/hub/team-#{name}?show-key=true", check_completion_data_interval())
# access the page and shows the teams key modal
{:ok, view, _html} = live(conn, "/hub/team-#{name}?show-key=true")
assert has_element?(view, "#show-key-modal")
# access the page when closes the modal
assert {:ok, view, _html} = live(conn, "/hub/team-#{name}")
refute has_element?(view, "#show-key-modal")
# checks if the hub is in the sidebar
assert_hub(view, "/hub/team-#{name}", name)
end
end
describe "join-org" do
test "persist a new hub", %{conn: conn, node: node, user: user} do
name = "join-org-test"
teams_key = Livebook.Teams.Org.teams_key()
key_hash = Org.key_hash(build(:org, teams_key: teams_key))
{:ok, view, _html} = live(conn, ~p"/hub")
# previously create the org and associate user with org
org = :erpc.call(node, Hub.Integration, :create_org, [[name: name]])
:erpc.call(node, Hub.Integration, :create_org_key, [[org: org, key_hash: key_hash]])
:erpc.call(node, Hub.Integration, :create_user_org, [[org: org, user: user]])
# select the new org option
view
|> element("#join-org")
|> render_click()
# builds the form data
attrs = %{"org" => %{"name" => name, "teams_key" => teams_key, "emoji" => "🐈"}}
# finds the form and change data
form = element(view, "#join-org-form")
render_change(form, attrs)
# submits the form
render_submit(form, attrs)
# gets the org request by name and key hash
org_request =
:erpc.call(node, Hub.Integration, :get_org_request_by!, [
[name: name, key_hash: key_hash]
])
# check if the form has the url to confirm
link_element = element(view, "#join-org-form a")
assert render(link_element) =~ "/org-request/#{org_request.id}/confirm"
# force org request confirmation
:erpc.call(node, Hub.Integration, :confirm_org_request, [org_request, user])
# wait for the c:handle_info/2 cycle
# check if the page redirected to edit hub page
# and check the flash message
%{"success" => "Hub added successfully"} =
assert_redirect(view, "/hub/team-#{name}?show-key=true", check_completion_data_interval())
# access the page and shows the teams key modal
{:ok, view, _html} = live(conn, "/hub/team-#{name}?show-key=true")
assert has_element?(view, "#show-key-modal")
# access the page when closes the modal
assert {:ok, view, _html} = live(conn, "/hub/team-#{name}")
refute has_element?(view, "#show-key-modal")
# checks if the hub is in the sidebar
assert_hub(view, "/hub/team-#{name}", name)
end
end
defp check_completion_data_interval(), do: 2000
defp assert_hub(view, path, name, emoji \\ "🐈") do
hubs_html = view |> element("#hubs") |> render()
assert hubs_html =~ emoji
assert hubs_html =~ path
assert hubs_html =~ name
end
end