build(deps): bump floki from 0.37.1 to 0.38.0 in /elixir (#10585)

Bumps floki and updates calls to `Floki.find` and `Floki.attribute` to
use the new API.

Supersedes #9758
This commit is contained in:
Jamil
2025-10-16 08:09:50 -07:00
committed by GitHub
parent 6b3f2a32ce
commit e81b4dbdac
59 changed files with 279 additions and 114 deletions

View File

@@ -70,7 +70,7 @@ defmodule Web.MixProject do
{:logger_json, "~> 7.0"},
# Test deps
{:floki, "~> 0.37.0", only: :test},
{:floki, "~> 0.38.0", only: :test},
{:bypass, "~> 2.1", only: :test},
{:wallaby, "~> 0.30.0", only: :test},
{:credo, "~> 1.5", only: [:dev, :test], runtime: false},

View File

@@ -162,8 +162,13 @@ defmodule Web.ConnCase do
### Helpers to test LiveView forms
# Helper to parse HTML if it's a string, or return as-is if already parsed
defp parse_if_needed(html) when is_binary(html), do: Floki.parse_fragment!(html)
defp parse_if_needed(parsed), do: parsed
def find_inputs(html, selector) do
html
|> parse_if_needed()
|> Floki.find("#{selector} input,select,textarea")
|> Enum.flat_map(&Floki.attribute(&1, "name"))
|> Enum.uniq()
@@ -177,6 +182,7 @@ defmodule Web.ConnCase do
def form_validation_errors(html_or_form_element) do
html_or_form_element
|> ensure_rendered()
|> parse_if_needed()
|> Floki.find("[data-validation-error-for]")
|> Enum.map(fn html_element ->
[field] = Floki.attribute(html_element, "data-validation-error-for")
@@ -225,23 +231,28 @@ defmodule Web.ConnCase do
def vertical_table_to_map(table_html) do
table_html
|> parse_if_needed()
|> Floki.find("tbody tr")
|> Enum.map(fn row ->
key = Floki.find(row, "th") |> reject_tooltips() |> element_to_text() |> String.downcase()
value = Floki.find(row, "td") |> element_to_text()
key = row |> Floki.find("th") |> reject_tooltips() |> element_to_text() |> String.downcase()
value = row |> Floki.find("td") |> element_to_text()
{key, value}
end)
|> Enum.into(%{})
end
def table_columns(table_html) do
Floki.find(table_html, "thead tr th")
table_html
|> parse_if_needed()
|> Floki.find("thead tr th")
|> elements_to_text()
|> Enum.map(&String.downcase/1)
end
def table_rows(table_html) do
Floki.find(table_html, "tbody tr")
table_html
|> parse_if_needed()
|> Floki.find("tbody tr")
|> Enum.map(fn row ->
row
|> Floki.find("td")
@@ -287,6 +298,7 @@ defmodule Web.ConnCase do
def active_buttons(html) do
html
|> parse_if_needed()
|> Floki.find("main button")
|> Enum.filter(fn button ->
Floki.attribute(button, "disabled") != "disabled"

View File

@@ -281,6 +281,7 @@ defmodule Web.AuthTest do
assert response =~ "Sign in successful"
assert response
|> Floki.parse_fragment!()
|> Floki.attribute("meta", "content")
|> Enum.any?(fn value ->
&(&1 == "0; url=/#{account.slug}/sign_in/client_redirect")
@@ -311,6 +312,7 @@ defmodule Web.AuthTest do
assert response =~ "Sign in successful"
assert response
|> Floki.parse_fragment!()
|> Floki.attribute("meta", "content")
|> Enum.any?(fn value ->
&(&1 == "0; url=/#{account.slug}/sign_in/client_redirect")
@@ -794,6 +796,7 @@ defmodule Web.AuthTest do
assert response =~ "Sign in successful"
assert response
|> Floki.parse_fragment!()
|> Floki.attribute("meta", "content")
|> Enum.any?(fn value ->
&(&1 == "0; url=/#{account.slug}/sign_in/client_redirect")

View File

@@ -56,7 +56,7 @@ defmodule Web.Live.Actors.EditTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/actors/#{actor}/edit")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Actors"
assert breadcrumbs =~ actor.name
@@ -251,7 +251,7 @@ defmodule Web.Live.Actors.EditTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/actors/#{actor}/edit")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Actors"
assert breadcrumbs =~ actor.name

View File

@@ -56,7 +56,7 @@ defmodule Web.Live.Actors.GroupsTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/actors/#{actor}/edit_groups")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Actors"
assert breadcrumbs =~ actor.name
@@ -130,6 +130,7 @@ defmodule Web.Live.Actors.GroupsTest do
lv
|> element("tr button", "Add")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#groups")
|> table_to_map()
@@ -140,6 +141,7 @@ defmodule Web.Live.Actors.GroupsTest do
lv
|> element("tr button", "Remove")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#groups")
|> table_to_map()

View File

@@ -38,7 +38,7 @@ defmodule Web.Live.Actors.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/actors")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Actors"
end
@@ -53,7 +53,11 @@ defmodule Web.Live.Actors.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/actors")
assert button = Floki.find(html, "a[href='/#{account.slug}/actors/new']")
assert button =
html
|> Floki.parse_fragment!()
|> Floki.find("a[href='/#{account.slug}/actors/new']")
assert Floki.text(button) =~ "Add Actor"
end
@@ -176,6 +180,7 @@ defmodule Web.Live.Actors.IndexTest do
lv
|> element("#actors")
|> render()
|> Floki.parse_fragment!()
|> Floki.find("a[href*=\"api_clients/#{api_client.id}\"]")
assert length(items) == 1

View File

@@ -49,7 +49,7 @@ defmodule Web.Live.Actors.ServiceAccounts.NewIdentityTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/actors/service_accounts/#{actor}/new_identity")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Actors"
assert breadcrumbs =~ actor.name
@@ -154,7 +154,9 @@ defmodule Web.Live.Actors.ServiceAccounts.NewIdentityTest do
}
assert {:ok, subject} =
Floki.find(html, "code")
html
|> Floki.parse_fragment!()
|> Floki.find("code")
|> element_to_text()
|> Domain.Auth.authenticate(context)

View File

@@ -41,7 +41,7 @@ defmodule Web.Live.Actors.ServiceAccount.NewTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/actors/service_accounts/new")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Actors"
assert breadcrumbs =~ "Add"

View File

@@ -43,7 +43,7 @@ defmodule Web.Live.Actors.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/actors/#{actor}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Actors"
assert breadcrumbs =~ actor.name
@@ -375,6 +375,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("#identity-#{email_identity.id} button", "Send Welcome Email")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~ "Welcome email sent to #{email_identity.provider_identifier}"
@@ -414,6 +415,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("#identity-#{oidc_identity.id} button", "Send Welcome Email")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~ "Welcome email sent to #{oidc_email}"
@@ -447,6 +449,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("#identity-#{email_identity.id} button", "Send Welcome Email")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~
"Welcome email sent to #{email_identity.provider_identifier}"
@@ -455,6 +458,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("#identity-#{email_identity.id} button", "Send Welcome Email")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-error")
|> element_to_text() =~
"You sent too many welcome emails to this address. Please try again later."
@@ -571,6 +575,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("#identity-#{other_identity.id} button[type=submit]", "Delete")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~ "Identity was deleted."
end
@@ -800,6 +805,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("button[type=submit]", "Delete User")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-error")
|> element_to_text() =~ "You can't delete the last admin of an account."
@@ -823,6 +829,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("button[type=submit]", "Disable User")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~ "Actor was disabled."
@@ -843,6 +850,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("button[type=submit]", "Disable User")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-error")
|> element_to_text() =~ "You can't disable the last admin of an account."
@@ -867,6 +875,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("button[type=submit]", "Enable User")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~ "Actor was enabled."
@@ -1005,6 +1014,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("button[type=submit]", "Disable Service Account")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~ "Actor was disabled."
@@ -1029,6 +1039,7 @@ defmodule Web.Live.Actors.ShowTest do
assert lv
|> element("button[type=submit]", "Enable Service Account")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~ "Actor was enabled."

View File

@@ -56,7 +56,7 @@ defmodule Web.Live.Actors.User.NewIdentityTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/actors/users/#{actor}/new_identity")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Actors"
assert breadcrumbs =~ actor.name

View File

@@ -41,7 +41,7 @@ defmodule Web.Live.Actors.User.NewTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/actors/users/new")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Actors"
assert breadcrumbs =~ "Add"

View File

@@ -58,7 +58,7 @@ defmodule Web.Live.Clients.EditTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/clients/#{client}/edit")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Clients"
assert breadcrumbs =~ client.name

View File

@@ -37,7 +37,7 @@ defmodule Web.Live.Clients.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/clients")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Clients"
end

View File

@@ -60,7 +60,7 @@ defmodule Web.Live.Clients.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/clients/#{client}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Clients"
assert breadcrumbs =~ client.name

View File

@@ -61,7 +61,7 @@ defmodule Web.Live.Gateways.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/gateways/#{gateway}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Sites"
assert breadcrumbs =~ gateway.group.name

View File

@@ -81,7 +81,7 @@ defmodule Web.Live.Groups.EditActorsTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/groups/#{group}/edit_actors")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Groups"
assert breadcrumbs =~ group.name
@@ -165,6 +165,7 @@ defmodule Web.Live.Groups.EditActorsTest do
lv
|> element("tr button", "Add")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#actors")
|> table_to_map()
@@ -175,6 +176,7 @@ defmodule Web.Live.Groups.EditActorsTest do
lv
|> element("tr button", "Remove")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#actors")
|> table_to_map()

View File

@@ -82,7 +82,7 @@ defmodule Web.Live.Groups.EditTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/groups/#{group}/edit")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Groups"
assert breadcrumbs =~ group.name

View File

@@ -33,7 +33,7 @@ defmodule Web.Live.Groups.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/groups")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Groups"
end
@@ -48,7 +48,11 @@ defmodule Web.Live.Groups.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/groups")
assert button = Floki.find(html, "a[href='/#{account.slug}/groups/new']")
assert button =
html
|> Floki.parse_fragment!()
|> Floki.find("a[href='/#{account.slug}/groups/new']")
assert Floki.text(button) =~ "Add Group"
end
@@ -62,7 +66,7 @@ defmodule Web.Live.Groups.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/groups")
assert form = Floki.find(html, "form#groups-filters")
assert form = html |> Floki.parse_fragment!() |> Floki.find("form#groups-filters")
assert ["return event.key != 'Enter';"] = Floki.attribute(form, "onkeydown")
end

View File

@@ -38,7 +38,7 @@ defmodule Web.Live.Groups.NewTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/groups/new")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Groups"
assert breadcrumbs =~ "Add"

View File

@@ -58,7 +58,7 @@ defmodule Web.Live.Groups.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/groups/#{group}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Groups"
assert breadcrumbs =~ group.name

View File

@@ -68,7 +68,7 @@ defmodule Web.Live.Policies.EditTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/policies/#{policy}/edit")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Policies"
assert breadcrumbs =~ policy.actor_group.name

View File

@@ -34,7 +34,7 @@ defmodule Web.Live.Policies.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/policies")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Policies"
end
@@ -49,7 +49,11 @@ defmodule Web.Live.Policies.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/policies")
assert button = Floki.find(html, "a[href='/#{account.slug}/policies/new']")
assert button =
html
|> Floki.parse_fragment!()
|> Floki.find("a[href='/#{account.slug}/policies/new']")
assert Floki.text(button) =~ "Add Policy"
end

View File

@@ -40,7 +40,7 @@ defmodule Web.Live.Policies.NewTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/policies/new")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Policies"
assert breadcrumbs =~ "Add"
@@ -94,11 +94,15 @@ defmodule Web.Live.Policies.NewTest do
html = render(form)
disabled_input = Floki.find(html, "input[name='policy[actor_group_id]_name']")
disabled_input =
html |> Floki.parse_fragment!() |> Floki.find("input[name='policy[actor_group_id]_name']")
assert Floki.attribute(disabled_input, "disabled") == [""]
assert Floki.attribute(disabled_input, "value") == [actor_group.name]
value_input = Floki.find(html, "input[name='policy[actor_group_id]']")
value_input =
html |> Floki.parse_fragment!() |> Floki.find("input[name='policy[actor_group_id]']")
assert Floki.attribute(value_input, "value") == [actor_group.id]
end
@@ -150,11 +154,15 @@ defmodule Web.Live.Policies.NewTest do
html = render(form)
disabled_input = Floki.find(html, "input[name='policy[resource_id]_name']")
disabled_input =
html |> Floki.parse_fragment!() |> Floki.find("input[name='policy[resource_id]_name']")
assert Floki.attribute(disabled_input, "disabled") == [""]
assert Floki.attribute(disabled_input, "value") == [resource.name]
value_input = Floki.find(html, "input[name='policy[resource_id]']")
value_input =
html |> Floki.parse_fragment!() |> Floki.find("input[name='policy[resource_id]']")
assert Floki.attribute(value_input, "value") == [resource.id]
end

View File

@@ -101,7 +101,7 @@ defmodule Web.Live.Policies.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/policies/#{policy}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Policies"
assert breadcrumbs =~ policy.actor_group.name

View File

@@ -58,7 +58,7 @@ defmodule Web.Live.RelayGroups.EditTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/relay_groups/#{group}/edit")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Relay Instance Groups"
assert breadcrumbs =~ group.name

View File

@@ -37,7 +37,7 @@ defmodule Web.Live.RelayGroups.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/relay_groups")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Relay Instance Groups"
end
@@ -52,7 +52,11 @@ defmodule Web.Live.RelayGroups.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/relay_groups")
assert button = Floki.find(html, "a[href='/#{account.slug}/relay_groups/new']")
assert button =
html
|> Floki.parse_fragment!()
|> Floki.find("a[href='/#{account.slug}/relay_groups/new']")
assert Floki.text(button) =~ "Add Instance Group"
end

View File

@@ -38,7 +38,7 @@ defmodule Web.Live.RelayGroups.NewTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/relay_groups/new")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Relay Instance Groups"
assert breadcrumbs =~ "Add"

View File

@@ -63,7 +63,7 @@ defmodule Web.Live.RelayGroups.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/relay_groups/#{group}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Relay Instance Groups"
assert breadcrumbs =~ group.name

View File

@@ -61,7 +61,7 @@ defmodule Web.Live.Relays.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/relays/#{relay}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Relay Instance Groups"
assert breadcrumbs =~ relay.group.name

View File

@@ -68,7 +68,7 @@ defmodule Web.Live.Resources.EditTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/resources/#{resource}/edit")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Resources"
assert breadcrumbs =~ resource.name

View File

@@ -34,7 +34,7 @@ defmodule Web.Live.Resources.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/resources")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Resources"
end
@@ -49,7 +49,11 @@ defmodule Web.Live.Resources.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/resources")
assert button = Floki.find(html, "a[href='/#{account.slug}/resources/new']")
assert button =
html
|> Floki.parse_fragment!()
|> Floki.find("a[href='/#{account.slug}/resources/new']")
assert Floki.text(button) =~ "Add Resource"
end
@@ -65,7 +69,11 @@ defmodule Web.Live.Resources.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/resources")
assert button = Floki.find(html, "a[href='/#{account.slug}/resources/new']")
assert button =
html
|> Floki.parse_fragment!()
|> Floki.find("a[href='/#{account.slug}/resources/new']")
refute Floki.text(button) =~ "Add Multi-Site Resource"
end

View File

@@ -42,7 +42,7 @@ defmodule Web.Live.Resources.NewTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/resources/new")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Resources"
assert breadcrumbs =~ "Add Resource"

View File

@@ -93,7 +93,7 @@ defmodule Web.Live.Resources.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/resources/#{resource}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Resources"
assert breadcrumbs =~ resource.name
@@ -183,7 +183,7 @@ defmodule Web.Live.Resources.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/resources/#{resource}")
assert Floki.find(html, "a[href='https://example.com']")
assert html |> Floki.parse_fragment!() |> Floki.find("a[href='https://example.com']")
end
test "renders traffic filters on show page even when traffic filters disabled", %{

View File

@@ -48,7 +48,7 @@ defmodule Web.Live.Settings.Account.NotificationsEditTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/account/notifications/edit")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Account Settings"
assert breadcrumbs =~ "Edit Notifications"

View File

@@ -48,7 +48,7 @@ defmodule Web.Live.Settings.AccountTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/account")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Account Settings"
end

View File

@@ -53,7 +53,7 @@ defmodule Web.Live.Settings.ApiClients.BetaTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/api_clients/beta")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "API Clients"
assert breadcrumbs =~ "Beta"
@@ -84,6 +84,7 @@ defmodule Web.Live.Settings.ApiClients.BetaTest do
assert lv
|> element("#beta-request")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~ "request to join"

View File

@@ -57,7 +57,7 @@ defmodule Web.Live.Settings.ApiClients.EditTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/api_clients/#{api_client}/edit")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "API Clients"
assert breadcrumbs =~ api_client.name

View File

@@ -55,7 +55,7 @@ defmodule Web.Live.Settings.ApiClients.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/api_clients")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "API Clients"
end
@@ -70,7 +70,11 @@ defmodule Web.Live.Settings.ApiClients.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/api_clients")
assert button = Floki.find(html, "a[href='/#{account.slug}/settings/api_clients/new']")
assert button =
html
|> Floki.parse_fragment!()
|> Floki.find("a[href='/#{account.slug}/settings/api_clients/new']")
assert Floki.text(button) =~ "Add API Client"
end

View File

@@ -56,7 +56,7 @@ defmodule Web.Live.Settings.ApiClient.NewTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/api_clients/new")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "API Clients"
assert breadcrumbs =~ "Add"

View File

@@ -42,7 +42,7 @@ defmodule Web.Live.Settings.ApiClient.NewTokenTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/api_clients/#{api_client}/new_token")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "API Clients"
assert breadcrumbs =~ api_client.name
@@ -141,7 +141,9 @@ defmodule Web.Live.Settings.ApiClient.NewTokenTest do
assert html =~ "Store this in a safe place."
assert html =~ "It won't be shown again."
assert Floki.find(html, "code")
assert html
|> Floki.parse_fragment!()
|> Floki.find("code")
|> element_to_text()
|> String.trim()
|> String.first() == "."

View File

@@ -58,7 +58,7 @@ defmodule Web.Live.Settings.ApiClients.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/api_clients/#{api_client}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "API Clients"
assert breadcrumbs =~ api_client.name
@@ -160,6 +160,7 @@ defmodule Web.Live.Settings.ApiClients.ShowTest do
assert lv
|> element("button[type=submit]", "Disable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~ "API Client was disabled."
@@ -184,6 +185,7 @@ defmodule Web.Live.Settings.ApiClients.ShowTest do
assert lv
|> element("button[type=submit]", "Enable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find(".flash-info")
|> element_to_text() =~ "API Client was enabled."

View File

@@ -53,7 +53,7 @@ defmodule Web.Live.Settings.BillingTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/billing")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Billing"
end

View File

@@ -35,7 +35,7 @@ defmodule Web.Live.Settings.DNSTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/dns")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "DNS Settings"
end

View File

@@ -64,7 +64,7 @@ defmodule Web.Live.Settings.IdentityProviders.GoogleWorkspace.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/identity_providers/google_workspace/#{provider}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Identity Providers Settings"
assert breadcrumbs =~ provider.name
@@ -234,6 +234,7 @@ defmodule Web.Live.Settings.IdentityProviders.GoogleWorkspace.ShowTest do
assert lv
|> element("button[type=submit]", "Disable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Disabled"
@@ -241,6 +242,7 @@ defmodule Web.Live.Settings.IdentityProviders.GoogleWorkspace.ShowTest do
assert lv
|> element("button[type=submit]", "Enable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Active"
@@ -279,6 +281,7 @@ defmodule Web.Live.Settings.IdentityProviders.GoogleWorkspace.ShowTest do
assert lv
|> element("a", "Reconnect")
|> render()
|> Floki.parse_fragment!()
|> Floki.attribute("href")
|> hd() ==
~p"/#{account.id}/settings/identity_providers/google_workspace/#{provider}/redirect"

View File

@@ -44,7 +44,7 @@ defmodule Web.Live.Settings.IdentityProviders.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/identity_providers")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Identity Providers"
end
@@ -59,7 +59,11 @@ defmodule Web.Live.Settings.IdentityProviders.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/identity_providers")
assert button = Floki.find(html, "a[href='/#{account.slug}/settings/identity_providers/new']")
assert button =
html
|> Floki.parse_fragment!()
|> Floki.find("a[href='/#{account.slug}/settings/identity_providers/new']")
assert Floki.text(button) =~ "Add Identity Provider"
end
@@ -70,7 +74,7 @@ defmodule Web.Live.Settings.IdentityProviders.IndexTest do
|> live(~p"/#{account}/settings/identity_providers")
assert Floki.text(html) =~ "Default Authentication Provider"
assert form = Floki.find(html, "form#default-provider-form")
assert form = html |> Floki.parse_fragment!() |> Floki.find("form#default-provider-form")
assert Floki.text(form) =~
"When selected, users signing in from the Firezone client will be taken directly to this provider for authentication."
@@ -99,6 +103,7 @@ defmodule Web.Live.Settings.IdentityProviders.IndexTest do
# Assert the default provider is set
assert html
|> Floki.parse_fragment!()
|> Floki.find("option[selected]")
|> Floki.attribute("value") == [to_string(provider.id)]
end
@@ -130,6 +135,7 @@ defmodule Web.Live.Settings.IdentityProviders.IndexTest do
# Assert the default provider is set
assert html
|> Floki.parse_fragment!()
|> Floki.find("option[selected]")
|> Floki.attribute("value") == ["none"]

View File

@@ -73,7 +73,7 @@ defmodule Web.Live.Settings.IdentityProviders.JumpCloud.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/identity_providers/jumpcloud/#{provider}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Identity Providers Settings"
assert breadcrumbs =~ provider.name
@@ -268,6 +268,7 @@ defmodule Web.Live.Settings.IdentityProviders.JumpCloud.ShowTest do
assert lv
|> element("button[type=submit]", "Disable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Disabled"
@@ -275,6 +276,7 @@ defmodule Web.Live.Settings.IdentityProviders.JumpCloud.ShowTest do
assert lv
|> element("button[type=submit]", "Enable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Active"
@@ -321,6 +323,7 @@ defmodule Web.Live.Settings.IdentityProviders.JumpCloud.ShowTest do
assert lv
|> element("a", "Reconnect")
|> render()
|> Floki.parse_fragment!()
|> Floki.attribute("href")
|> hd() ==
~p"/#{account.id}/settings/identity_providers/jumpcloud/#{provider}/redirect"

View File

@@ -64,7 +64,7 @@ defmodule Web.Live.Settings.IdentityProviders.MicrosoftEntra.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/identity_providers/microsoft_entra/#{provider}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Identity Providers Settings"
assert breadcrumbs =~ provider.name
@@ -235,6 +235,7 @@ defmodule Web.Live.Settings.IdentityProviders.MicrosoftEntra.ShowTest do
assert lv
|> element("button[type=submit]", "Disable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Disabled"
@@ -242,6 +243,7 @@ defmodule Web.Live.Settings.IdentityProviders.MicrosoftEntra.ShowTest do
assert lv
|> element("button[type=submit]", "Enable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Active"
@@ -280,6 +282,7 @@ defmodule Web.Live.Settings.IdentityProviders.MicrosoftEntra.ShowTest do
assert lv
|> element("a", "Reconnect")
|> render()
|> Floki.parse_fragment!()
|> Floki.attribute("href")
|> hd() ==
~p"/#{account.id}/settings/identity_providers/microsoft_entra/#{provider}/redirect"

View File

@@ -64,7 +64,7 @@ defmodule Web.Live.Settings.IdentityProviders.Okta.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/identity_providers/okta/#{provider}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Identity Providers Settings"
assert breadcrumbs =~ provider.name
@@ -235,6 +235,7 @@ defmodule Web.Live.Settings.IdentityProviders.Okta.ShowTest do
assert lv
|> element("button[type=submit]", "Disable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Disabled"
@@ -242,6 +243,7 @@ defmodule Web.Live.Settings.IdentityProviders.Okta.ShowTest do
assert lv
|> element("button[type=submit]", "Enable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Active"
@@ -281,6 +283,7 @@ defmodule Web.Live.Settings.IdentityProviders.Okta.ShowTest do
assert lv
|> element("a", "Reconnect")
|> render()
|> Floki.parse_fragment!()
|> Floki.attribute("href")
|> hd() ==
~p"/#{account.id}/settings/identity_providers/okta/#{provider}/redirect"

View File

@@ -63,7 +63,7 @@ defmodule Web.Live.Settings.IdentityProviders.OpenIDConnect.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/identity_providers/openid_connect/#{provider}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Identity Providers Settings"
assert breadcrumbs =~ provider.name
@@ -133,6 +133,7 @@ defmodule Web.Live.Settings.IdentityProviders.OpenIDConnect.ShowTest do
assert lv
|> element("button[type=submit]", "Disable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Disabled"
@@ -140,6 +141,7 @@ defmodule Web.Live.Settings.IdentityProviders.OpenIDConnect.ShowTest do
assert lv
|> element("button[type=submit]", "Enable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Active"
@@ -179,6 +181,7 @@ defmodule Web.Live.Settings.IdentityProviders.OpenIDConnect.ShowTest do
assert lv
|> element("a", "Reconnect")
|> render()
|> Floki.parse_fragment!()
|> Floki.attribute("href")
|> hd() ==
~p"/#{account.id}/settings/identity_providers/openid_connect/#{provider}/redirect"

View File

@@ -61,7 +61,7 @@ defmodule Web.Live.Settings.IdentityProviders.System.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/settings/identity_providers/system/#{provider}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Identity Providers Settings"
assert breadcrumbs =~ provider.name
@@ -126,6 +126,7 @@ defmodule Web.Live.Settings.IdentityProviders.System.ShowTest do
assert lv
|> element("button[type=submit]", "Disable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Disabled"
@@ -133,6 +134,7 @@ defmodule Web.Live.Settings.IdentityProviders.System.ShowTest do
assert lv
|> element("button[type=submit]", "Enable")
|> render_click()
|> Floki.parse_fragment!()
|> Floki.find("#provider")
|> vertical_table_to_map()
|> Map.fetch!("status") == "Active"

View File

@@ -19,7 +19,12 @@ defmodule Web.SidebarTest do
identity: identity
} do
{:ok, _lv, html} = conn |> authorize_conn(identity) |> live(~p"/#{account}/actors")
refute Enum.empty?(Floki.find(html, "ul#dropdown-settings.hidden"))
refute Enum.empty?(
html
|> Floki.parse_fragment!()
|> Floki.find("ul#dropdown-settings.hidden")
)
end
test "shows dropdown when path is within dropdown children", %{
@@ -28,8 +33,14 @@ defmodule Web.SidebarTest do
identity: identity
} do
{:ok, _lv, html} = conn |> authorize_conn(identity) |> live(~p"/#{account}/settings/dns")
assert Enum.empty?(Floki.find(html, "ul#dropdown-settings.hidden"))
refute Enum.empty?(Floki.find(html, "ul#dropdown-settings"))
assert Enum.empty?(
html
|> Floki.parse_fragment!()
|> Floki.find("ul#dropdown-settings.hidden")
)
refute Enum.empty?(html |> Floki.parse_fragment!() |> Floki.find("ul#dropdown-settings"))
end
test "renders proper active sidebar item class for actors", %{
@@ -38,7 +49,12 @@ defmodule Web.SidebarTest do
conn: conn
} do
{:ok, _lv, html} = conn |> authorize_conn(identity) |> live(~p"/#{account}/actors")
assert item = Floki.find(html, "a.bg-neutral-50[href='/#{account.slug}/actors']")
assert item =
html
|> Floki.parse_fragment!()
|> Floki.find("a.bg-neutral-50[href='/#{account.slug}/actors']")
assert String.trim(Floki.text(item)) == "Actors"
end
@@ -48,7 +64,12 @@ defmodule Web.SidebarTest do
conn: conn
} do
{:ok, _lv, html} = conn |> authorize_conn(identity) |> live(~p"/#{account}/groups")
assert item = Floki.find(html, "a.bg-neutral-50[href='/#{account.slug}/groups']")
assert item =
html
|> Floki.parse_fragment!()
|> Floki.find("a.bg-neutral-50[href='/#{account.slug}/groups']")
assert String.trim(Floki.text(item)) == "Groups"
end
@@ -58,7 +79,12 @@ defmodule Web.SidebarTest do
conn: conn
} do
{:ok, _lv, html} = conn |> authorize_conn(identity) |> live(~p"/#{account}/clients")
assert item = Floki.find(html, "a.bg-neutral-50[href='/#{account.slug}/clients']")
assert item =
html
|> Floki.parse_fragment!()
|> Floki.find("a.bg-neutral-50[href='/#{account.slug}/clients']")
assert String.trim(Floki.text(item)) == "Clients"
end
@@ -68,7 +94,12 @@ defmodule Web.SidebarTest do
conn: conn
} do
{:ok, _lv, html} = conn |> authorize_conn(identity) |> live(~p"/#{account}/sites")
assert item = Floki.find(html, "a.bg-neutral-50[href='/#{account.slug}/sites']")
assert item =
html
|> Floki.parse_fragment!()
|> Floki.find("a.bg-neutral-50[href='/#{account.slug}/sites']")
assert String.trim(Floki.text(item)) == "Sites"
end
@@ -78,7 +109,12 @@ defmodule Web.SidebarTest do
conn: conn
} do
{:ok, _lv, html} = conn |> authorize_conn(identity) |> live(~p"/#{account}/relay_groups")
assert item = Floki.find(html, "a.bg-neutral-50[href='/#{account.slug}/relay_groups']")
assert item =
html
|> Floki.parse_fragment!()
|> Floki.find("a.bg-neutral-50[href='/#{account.slug}/relay_groups']")
assert String.trim(Floki.text(item)) == "Relays"
end
@@ -88,7 +124,7 @@ defmodule Web.SidebarTest do
# conn: conn
# } do
# {:ok, _lv, html} = conn |> authorize_conn(identity) |> live( ~p"/#{account}/resources")
# assert item = Floki.find(html, "a.bg-neutral-50[href='/#{account.slug}/resources']")
# assert item = html |> Floki.parse_fragment!() |> Floki.find("a.bg-neutral-50[href='/#{account.slug}/resources']")
# assert String.trim(Floki.text(item)) == "Resources"
# end
@@ -98,7 +134,12 @@ defmodule Web.SidebarTest do
conn: conn
} do
{:ok, _lv, html} = conn |> authorize_conn(identity) |> live(~p"/#{account}/policies")
assert item = Floki.find(html, "a.bg-neutral-50[href='/#{account.slug}/policies']")
assert item =
html
|> Floki.parse_fragment!()
|> Floki.find("a.bg-neutral-50[href='/#{account.slug}/policies']")
assert String.trim(Floki.text(item)) == "Policies"
end
@@ -108,7 +149,12 @@ defmodule Web.SidebarTest do
conn: conn
} do
{:ok, _lv, html} = conn |> authorize_conn(identity) |> live(~p"/#{account}/settings/account")
assert item = Floki.find(html, "a.bg-neutral-50[href='/#{account.slug}/settings/account']")
assert item =
html
|> Floki.parse_fragment!()
|> Floki.find("a.bg-neutral-50[href='/#{account.slug}/settings/account']")
assert String.trim(Floki.text(item)) == "Account"
end
@@ -121,10 +167,9 @@ defmodule Web.SidebarTest do
conn |> authorize_conn(identity) |> live(~p"/#{account}/settings/identity_providers")
assert item =
Floki.find(
html,
"a.bg-neutral-50[href='/#{account.slug}/settings/identity_providers']"
)
html
|> Floki.parse_fragment!()
|> Floki.find("a.bg-neutral-50[href='/#{account.slug}/settings/identity_providers']")
assert String.trim(Floki.text(item)) == "Identity Providers"
end
@@ -141,10 +186,9 @@ defmodule Web.SidebarTest do
)
assert item =
Floki.find(
html,
"a.bg-neutral-50[href='/#{account.slug}/settings/identity_providers']"
)
html
|> Floki.parse_fragment!()
|> Floki.find("a.bg-neutral-50[href='/#{account.slug}/settings/identity_providers']")
assert String.trim(Floki.text(item)) == "Identity Providers"
end
@@ -155,7 +199,12 @@ defmodule Web.SidebarTest do
conn: conn
} do
{:ok, _lv, html} = conn |> authorize_conn(identity) |> live(~p"/#{account}/settings/dns")
assert item = Floki.find(html, "a.bg-neutral-50[href='/#{account.slug}/settings/dns']")
assert item =
html
|> Floki.parse_fragment!()
|> Floki.find("a.bg-neutral-50[href='/#{account.slug}/settings/dns']")
assert String.trim(Floki.text(item)) == "DNS"
end
end

View File

@@ -58,7 +58,7 @@ defmodule Web.Live.Sites.EditTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/sites/#{group}/edit")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Sites"
assert breadcrumbs =~ group.name

View File

@@ -40,7 +40,7 @@ defmodule Web.Live.Sites.Gateways.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/sites/#{group}/gateways")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Sites"
end

View File

@@ -33,7 +33,7 @@ defmodule Web.Live.Sites.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/sites")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Sites"
end
@@ -48,7 +48,9 @@ defmodule Web.Live.Sites.IndexTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/sites")
assert button = Floki.find(html, "a[href='/#{account.slug}/sites/new']")
assert button =
html |> Floki.parse_fragment!() |> Floki.find("a[href='/#{account.slug}/sites/new']")
assert Floki.text(button) =~ "Add Site"
end

View File

@@ -38,7 +38,7 @@ defmodule Web.Live.Sites.NewTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/sites/new")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Sites"
assert breadcrumbs =~ "Add"

View File

@@ -63,7 +63,7 @@ defmodule Web.Live.Sites.ShowTest do
|> authorize_conn(identity)
|> live(~p"/#{account}/sites/#{group}")
assert item = Floki.find(html, "[aria-label='Breadcrumb']")
assert item = html |> Floki.parse_fragment!() |> Floki.find("[aria-label='Breadcrumb']")
breadcrumbs = String.trim(Floki.text(item))
assert breadcrumbs =~ "Sites"
assert breadcrumbs =~ group.name

View File

@@ -34,22 +34,27 @@ defmodule Web.LiveTableTest do
html = render_component(&live_table/1, assigns)
assert html
|> Floki.parse_fragment!()
|> Floki.find("table")
|> Floki.attribute("id") == ["table-id"]
assert html
|> Floki.parse_fragment!()
|> Floki.find("table thead")
|> Floki.attribute("id") == ["table-id-header"]
assert html
|> Floki.parse_fragment!()
|> Floki.find("th")
|> Floki.text() =~ "name"
assert html
|> Floki.parse_fragment!()
|> Floki.find("table tbody")
|> Floki.attribute("id") == ["table-id-rows"]
assert html
|> Floki.parse_fragment!()
|> Floki.find("td")
|> Floki.text() =~ "foo"
end
@@ -69,16 +74,17 @@ defmodule Web.LiveTableTest do
form =
render_component(&live_table/1, assigns)
|> Floki.parse_fragment!()
|> Floki.find("form")
assert Floki.attribute(form, "id") == ["table-id-filters"]
assert Floki.attribute(form, "phx-change") == ["filter"]
input = Floki.find(form, "input[type=hidden]")
input = form |> Floki.find("input[type=hidden]")
assert Floki.attribute(input, "name") == ["table_id"]
assert Floki.attribute(input, "value") == ["table-id"]
input = Floki.find(form, "input[type=text]")
input = form |> Floki.find("input[type=text]")
assert Floki.attribute(input, "id") == ["table-id_search"]
assert Floki.attribute(input, "name") == ["table-id[search]"]
assert Floki.attribute(input, "placeholder") == ["Search by Query"]
@@ -100,16 +106,17 @@ defmodule Web.LiveTableTest do
form =
render_component(&live_table/1, assigns)
|> Floki.parse_fragment!()
|> Floki.find("form")
assert Floki.attribute(form, "id") == ["table-id-filters"]
assert Floki.attribute(form, "phx-change") == ["filter"]
input = Floki.find(form, "input[type=hidden]")
input = form |> Floki.find("input[type=hidden]")
assert Floki.attribute(input, "name") == ["table_id"]
assert Floki.attribute(input, "value") == ["table-id"]
input = Floki.find(form, "input[type=text]")
input = form |> Floki.find("input[type=text]")
assert Floki.attribute(input, "id") == ["table-id_email"]
assert Floki.attribute(input, "name") == ["table-id[email]"]
assert Floki.attribute(input, "placeholder") == ["Search by Email"]
@@ -136,16 +143,17 @@ defmodule Web.LiveTableTest do
form =
render_component(&live_table/1, assigns)
|> Floki.parse_fragment!()
|> Floki.find("form")
assert Floki.attribute(form, "id") == ["table-id-filters"]
assert Floki.attribute(form, "phx-change") == ["filter"]
input = Floki.find(form, "input[type=hidden]")
input = form |> Floki.find("input[type=hidden]")
assert Floki.attribute(input, "name") == ["table_id"]
assert Floki.attribute(input, "value") == ["table-id"]
select = Floki.find(form, "select")
select = form |> Floki.find("select")
assert Floki.attribute(select, "id") == ["table-id_id"]
assert Floki.attribute(select, "name") == ["table-id[id]"]
@@ -177,16 +185,17 @@ defmodule Web.LiveTableTest do
form =
render_component(&live_table/1, assigns)
|> Floki.parse_fragment!()
|> Floki.find("form")
assert Floki.attribute(form, "id") == ["table-id-filters"]
assert Floki.attribute(form, "phx-change") == ["filter"]
input = Floki.find(form, "input[type=hidden]")
input = form |> Floki.find("input[type=hidden]")
assert Floki.attribute(input, "name") == ["table_id"]
assert Floki.attribute(input, "value") == ["table-id"]
radio = Floki.find(form, "input[type=radio]")
radio = form |> Floki.find("input[type=radio]")
assert Floki.attribute(radio, "id") == [
"table-id-btn-__all__",
@@ -226,16 +235,17 @@ defmodule Web.LiveTableTest do
form =
render_component(&live_table/1, assigns)
|> Floki.parse_fragment!()
|> Floki.find("form")
assert Floki.attribute(form, "id") == ["table-id-filters"]
assert Floki.attribute(form, "phx-change") == ["filter"]
input = Floki.find(form, "input[type=hidden]")
input = form |> Floki.find("input[type=hidden]")
assert Floki.attribute(input, "name") == ["table_id"]
assert Floki.attribute(input, "value") == ["table-id"]
radio = Floki.find(form, "input[type=checkbox]")
radio = form |> Floki.find("input[type=checkbox]")
assert Floki.attribute(radio, "id") == [
"table-id-btn-__all__",
@@ -279,16 +289,17 @@ defmodule Web.LiveTableTest do
form =
render_component(&live_table/1, assigns)
|> Floki.parse_fragment!()
|> Floki.find("form")
assert Floki.attribute(form, "id") == ["table-id-filters"]
assert Floki.attribute(form, "phx-change") == ["filter"]
input = Floki.find(form, "input[type=hidden]")
input = form |> Floki.find("input[type=hidden]")
assert Floki.attribute(input, "name") == ["table_id"]
assert Floki.attribute(input, "value") == ["table-id"]
select = Floki.find(form, "select")
select = form |> Floki.find("select")
assert Floki.attribute(select, "id") == ["table-id_select"]
assert Floki.attribute(select, "name") == ["table-id[select]"]
@@ -309,7 +320,7 @@ defmodule Web.LiveTableTest do
test "renders ordering buttons", %{assigns: assigns} do
# default order when it's unset
html = render_component(&live_table/1, assigns)
order_button = Floki.find(html, "th button")
order_button = html |> Floki.parse_fragment!() |> Floki.find("th button")
assert Floki.attribute(order_button, "phx-click") == ["order_by"]
assert Floki.attribute(order_button, "phx-value-table_id") == ["table-id"]
assert Floki.attribute(order_button, "phx-value-order_by") == ["assoc:asc:name"]
@@ -317,12 +328,13 @@ defmodule Web.LiveTableTest do
# current order if it's set
assigns = %{assigns | ordered_by: {:assoc, :desc, :name}}
html = render_component(&live_table/1, assigns)
order_button = Floki.find(html, "th button")
order_button = html |> Floki.parse_fragment!() |> Floki.find("th button")
assert Floki.attribute(order_button, "phx-value-order_by") == ["assoc:desc:name"]
end
test "renders page size and total count", %{assigns: assigns} do
assert render_component(&live_table/1, assigns)
|> Floki.parse_fragment!()
|> Floki.find("nav > span")
|> Floki.text()
|> String.replace(~r/[\s]+/, " ") =~ "Showing 1 of 1"
@@ -332,6 +344,7 @@ defmodule Web.LiveTableTest do
| metadata: %{assigns.metadata | count: 10, limit: 100},
rows: Enum.map(1..10, fn _i -> ["foo"] end)
})
|> Floki.parse_fragment!()
|> Floki.find("nav > span")
|> Floki.text()
|> String.replace(~r/[\s]+/, " ") =~ "Showing 10 of 10"
@@ -341,6 +354,7 @@ defmodule Web.LiveTableTest do
| metadata: %{assigns.metadata | count: 100, limit: 10},
rows: Enum.map(1..100, fn _i -> ["foo"] end)
})
|> Floki.parse_fragment!()
|> Floki.find("nav > span")
|> Floki.text()
|> String.replace(~r/[\s]+/, " ") =~ "Showing 100 of 100"
@@ -350,6 +364,7 @@ defmodule Web.LiveTableTest do
html = render_component(&live_table/1, assigns)
assert html
|> Floki.parse_fragment!()
|> Floki.find("nav button")
|> Floki.attribute("disabled") == ["disabled", "disabled"]
@@ -357,10 +372,11 @@ defmodule Web.LiveTableTest do
html = render_component(&live_table/1, assigns)
assert html
|> Floki.parse_fragment!()
|> Floki.find("nav button")
|> Floki.attribute("disabled") == ["disabled"]
enabled_button = Floki.find(html, "nav button:not([disabled])")
enabled_button = html |> Floki.parse_fragment!() |> Floki.find("nav button:not([disabled])")
assert Floki.attribute(enabled_button, "phx-click") == ["paginate"]
assert Floki.attribute(enabled_button, "phx-value-cursor") == ["next_cursor"]
assert Floki.attribute(enabled_button, "phx-value-table_id") == ["table-id"]
@@ -369,10 +385,11 @@ defmodule Web.LiveTableTest do
html = render_component(&live_table/1, assigns)
assert html
|> Floki.parse_fragment!()
|> Floki.find("nav button")
|> Floki.attribute("disabled") == []
enabled_button = Floki.find(html, "nav button:not([disabled])")
enabled_button = html |> Floki.parse_fragment!() |> Floki.find("nav button:not([disabled])")
assert "prev_cursor" in Floki.attribute(enabled_button, "phx-value-cursor")
end
end

View File

@@ -51,7 +51,7 @@ defmodule Firezone.MixProject do
{:phoenix, "~> 1.8.1"},
{:phoenix_live_view, "~> 1.1.8"},
{:lazy_html, ">= 0.1.0", only: :test},
{:floki, "~> 0.37.0"}
{:floki, "~> 0.38.0"}
]
end

View File

@@ -33,7 +33,7 @@
"file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"},
"finch": {:hex, :finch, "0.19.0", "c644641491ea854fc5c1bbaef36bfc764e3f08e7185e1f084e35e0672241b76d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "fc5324ce209125d1e2fa0fcd2634601c52a787aff1cd33ee833664a5af4ea2b6"},
"fine": {:hex, :fine, "0.1.4", "b19a89c1476c7c57afb5f9314aed5960b5bc95d5277de4cb5ee8e1d1616ce379", [:mix], [], "hexpm", "be3324cc454a42d80951cf6023b9954e9ff27c6daa255483b3e8d608670303f5"},
"floki": {:hex, :floki, "0.37.1", "d7aaee758c8a5b4a7495799a4260754fec5530d95b9c383c03b27359dea117cf", [:mix], [], "hexpm", "673d040cb594d31318d514590246b6dd587ed341d3b67e17c1c0eb8ce7ca6f04"},
"floki": {:hex, :floki, "0.38.0", "62b642386fa3f2f90713f6e231da0fa3256e41ef1089f83b6ceac7a3fd3abf33", [:mix], [], "hexpm", "a5943ee91e93fb2d635b612caf5508e36d37548e84928463ef9dd986f0d1abd9"},
"gen_smtp": {:hex, :gen_smtp, "1.3.0", "62c3d91f0dcf6ce9db71bcb6881d7ad0d1d834c7f38c13fa8e952f4104a8442e", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "0b73fbf069864ecbce02fe653b16d3f35fd889d0fdd4e14527675565c39d84e6"},
"gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"},
"gproc": {:hex, :gproc, "0.9.1", "f1df0364423539cf0b80e8201c8b1839e229e5f9b3ccb944c5834626998f5b8c", [:rebar3], [], "hexpm", "905088e32e72127ed9466f0bac0d8e65704ca5e73ee5a62cb073c3117916d507"},