File size: 5,036 Bytes
c9c49ab | 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 Plausible.AuthTest do
use Plausible.DataCase, async: true
alias Plausible.Auth
test "enterprise_configured?/1 returns whether the user has an enterprise plan" do
user_without_plan = new_user()
user_with_plan = new_user() |> subscribe_to_enterprise_plan()
user_with_plan_no_subscription =
new_user() |> subscribe_to_enterprise_plan(subscription?: false)
assert Plausible.Teams.Billing.enterprise_configured?(team_of(user_with_plan))
assert Plausible.Teams.Billing.enterprise_configured?(team_of(user_with_plan_no_subscription))
refute Plausible.Teams.Billing.enterprise_configured?(team_of(user_without_plan))
refute Plausible.Teams.Billing.enterprise_configured?(nil)
end
describe "create_stats_api_key/3" do
test "creates a new api key" do
user = new_user(trial_expiry_date: Date.utc_today())
team = team_of(user)
key = Ecto.UUID.generate()
assert {:ok, %Auth.ApiKey{} = api_key} =
Auth.create_stats_api_key(user, team, "my new key", key)
assert api_key.team_id == team.id
assert api_key.user_id == user.id
end
test "errors when key already exists" do
u1 = new_user(trial_expiry_date: Date.utc_today())
t1 = team_of(u1)
u2 = new_user(trial_expiry_date: Date.utc_today())
t2 = team_of(u2)
key = Ecto.UUID.generate()
assert {:ok, %Auth.ApiKey{}} = Auth.create_stats_api_key(u1, t1, "my new key", key)
assert {:error, changeset} = Auth.create_stats_api_key(u2, t2, "my other key", key)
assert changeset.errors[:key] ==
{"has already been taken",
[constraint: :unique, constraint_name: "api_keys_key_hash_index"]}
end
@tag :ee_only
test "returns error when team is on a growth plan" do
user = new_user() |> subscribe_to_growth_plan()
team = team_of(user)
assert {:error, :upgrade_required} =
Auth.create_stats_api_key(user, team, "my new key", Ecto.UUID.generate())
end
test "creates a key for user in a team with a bunsiness plan" do
user = new_user() |> subscribe_to_business_plan()
team = team_of(user)
another_site = new_site()
add_member(another_site.team, user: user, role: :owner)
assert {:ok, %Auth.ApiKey{}} =
Auth.create_stats_api_key(user, team, "my new key", Ecto.UUID.generate())
end
end
describe "create_sites_api_key/3" do
test "creates a new api key for user on enterprise plan with SitesAPI enabled" do
user =
new_user()
|> subscribe_to_enterprise_plan(
features: [Plausible.Billing.Feature.StatsAPI, Plausible.Billing.Feature.SitesAPI]
)
team = team_of(user)
key = Ecto.UUID.generate()
assert {:ok, %Auth.ApiKey{} = api_key} =
Auth.create_sites_api_key(user, team, "my new key", key)
assert api_key.team_id == team.id
assert api_key.user_id == user.id
end
test "errors when key already exists" do
u1 =
new_user()
|> subscribe_to_enterprise_plan(
features: [Plausible.Billing.Feature.StatsAPI, Plausible.Billing.Feature.SitesAPI]
)
t1 = team_of(u1)
u2 =
new_user()
|> subscribe_to_enterprise_plan(
features: [Plausible.Billing.Feature.StatsAPI, Plausible.Billing.Feature.SitesAPI]
)
t2 = team_of(u2)
key = Ecto.UUID.generate()
assert {:ok, %Auth.ApiKey{}} = Auth.create_sites_api_key(u1, t1, "my new key", key)
assert {:error, changeset} = Auth.create_sites_api_key(u2, t2, "my other key", key)
assert changeset.errors[:key] ==
{"has already been taken",
[constraint: :unique, constraint_name: "api_keys_key_hash_index"]}
end
@tag :ee_only
test "returns error when team is on a business plan" do
user = new_user() |> subscribe_to_business_plan()
team = team_of(user)
assert {:error, :upgrade_required} =
Auth.create_sites_api_key(user, team, "my new key", Ecto.UUID.generate())
end
end
describe "delete_api_key/2" do
test "deletes the record" do
user = new_user(trial_expiry_date: Date.utc_today())
team = team_of(user)
assert {:ok, api_key} =
Auth.create_stats_api_key(user, team, "my new key", Ecto.UUID.generate())
assert :ok = Auth.delete_api_key(user, api_key.id)
refute Plausible.Repo.reload(api_key)
end
test "returns error when api key does not exist or does not belong to user" do
me = new_user(trial_expiry_date: Date.utc_today())
other_user = new_user(trial_expiry_date: Date.utc_today())
other_team = team_of(other_user)
{:ok, other_api_key} =
Auth.create_stats_api_key(other_user, other_team, "my new key", Ecto.UUID.generate())
assert {:error, :not_found} = Auth.delete_api_key(me, other_api_key.id)
assert {:error, :not_found} = Auth.delete_api_key(me, -1)
end
end
end
|