mirror of
https://github.com/plausible/analytics.git
synced 2024-12-25 02:24:55 +03:00
d3094ffdb7
* Remove allowance_required field from grace_period Since we are now preventing customers from subscribing to a plan that does not accommodate their pageview usage, there is no need for an extra check on removing the grace period after a successful upgrade. This extra check is the reason why the automatic unlocks have recently failed in several cases. * refactor outgrown subscription notices * make a test actually test the described functionality * Apply greater pageview allowance margin only for trial upgrades ...in order to prevent cancelled or paused subscriptions from subscribing to plans that would still leave their account locked. * Mark the entire ChoosePlanTest module full build only * remove account locking guide This is irrelevant for self-hosters, and the internal knowledge base is a better place for this document. Moved it there. * refactor Keyword get clause * add a pattern matching assertion in code
132 lines
3.5 KiB
Elixir
132 lines
3.5 KiB
Elixir
defmodule Plausible.Workers.LockSitesTest do
|
|
use Plausible.DataCase, async: true
|
|
require Plausible.Billing.Subscription.Status
|
|
alias Plausible.Workers.LockSites
|
|
alias Plausible.Billing.Subscription
|
|
|
|
test "does not lock enterprise site on grace period" do
|
|
user =
|
|
:user
|
|
|> build()
|
|
|> Plausible.Auth.GracePeriod.start_manual_lock_changeset()
|
|
|> Plausible.Repo.insert!()
|
|
|
|
site = insert(:site, members: [user])
|
|
|
|
LockSites.perform(nil)
|
|
|
|
refute Repo.reload!(site).locked
|
|
end
|
|
|
|
test "does not lock trial user's site" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: 1))
|
|
site = insert(:site, members: [user])
|
|
|
|
LockSites.perform(nil)
|
|
|
|
refute Repo.reload!(site).locked
|
|
end
|
|
|
|
test "locks site for user whose trial has expired" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: -1))
|
|
site = insert(:site, members: [user])
|
|
|
|
LockSites.perform(nil)
|
|
|
|
assert Repo.reload!(site).locked
|
|
end
|
|
|
|
test "does not lock active subsriber's sites" do
|
|
user = insert(:user)
|
|
insert(:subscription, status: Subscription.Status.active(), user: user)
|
|
site = insert(:site, members: [user])
|
|
|
|
LockSites.perform(nil)
|
|
|
|
refute Repo.reload!(site).locked
|
|
end
|
|
|
|
test "does not lock user who is past due" do
|
|
user = insert(:user)
|
|
insert(:subscription, status: Subscription.Status.past_due(), user: user)
|
|
site = insert(:site, members: [user])
|
|
|
|
LockSites.perform(nil)
|
|
|
|
refute Repo.reload!(site).locked
|
|
end
|
|
|
|
test "does not lock user who cancelled subscription but it hasn't expired yet" do
|
|
user = insert(:user)
|
|
insert(:subscription, status: Subscription.Status.deleted(), user: user)
|
|
site = insert(:site, members: [user])
|
|
|
|
LockSites.perform(nil)
|
|
|
|
refute Repo.reload!(site).locked
|
|
end
|
|
|
|
test "locks user who cancelled subscription and the cancelled subscription has expired" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: -1))
|
|
|
|
insert(:subscription,
|
|
status: Subscription.Status.deleted(),
|
|
next_bill_date: Timex.today() |> Timex.shift(days: -1),
|
|
user: user
|
|
)
|
|
|
|
site = insert(:site, members: [user])
|
|
|
|
LockSites.perform(nil)
|
|
|
|
assert Repo.reload!(site).locked
|
|
end
|
|
|
|
test "does not lock if user has an old cancelled subscription and a new active subscription" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: -1))
|
|
|
|
insert(:subscription,
|
|
status: Subscription.Status.deleted(),
|
|
next_bill_date: Timex.today() |> Timex.shift(days: -1),
|
|
user: user,
|
|
inserted_at: Timex.now() |> Timex.shift(days: -1)
|
|
)
|
|
|
|
insert(:subscription, status: Subscription.Status.active(), user: user)
|
|
|
|
site = insert(:site, members: [user])
|
|
|
|
LockSites.perform(nil)
|
|
|
|
refute Repo.reload!(site).locked
|
|
end
|
|
|
|
describe "locking" do
|
|
test "only locks sites that the user owns" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: -1))
|
|
|
|
owner_site =
|
|
insert(:site,
|
|
memberships: [
|
|
build(:site_membership, user: user, role: :owner)
|
|
]
|
|
)
|
|
|
|
viewer_site =
|
|
insert(:site,
|
|
memberships: [
|
|
build(:site_membership, user: user, role: :viewer)
|
|
]
|
|
)
|
|
|
|
LockSites.perform(nil)
|
|
|
|
owner_site = Repo.reload!(owner_site)
|
|
viewer_site = Repo.reload!(viewer_site)
|
|
|
|
assert owner_site.locked
|
|
refute viewer_site.locked
|
|
end
|
|
end
|
|
end
|