diff --git a/lib/towerops_web/live/device_live/show.html.heex b/lib/towerops_web/live/device_live/show.html.heex index bb5a41c2..d3d8acae 100644 --- a/lib/towerops_web/live/device_live/show.html.heex +++ b/lib/towerops_web/live/device_live/show.html.heex @@ -67,29 +67,36 @@ /> · - <%= if @agent_info.type == :cloud do %> - - <.icon name="hero-cloud" class="h-3 w-3" /> - <%= if @agent_info.agent_token_id do %> - {t("Cloud")} ({@agent_info.name}) - <% else %> - {t("Cloud")} - <% end %> + + + {t("Agent:")} - <% else %> - - <.icon name="hero-server" class="h-3 w-3" /> - {@agent_info.name} - - <%= if @agent_info.is_offline do %> - - <.icon name="hero-exclamation-triangle" class="h-3 w-3" /> Offline + <%= if @agent_info.type == :cloud do %> + + <.icon name="hero-cloud" class="h-3 w-3" /> + <%= if @agent_info.agent_token_id do %> + {t("Cloud")} ({@agent_info.name}) + <% else %> + {t("Cloud")} + <% end %> + <% else %> + <%= if @agent_info.is_offline do %> + + <.icon name="hero-exclamation-triangle" class="h-3 w-3" /> + {@agent_info.name} · Offline + + <% else %> + + <.icon name="hero-server" class="h-3 w-3" /> + {@agent_info.name} + + <% end %> <% end %> - <% end %> +
diff --git a/test/towerops_web/graphql/resolvers/time_series_test.exs b/test/towerops_web/graphql/resolvers/time_series_test.exs index 57aa1f0c..e598c9aa 100644 --- a/test/towerops_web/graphql/resolvers/time_series_test.exs +++ b/test/towerops_web/graphql/resolvers/time_series_test.exs @@ -1,5 +1,5 @@ defmodule ToweropsWeb.GraphQL.Resolvers.TimeSeriesTest do - use ToweropsWeb.ConnCase, async: true + use ToweropsWeb.ConnCase, async: false import Towerops.AccountsFixtures import Towerops.DevicesFixtures diff --git a/test/towerops_web/live/org/settings_live_test.exs b/test/towerops_web/live/org/settings_live_test.exs index 63886824..feb74649 100644 --- a/test/towerops_web/live/org/settings_live_test.exs +++ b/test/towerops_web/live/org/settings_live_test.exs @@ -218,9 +218,13 @@ defmodule ToweropsWeb.Org.SettingsLiveTest do property "unicode names within length bounds are accepted", %{organization: org} do check all(name <- string(:printable, min_length: 2, max_length: 100), max_runs: 50) do - changeset = Organizations.change_organization(org, %{name: name}) - # Should not have a name error (length is valid) - refute Keyword.has_key?(changeset.errors, :name) + # String.length/1 counts grapheme clusters, which may be fewer than code points + # when combining characters are present (e.g. a base char + combining mark = 1 grapheme). + # Only assert when the grapheme count satisfies the validation bounds. + if String.length(name) >= 2 and String.length(name) <= 100 do + changeset = Organizations.change_organization(org, %{name: name}) + refute Keyword.has_key?(changeset.errors, :name) + end end end end