diff --git a/lib/plausible_web.ex b/lib/plausible_web.ex index 649b33ee4ee9..ff791ffc2b1a 100644 --- a/lib/plausible_web.ex +++ b/lib/plausible_web.ex @@ -62,8 +62,7 @@ defmodule PlausibleWeb do quote do use Phoenix.Controller, namespace: PlausibleWeb.Plugins.API import Plug.Conn - import PlausibleWeb.Plugins.API.Router.Helpers - import PlausibleWeb.Plugins.API, only: [base_uri: 0] + import PlausibleWeb.Router.Helpers alias PlausibleWeb.Plugins.API.Schemas alias PlausibleWeb.Plugins.API.Views @@ -82,7 +81,7 @@ defmodule PlausibleWeb do namespace: PlausibleWeb.Plugins.API, root: "" - alias PlausibleWeb.Plugins.API.Router.Helpers + alias PlausibleWeb.Router.Helpers import PlausibleWeb.Plugins.API.Views.Pagination, only: [render_metadata_links: 4] end end diff --git a/lib/plausible_web/plugins/api.ex b/lib/plausible_web/plugins/api.ex deleted file mode 100644 index aa3a9ce01f83..000000000000 --- a/lib/plausible_web/plugins/api.ex +++ /dev/null @@ -1,16 +0,0 @@ -defmodule PlausibleWeb.Plugins.API do - @moduledoc """ - Plausible Plugins API - """ - - @doc """ - Returns the API base URI, so that complete URLs can - be generated from forwared Router helpers. - """ - @spec base_uri() :: URI.t() - def base_uri() do - PlausibleWeb.Endpoint.url() - |> Path.join("/api/plugins") - |> URI.new!() - end -end diff --git a/lib/plausible_web/plugins/api/controllers/goals.ex b/lib/plausible_web/plugins/api/controllers/goals.ex index 4567aa29b27e..2d2c3ce4b8fd 100644 --- a/lib/plausible_web/plugins/api/controllers/goals.ex +++ b/lib/plausible_web/plugins/api/controllers/goals.ex @@ -31,7 +31,8 @@ defmodule PlausibleWeb.Plugins.API.Controllers.Goals do case API.Goals.create(site, goal_or_goals) do {:ok, goals} -> - location_headers = Enum.map(goals, &{"location", goals_url(base_uri(), :get, &1.id)}) + location_headers = + Enum.map(goals, &{"location", plugins_api_goals_url(conn, :get, &1.id)}) conn |> prepend_resp_headers(location_headers) diff --git a/lib/plausible_web/plugins/api/controllers/shared_links.ex b/lib/plausible_web/plugins/api/controllers/shared_links.ex index 84b59d03bbeb..55b0ea8536b1 100644 --- a/lib/plausible_web/plugins/api/controllers/shared_links.ex +++ b/lib/plausible_web/plugins/api/controllers/shared_links.ex @@ -66,7 +66,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinks do conn |> put_view(Views.SharedLink) |> put_status(:created) - |> put_resp_header("location", shared_links_url(base_uri(), :get, shared_link.id)) + |> put_resp_header("location", plugins_api_shared_links_url(conn, :get, shared_link.id)) |> render("shared_link.json", shared_link: shared_link, authorized_site: site) end diff --git a/lib/plausible_web/plugins/api/router.ex b/lib/plausible_web/plugins/api/router.ex deleted file mode 100644 index f6c438cd0f5f..000000000000 --- a/lib/plausible_web/plugins/api/router.ex +++ /dev/null @@ -1,36 +0,0 @@ -defmodule PlausibleWeb.Plugins.API.Router do - use PlausibleWeb, :router - - pipeline :auth do - plug(PlausibleWeb.Plugs.AuthorizePluginsAPI) - end - - pipeline :api do - plug(:accepts, ["json"]) - plug(OpenApiSpex.Plug.PutApiSpec, module: PlausibleWeb.Plugins.API.Spec) - end - - scope "/spec" do - pipe_through(:api) - get("/openapi", OpenApiSpex.Plug.RenderSpec, []) - get("/swagger-ui", OpenApiSpex.Plug.SwaggerUI, path: "/api/plugins/spec/openapi") - end - - scope "/v1", PlausibleWeb.Plugins.API.Controllers do - pipe_through([:api, :auth]) - - get("/shared_links", SharedLinks, :index) - get("/shared_links/:id", SharedLinks, :get) - put("/shared_links", SharedLinks, :create) - - get("/goals", Goals, :index) - get("/goals/:id", Goals, :get) - put("/goals", Goals, :create) - - delete("/goals/:id", Goals, :delete) - delete("/goals", Goals, :delete_bulk) - - put("/custom_props", CustomProps, :enable) - delete("/custom_props", CustomProps, :disable) - end -end diff --git a/lib/plausible_web/plugins/api/spec.ex b/lib/plausible_web/plugins/api/spec.ex index 26d0720d3157..0a436539d855 100644 --- a/lib/plausible_web/plugins/api/spec.ex +++ b/lib/plausible_web/plugins/api/spec.ex @@ -3,7 +3,7 @@ defmodule PlausibleWeb.Plugins.API.Spec do OpenAPI specification for the Plugins API """ alias OpenApiSpex.{Components, Info, OpenApi, Paths, Server} - alias PlausibleWeb.Plugins.API.Router + alias PlausibleWeb.Router @behaviour OpenApi @impl OpenApi @@ -12,7 +12,7 @@ defmodule PlausibleWeb.Plugins.API.Spec do servers: [ %Server{ description: "This server", - url: to_string(PlausibleWeb.Plugins.API.base_uri()), + url: PlausibleWeb.Endpoint.url(), variables: %{} } ], diff --git a/lib/plausible_web/plugins/api/views/goal.ex b/lib/plausible_web/plugins/api/views/goal.ex index ab7b32254e76..d81b59640c12 100644 --- a/lib/plausible_web/plugins/api/views/goal.ex +++ b/lib/plausible_web/plugins/api/views/goal.ex @@ -12,7 +12,7 @@ defmodule PlausibleWeb.Plugins.API.Views.Goal do }) do %{ goals: render_many(goals, __MODULE__, "goal.json", authorized_site: site), - meta: render_metadata_links(metadata, :goals_url, :index, conn.query_params) + meta: render_metadata_links(metadata, :plugins_api_goals_url, :index, conn.query_params) } end @@ -23,7 +23,7 @@ defmodule PlausibleWeb.Plugins.API.Views.Goal do }) do %{ goals: render_many(goals, __MODULE__, "goal.json", authorized_site: site), - meta: render_metadata_links(%{}, :goals_url, :index, conn.query_params) + meta: render_metadata_links(%{}, :plugins_api_goals_url, :index, conn.query_params) } end diff --git a/lib/plausible_web/plugins/api/views/pagination.ex b/lib/plausible_web/plugins/api/views/pagination.ex index 0b3f645222e4..b539b12160f6 100644 --- a/lib/plausible_web/plugins/api/views/pagination.ex +++ b/lib/plausible_web/plugins/api/views/pagination.ex @@ -7,7 +7,7 @@ defmodule PlausibleWeb.Plugins.API.Views.Pagination do namespace: PlausibleWeb.Plugins.API, root: "" - alias PlausibleWeb.Plugins.API.Router.Helpers + alias PlausibleWeb.Router.Helpers def render_metadata_links(meta, helper_fn, helper_fn_args, existing_params \\ %{}) do render(__MODULE__, "pagination.json", %{ @@ -21,7 +21,7 @@ defmodule PlausibleWeb.Plugins.API.Views.Pagination do |> Map.merge(existing_params) args = [ - PlausibleWeb.Plugins.API.base_uri() + PlausibleWeb.Endpoint | List.wrap(helper_fn_args) ++ [query_params] ] diff --git a/lib/plausible_web/plugins/api/views/shared_link.ex b/lib/plausible_web/plugins/api/views/shared_link.ex index bd5a71ebd1bb..0bcb726542d3 100644 --- a/lib/plausible_web/plugins/api/views/shared_link.ex +++ b/lib/plausible_web/plugins/api/views/shared_link.ex @@ -13,7 +13,7 @@ defmodule PlausibleWeb.Plugins.API.Views.SharedLink do %{ shared_links: render_many(shared_links, __MODULE__, "shared_link.json", authorized_site: site), - meta: render_metadata_links(metadata, :shared_links_url, :index, conn.query_params) + meta: render_metadata_links(metadata, :plugins_api_shared_links_url, :index, conn.query_params) } end diff --git a/lib/plausible_web/router.ex b/lib/plausible_web/router.ex index cebf2927f9cc..beea5f3e2090 100644 --- a/lib/plausible_web/router.ex +++ b/lib/plausible_web/router.ex @@ -86,8 +86,39 @@ defmodule PlausibleWeb.Router do end end - scope path: "/api/plugins" do - forward "/", PlausibleWeb.Plugins.API.Router + scope path: "/api/plugins", as: :plugins_api do + pipeline :plugins_api_auth do + plug(PlausibleWeb.Plugs.AuthorizePluginsAPI) + end + + pipeline :plugins_api do + plug(:accepts, ["json"]) + plug(OpenApiSpex.Plug.PutApiSpec, module: PlausibleWeb.Plugins.API.Spec) + end + + scope "/spec" do + pipe_through(:plugins_api) + get("/openapi", OpenApiSpex.Plug.RenderSpec, []) + get("/swagger-ui", OpenApiSpex.Plug.SwaggerUI, path: "/api/plugins/spec/openapi") + end + + scope "/v1", PlausibleWeb.Plugins.API.Controllers, assigns: %{plugins_api: true} do + pipe_through([:plugins_api, :plugins_api_auth]) + + get("/shared_links", SharedLinks, :index) + get("/shared_links/:id", SharedLinks, :get) + put("/shared_links", SharedLinks, :create) + + get("/goals", Goals, :index) + get("/goals/:id", Goals, :get) + put("/goals", Goals, :create) + + delete("/goals/:id", Goals, :delete) + delete("/goals", Goals, :delete_bulk) + + put("/custom_props", CustomProps, :enable) + delete("/custom_props", CustomProps, :disable) + end end scope "/api/stats", PlausibleWeb.Api do diff --git a/lib/plausible_web/views/error_view.ex b/lib/plausible_web/views/error_view.ex index 3f770e73ee7c..f84a1f0f159a 100644 --- a/lib/plausible_web/views/error_view.ex +++ b/lib/plausible_web/views/error_view.ex @@ -2,7 +2,7 @@ defmodule PlausibleWeb.ErrorView do use Plausible use PlausibleWeb, :view - def render("500.json", %{conn: %{private: %{PlausibleWeb.Plugins.API.Router => _}}}) do + def render("500.json", %{conn: %{assigns: %{plugins_api: true}}}) do contact_support_note = on_full_build do "If the problem persists please contact support@plausible.io" diff --git a/test/plausible_web/plugins/api/controllers/custom_props_test.exs b/test/plausible_web/plugins/api/controllers/custom_props_test.exs index 801c5f8e6e3a..fd7e5f3414e2 100644 --- a/test/plausible_web/plugins/api/controllers/custom_props_test.exs +++ b/test/plausible_web/plugins/api/controllers/custom_props_test.exs @@ -22,8 +22,8 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do describe "unauthorized calls" do for {method, url} <- [ - {:put, Routes.custom_props_url(base_uri(), :enable)}, - {:delete, Routes.custom_props_url(base_uri(), :disable)} + {:put, Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable)}, + {:delete, Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :disable)} ] do test "unauthorized call: #{method} #{url}", %{conn: conn} do conn @@ -44,7 +44,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do site = Plausible.Repo.preload(site, :owner) insert(:growth_subscription, user: site.owner) - url = Routes.custom_props_url(base_uri(), :enable) + url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable) payload = %{ custom_prop: %{key: "author"} @@ -68,7 +68,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do site = Plausible.Repo.preload(site, :owner) insert(:growth_subscription, user: site.owner) - url = Routes.custom_props_url(base_uri(), :enable) + url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable) payload = %{ custom_props: [ @@ -92,7 +92,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do describe "put /custom_prop - enable single prop" do test "validates input according to the schema", %{conn: conn, token: token, site: site} do - url = Routes.custom_props_url(base_uri(), :enable) + url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable) conn |> authenticate(site.domain, token) @@ -103,7 +103,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do end test "enables single custom prop", %{conn: conn, token: token, site: site} do - url = Routes.custom_props_url(base_uri(), :enable) + url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable) payload = %{ custom_prop: %{key: "author"} @@ -130,7 +130,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do end test "is idempotent", %{conn: conn, token: token, site: site} do - url = Routes.custom_props_url(base_uri(), :enable) + url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable) initial_conn = conn @@ -166,7 +166,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do describe "put /custom_props - bulk creation" do test "creates many custom props", %{conn: conn, token: token, site: site} do - url = Routes.custom_props_url(base_uri(), :enable) + url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable) payload = %{ custom_props: [ @@ -209,7 +209,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do test "disable one prop", %{conn: conn, site: site, token: token} do {:ok, ["author"]} = Plausible.Plugins.API.CustomProps.enable(site, "author") - url = Routes.custom_props_url(base_uri(), :enable) + url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable) payload = %{custom_prop: %{key: "author"}} @@ -226,7 +226,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.CustomPropsTest do {:ok, [_, _, _]} = Plausible.Plugins.API.CustomProps.enable(site, ["author", "category", "third"]) - url = Routes.custom_props_url(base_uri(), :enable) + url = Routes.plugins_api_custom_props_url(PlausibleWeb.Endpoint, :enable) payload = %{ custom_props: [ diff --git a/test/plausible_web/plugins/api/controllers/goals_test.exs b/test/plausible_web/plugins/api/controllers/goals_test.exs index 8b6390db2323..633b84508601 100644 --- a/test/plausible_web/plugins/api/controllers/goals_test.exs +++ b/test/plausible_web/plugins/api/controllers/goals_test.exs @@ -30,11 +30,11 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do describe "unauthorized calls" do for {method, url} <- [ - {:get, Routes.goals_url(base_uri(), :index)}, - {:get, Routes.goals_url(base_uri(), :get, 1)}, - {:put, Routes.goals_url(base_uri(), :create, %{})}, - {:delete, Routes.goals_url(base_uri(), :delete, 1)}, - {:delete, Routes.goals_url(base_uri(), :delete_bulk, %{})} + {:get, Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :index)}, + {:get, Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :get, 1)}, + {:put, Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create, %{})}, + {:delete, Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :delete, 1)}, + {:delete, Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :delete_bulk, %{})} ] do test "unauthorized call: #{method} #{url}", %{conn: conn} do conn @@ -55,7 +55,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do site = Plausible.Repo.preload(site, :owner) insert(:growth_subscription, user: site.owner) - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) payload = %{ goal_type: "Goal.Revenue", @@ -81,7 +81,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do site = Plausible.Repo.preload(site, :owner) insert(:growth_subscription, user: site.owner) - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) payload = %{ goals: [ @@ -111,7 +111,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do describe "put /goals - create a single goal" do test "validates input according to the schema", %{conn: conn, token: token, site: site} do - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) conn |> authenticate(site.domain, token) @@ -122,7 +122,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do end test "creates a custom event goal", %{conn: conn, token: token, site: site} do - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) payload = %{goal_type: "Goal.CustomEvent", goal: %{event_name: "Signup"}} @@ -146,14 +146,18 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do [location] = get_resp_header(conn, "location") assert location == - Routes.goals_url(base_uri(), :get, List.first(resp.goals).goal.id) + Routes.plugins_api_goals_url( + PlausibleWeb.Endpoint, + :get, + List.first(resp.goals).goal.id + ) assert [%{event_name: "Signup"}] = Plausible.Goals.for_site(site) end @tag :full_build_only test "creates a revenue goal", %{conn: conn, token: token, site: site} do - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) payload = %{ goal_type: "Goal.Revenue", @@ -180,7 +184,11 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do [location] = get_resp_header(conn, "location") assert location == - Routes.goals_url(base_uri(), :get, List.first(resp.goals).goal.id) + Routes.plugins_api_goals_url( + PlausibleWeb.Endpoint, + :get, + List.first(resp.goals).goal.id + ) assert [%{event_name: "Purchase", currency: :EUR}] = Plausible.Goals.for_site(site) end @@ -191,7 +199,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do token: token, site: site } do - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) payload = %{ goal_type: "Goal.Revenue", @@ -220,7 +228,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do token: token, site: site } do - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) {:ok, _} = Plausible.Goals.create(site, %{"event_name" => "Purchase", "currency" => "USD"}) @@ -240,7 +248,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do end test "creates a pageview goal", %{conn: conn, token: token, site: site} do - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) payload = %{goal_type: "Goal.Pageview", goal: %{path: "/checkout"}} assert_request_schema(payload, "Goal.CreateRequest.Pageview", spec()) @@ -263,13 +271,17 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do [location] = get_resp_header(conn, "location") assert location == - Routes.goals_url(base_uri(), :get, List.first(resp.goals).goal.id) + Routes.plugins_api_goals_url( + PlausibleWeb.Endpoint, + :get, + List.first(resp.goals).goal.id + ) assert [%{page_path: "/checkout"}] = Plausible.Goals.for_site(site) end test "is idempotent", %{conn: conn, token: token, site: site} do - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) initial_conn = conn @@ -296,7 +308,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do describe "put /goals - bulk creation" do @tag :full_build_only test "creates a goal of each type", %{conn: conn, token: token, site: site} do - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) payload = %{ goals: [ @@ -330,9 +342,26 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do [l1, l2, l3] = get_resp_header(conn, "location") - assert l1 == Routes.goals_url(base_uri(), :get, Enum.at(resp.goals, 0).goal.id) - assert l2 == Routes.goals_url(base_uri(), :get, Enum.at(resp.goals, 1).goal.id) - assert l3 == Routes.goals_url(base_uri(), :get, Enum.at(resp.goals, 2).goal.id) + assert l1 == + Routes.plugins_api_goals_url( + PlausibleWeb.Endpoint, + :get, + Enum.at(resp.goals, 0).goal.id + ) + + assert l2 == + Routes.plugins_api_goals_url( + PlausibleWeb.Endpoint, + :get, + Enum.at(resp.goals, 1).goal.id + ) + + assert l3 == + Routes.plugins_api_goals_url( + PlausibleWeb.Endpoint, + :get, + Enum.at(resp.goals, 2).goal.id + ) assert Enum.count(resp.goals) == 3 @@ -347,7 +376,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do # if this test fails due to implementation change, consider what to do with the pagination meta # object returned in the response and also revise how funnels are created based on a list of goals # - the funnels creation endpoint will likely reuse this schema's constraints - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) payload = Enum.map(1..9, fn i -> @@ -371,7 +400,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do @tag :full_build_only test "is idempotent", %{conn: conn, token: token, site: site} do - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) initial_conn = conn @@ -410,7 +439,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do token: token, site: site } do - url = Routes.goals_url(base_uri(), :create) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :create) initial_conn = conn @@ -438,7 +467,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do describe "get /goals/:id" do test "validates input out of the box", %{conn: conn, token: token, site: site} do - url = Routes.goals_url(base_uri(), :get, "hello") + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :get, "hello") resp = conn @@ -455,7 +484,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do {:ok, goal} = Plausible.Goals.create(site, %{"event_name" => "Purchase", "currency" => "EUR"}) - url = Routes.goals_url(base_uri(), :get, goal.id) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :get, goal.id) resp = conn @@ -473,7 +502,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do test "retrieves pageview goal by ID", %{conn: conn, site: site, token: token} do {:ok, goal} = Plausible.Goals.create(site, %{"page_path" => "/checkout"}) - url = Routes.goals_url(base_uri(), :get, goal.id) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :get, goal.id) resp = conn @@ -491,7 +520,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do test "retrieves custom event goal by ID", %{conn: conn, site: site, token: token} do {:ok, goal} = Plausible.Goals.create(site, %{"event_name" => "Signup"}) - url = Routes.goals_url(base_uri(), :get, goal.id) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :get, goal.id) resp = conn @@ -513,7 +542,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do token: token, site: site } do - url = Routes.goals_url(base_uri(), :index) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :index) resp = conn @@ -538,7 +567,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do {:ok, g2} = Plausible.Goals.create(site, %{"event_name" => "Purchase", "currency" => "EUR"}) {:ok, g3} = Plausible.Goals.create(site, %{"page_path" => "/checkout"}) - url = Routes.goals_url(base_uri(), :index) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :index) resp = conn @@ -570,7 +599,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do insert(:goal, site: site, event_name: "Goal #{i}") end - url = Routes.goals_url(base_uri(), :index, limit: 2) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :index, limit: 2) initial_conn = authenticate(conn, site.domain, token) @@ -612,7 +641,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do {:ok, %{id: goal_id}} = Plausible.Goals.create(site, %{"event_name" => "Purchase", "currency" => "USD"}) - url = Routes.goals_url(base_uri(), :delete, goal_id) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :delete, goal_id) conn |> authenticate(site.domain, token) @@ -623,7 +652,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do end test "is idempotent", %{conn: conn, site: site, token: token} do - url = Routes.goals_url(base_uri(), :delete, 666) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :delete, 666) conn |> authenticate(site.domain, token) @@ -643,7 +672,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.GoalsTest do {:ok, g3} = Plausible.Goals.create(site, %{"page_path" => "/home"}) - url = Routes.goals_url(base_uri(), :delete_bulk) + url = Routes.plugins_api_goals_url(PlausibleWeb.Endpoint, :delete_bulk) payload = %{ goal_ids: [ diff --git a/test/plausible_web/plugins/api/controllers/shared_links_test.exs b/test/plausible_web/plugins/api/controllers/shared_links_test.exs index f7810da22aaa..5fceb04d33d7 100644 --- a/test/plausible_web/plugins/api/controllers/shared_links_test.exs +++ b/test/plausible_web/plugins/api/controllers/shared_links_test.exs @@ -13,9 +13,9 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do describe "unauthorized calls" do for {method, url} <- [ - {:get, Routes.shared_links_url(base_uri(), :get, 1)}, - {:put, Routes.shared_links_url(base_uri(), :create)}, - {:get, Routes.shared_links_url(base_uri(), :index)} + {:get, Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :get, 1)}, + {:put, Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :create)}, + {:get, Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :index)} ] do test "unauthorized call: #{method} #{url}", %{conn: conn} do conn @@ -28,7 +28,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do describe "get /shared_links/:id" do test "validates input out of the box", %{conn: conn, token: token, site: site} do - url = Routes.shared_links_url(base_uri(), :get, "hello") + url = Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :get, "hello") resp = conn @@ -43,7 +43,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do test "retrieve shared link by ID", %{conn: conn, site: site, token: token} do shared_link = insert(:shared_link, name: "Some Link Name", site: site) - url = Routes.shared_links_url(base_uri(), :get, shared_link.id) + url = Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :get, shared_link.id) resp = conn @@ -61,7 +61,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do end test "fails to retrieve non-existing link", %{conn: conn, site: site, token: token} do - url = Routes.shared_links_url(base_uri(), :get, 666) + url = Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :get, 666) conn |> authenticate(site.domain, token) @@ -72,7 +72,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do test "fails to retrieve link from another site", %{conn: conn, site: site, token: token} do shared_link = insert(:shared_link, name: "Some Link Name", site: build(:site)) - url = Routes.shared_links_url(base_uri(), :get, shared_link.id) + url = Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :get, shared_link.id) conn |> authenticate(site.domain, token) @@ -88,7 +88,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do site: site, token: token } do - url = Routes.shared_links_url(base_uri(), :create) + url = Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :create) initial_conn = authenticate(conn, site.domain, token) @@ -114,7 +114,11 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do [location] = get_resp_header(conn, "location") assert location == - Routes.shared_links_url(base_uri(), :get, resp.shared_link.id) + Routes.plugins_api_shared_links_url( + PlausibleWeb.Endpoint, + :get, + resp.shared_link.id + ) assert ^resp = initial_conn @@ -128,7 +132,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do site: site, token: token } do - url = Routes.shared_links_url(base_uri(), :create) + url = Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :create) initial_conn = authenticate(conn, site.domain, token) @@ -161,7 +165,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do end test "validates input out of the box", %{conn: conn, token: token, site: site} do - url = Routes.shared_links_url(base_uri(), :create) + url = Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :create) resp = conn @@ -181,7 +185,7 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do token: token, site: site } do - url = Routes.shared_links_url(base_uri(), :index) + url = Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :index) resp = conn @@ -205,7 +209,8 @@ defmodule PlausibleWeb.Plugins.API.Controllers.SharedLinksTest do insert(:shared_link, site: site, name: "Shared Link #{i}") end - url = Routes.shared_links_url(base_uri(), :index, limit: 2) + url = + Routes.plugins_api_shared_links_url(PlausibleWeb.Endpoint, :index, limit: 2) initial_conn = authenticate(conn, site.domain, token) diff --git a/test/support/plugins_api_case.ex b/test/support/plugins_api_case.ex index 3a9eff271550..246bece30066 100644 --- a/test/support/plugins_api_case.ex +++ b/test/support/plugins_api_case.ex @@ -15,13 +15,12 @@ defmodule PlausibleWeb.PluginsAPICase do use Plausible.TestUtils import Plug.Conn import Phoenix.ConnTest - import PlausibleWeb.Plugins.API, only: [base_uri: 0] import PlausibleWeb.Plugins.API.Spec, only: [spec: 0] import Plausible.Factory import OpenApiSpex.TestAssertions - alias PlausibleWeb.Plugins.API.Router.Helpers, as: Routes + alias PlausibleWeb.Router.Helpers, as: Routes alias PlausibleWeb.Plugins.API.Schemas def authenticate(conn, domain, raw_token) do