| defmodule PlausibleWeb.Live.Components.VerificationTest do |
| use PlausibleWeb.ConnCase, async: true |
|
|
| on_ee do |
| import Phoenix.LiveViewTest, only: [render_component: 2] |
|
|
| alias Plausible.InstallationSupport.{State, Verification} |
|
|
| @moduletag :capture_log |
|
|
| @component PlausibleWeb.Live.Components.Verification |
| @progress ~s|#verification-ui p#progress| |
|
|
| @pulsating_circle ~s|div#verification-ui div.pulsating-circle| |
| @check_circle ~s|div#verification-ui #check-circle| |
| @error_circle ~s|div#verification-ui #error-circle| |
| @recommendations ~s|#recommendation| |
| @super_admin_report ~s|#super-admin-report| |
|
|
| test "renders initial state" do |
| html = render_component(@component, domain: "example.com") |
| assert element_exists?(html, @progress) |
|
|
| assert text_of_element(html, @progress) == |
| "We're visiting your site to ensure that everything is working" |
|
|
| assert element_exists?(html, @pulsating_circle) |
| refute class_of_element(html, @pulsating_circle) =~ "hidden" |
| refute element_exists?(html, @recommendations) |
| refute element_exists?(html, @check_circle) |
| refute element_exists?(html, @super_admin_report) |
| end |
|
|
| test "renders error badge on error" do |
| html = render_component(@component, domain: "example.com", success?: false, finished?: true) |
| refute element_exists?(html, @pulsating_circle) |
| refute element_exists?(html, @check_circle) |
| refute element_exists?(html, @recommendations) |
| assert element_exists?(html, @error_circle) |
| end |
|
|
| test "renders diagnostic interpretation" do |
| interpretation = |
| Verification.Checks.interpret_diagnostics(%State{ |
| url: "https://example.com", |
| data_domain: "example.com", |
| diagnostics: %Verification.Diagnostics{service_error: %{code: :domain_not_found}} |
| }) |
|
|
| html = |
| render_component(@component, |
| domain: "example.com", |
| success?: false, |
| finished?: true, |
| interpretation: interpretation |
| ) |
|
|
| assert [recommendation] = html |> find(@recommendations) |> Enum.map(&text/1) |
| assert recommendation =~ "check that the domain you entered is correct" |
|
|
| refute element_exists?(html, @super_admin_report) |
| end |
|
|
| test "renders super-admin report" do |
| state = %State{ |
| url: "https://example.com", |
| data_domain: "example.com", |
| diagnostics: %Verification.Diagnostics{} |
| } |
|
|
| interpretation = Verification.Checks.interpret_diagnostics(state) |
|
|
| html = |
| render_component(@component, |
| domain: "example.com", |
| success?: false, |
| finished?: true, |
| interpretation: interpretation, |
| verification_state: state, |
| super_admin?: true |
| ) |
|
|
| assert element_exists?(html, @super_admin_report) |
| assert text_of_element(html, @super_admin_report) =~ "Plausible is on window: nil" |
| end |
|
|
| test "hides pulsating circle when finished, shows check circle" do |
| html = |
| render_component(@component, |
| domain: "example.com", |
| success?: true, |
| finished?: true |
| ) |
|
|
| refute element_exists?(html, @pulsating_circle) |
| assert element_exists?(html, @check_circle) |
| end |
|
|
| test "renders a progress message" do |
| html = render_component(@component, domain: "example.com", message: "Arbitrary message") |
|
|
| assert text_of_element(html, @progress) == "Arbitrary message" |
| end |
|
|
| test "renders contact link on >3 attempts" do |
| html = render_component(@component, domain: "example.com", attempts: 2, finished?: true) |
| refute html =~ "Need further help with your installation?" |
| refute element_exists?(html, ~s|a[href="https://plausible.io/contact"]|) |
|
|
| html = render_component(@component, domain: "example.com", attempts: 3, finished?: true) |
| assert html =~ "Need further help with your installation?" |
| assert element_exists?(html, ~s|a[href="https://plausible.io/contact"]|) |
| end |
|
|
| test "renders link to verify installation at a different URL" do |
| interpretation = |
| Verification.Checks.interpret_diagnostics(%State{ |
| url: "example.com", |
| diagnostics: %Verification.Diagnostics{ |
| plausible_is_on_window: false, |
| plausible_is_initialized: false, |
| service_error: %{code: :domain_not_found} |
| } |
| }) |
|
|
| assert interpretation.data.offer_custom_url_input == true |
|
|
| expected_link_href = |
| PlausibleWeb.Router.Helpers.site_path(PlausibleWeb.Endpoint, :verification, "example.com") |
|
|
| html = |
| render_component(@component, |
| domain: "example.com", |
| finished?: true, |
| success?: false, |
| interpretation: interpretation |
| ) |
|
|
| assert text_of_element(html, "#verify-custom-url-link") =~ "different URL?" |
| assert text_of_attr(html, "#verify-custom-url-link a", "href") =~ expected_link_href |
| assert text_of_attr(html, "#verify-custom-url-link a", "href") =~ "custom_url=true" |
| end |
|
|
| test "offers escape paths: settings and installation instructions on failure" do |
| html = |
| render_component(@component, |
| domain: "example.com", |
| success?: false, |
| finished?: true, |
| installation_type: "wordpress", |
| flow: PlausibleWeb.Flows.review() |
| ) |
|
|
| assert element_exists?(html, ~s|a[href="/example.com/settings/general"]|) |
|
|
| assert element_exists?( |
| html, |
| ~s|a[href="/example.com/installation?flow=review&installation_type=wordpress"]| |
| ) |
| end |
| end |
| end |
|
|