File size: 5,093 Bytes
6778ee0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | defmodule PlausibleWeb.Api.InternalControllerTest do
use PlausibleWeb.ConnCase, async: true
use Plausible.Repo
describe "GET /api/sites" do
setup [:create_user, :log_in]
test "returns a list of site domains for the current user", %{conn: conn, user: user} do
site = new_site(owner: user)
site2 = new_site(owner: user)
conn = get(conn, "/api/sites")
%{"data" => sites} = json_response(conn, 200)
assert %{"domain" => site.domain} in sites
assert %{"domain" => site2.domain} in sites
end
test "returns a list of max 9 site domains for the current user, putting pinned first", %{
conn: conn,
user: user
} do
inserted =
for i <- 1..10 do
i = to_string(i)
new_site(owner: user, domain: "site#{String.pad_leading(i, 2, "0")}.example.com")
end
_rogue = new_site(domain: "site00.example.com")
inviter = new_user()
site = new_site(owner: inviter, domain: "friend.example.com")
invite_guest(site, user, inviter: inviter, role: :viewer)
invite_guest(List.first(inserted), user, inviter: inviter, role: :viewer)
{:ok, _} =
Plausible.Sites.toggle_pin(user, Plausible.Sites.get_by_domain!("site07.example.com"))
{:ok, _} =
Plausible.Sites.toggle_pin(user, Plausible.Sites.get_by_domain!("site05.example.com"))
conn = get(conn, "/api/sites")
%{"data" => sites} =
json_response(conn, 200)
assert Enum.count(sites) == 9
assert [
%{"domain" => "site05.example.com"},
%{"domain" => "site07.example.com"},
%{"domain" => "site01.example.com"} | _
] = sites
assert %{"domain" => "site09.example.com"} in sites
refute %{"domain" => "sites10.example.com"} in sites
end
end
describe "GET /api/sites - user not logged in" do
test "returns 401 unauthorized", %{conn: conn} do
conn = get(conn, "/api/sites")
assert json_response(conn, 401) == %{
"error" => "You need to be logged in to request a list of sites"
}
end
end
describe "PUT /api/:domain/disable-feature" do
setup [:create_user, :log_in]
test "when the logged-in user is an admin of the site", %{conn: conn, user: user} do
site = new_site()
add_guest(site, user: user, role: :editor)
conn = put(conn, "/api/#{site.domain}/disable-feature", %{"feature" => "conversions"})
assert json_response(conn, 200) == "ok"
assert %{conversions_enabled: false} = Plausible.Sites.get_by_domain(site.domain)
end
test "can disable conversions, funnels, and props with admin access", %{
conn: conn,
user: user
} do
site = new_site()
add_guest(site, user: user, role: :editor)
put(conn, "/api/#{site.domain}/disable-feature", %{"feature" => "conversions"})
put(conn, "/api/#{site.domain}/disable-feature", %{"feature" => "funnels"})
put(conn, "/api/#{site.domain}/disable-feature", %{"feature" => "props"})
assert %{conversions_enabled: false, funnels_enabled: false, props_enabled: false} =
Plausible.Sites.get_by_domain(site.domain)
end
test "when the logged-in user is an owner of the site", %{conn: conn, user: user} do
site = new_site(owner: user)
conn = put(conn, "/api/#{site.domain}/disable-feature", %{"feature" => "conversions"})
assert json_response(conn, 200) == "ok"
assert %{conversions_enabled: false} = Plausible.Sites.get_by_domain(site.domain)
end
test "returns 401 when the logged-in user is a viewer of the site", %{conn: conn, user: user} do
site = new_site()
add_guest(site, user: user, role: :viewer)
conn = put(conn, "/api/#{site.domain}/disable-feature", %{"feature" => "conversions"})
assert json_response(conn, 401) == %{
"error" => "You need to be logged in as the owner or admin account of this site"
}
assert %{conversions_enabled: true} = Plausible.Sites.get_by_domain(site.domain)
end
test "returns 401 when the logged-in user doesn't have site access at all", %{conn: conn} do
site = new_site()
conn = put(conn, "/api/#{site.domain}/disable-feature", %{"feature" => "conversions"})
assert json_response(conn, 401) == %{
"error" => "You need to be logged in as the owner or admin account of this site"
}
assert %{conversions_enabled: true} = Plausible.Sites.get_by_domain(site.domain)
end
end
describe "PUT /api/:domain/disable-feature - user not logged in" do
test "returns 401 unauthorized", %{conn: conn} do
site = insert(:site)
conn = put(conn, "/api/#{site.domain}/disable-feature", %{"feature" => "conversions"})
assert json_response(conn, 401) == %{
"error" => "You need to be logged in as the owner or admin account of this site"
}
assert %{conversions_enabled: true} = Plausible.Sites.get_by_domain(site.domain)
end
end
end
|