Fresh repository history for elektrine/tarakan hosted at https://git.elektrine.com/elektrine/tarakan.
88 lines
3.1 KiB
Elixir
88 lines
3.1 KiB
Elixir
defmodule TarakanWeb.BillingLiveTest do
|
|
use TarakanWeb.ConnCase, async: true
|
|
|
|
import Phoenix.LiveViewTest
|
|
|
|
alias Tarakan.Billing.Subscription
|
|
alias Tarakan.Repo
|
|
|
|
defp subscription_fixture(account, overrides) do
|
|
attrs =
|
|
Map.merge(
|
|
%{
|
|
account_id: account.id,
|
|
plan: "enterprise",
|
|
status: "active",
|
|
stripe_customer_id: "cus_lv",
|
|
stripe_subscription_id: "sub_lv_#{account.id}",
|
|
current_period_end: DateTime.utc_now()
|
|
},
|
|
overrides
|
|
)
|
|
|
|
%Subscription{}
|
|
|> Subscription.changeset(attrs)
|
|
|> Repo.insert!()
|
|
end
|
|
|
|
test "redirects anonymous visitors to login", %{conn: conn} do
|
|
assert {:error, {:redirect, %{to: "/accounts/log-in"}}} = live(conn, ~p"/accounts/billing")
|
|
end
|
|
|
|
test "shows the unsubscribed state with the managed-disclosure button", %{conn: conn} do
|
|
{:ok, view, _html} = conn |> log_in_account(account_fixture()) |> live(~p"/accounts/billing")
|
|
|
|
assert has_element?(view, "#billing-current")
|
|
assert has_element?(view, "#billing-plan", "None")
|
|
assert has_element?(view, "#billing-subscribe-enterprise")
|
|
refute has_element?(view, "#billing-manage-button")
|
|
end
|
|
|
|
test "shows the active plan, status, period end, and manage button", %{conn: conn} do
|
|
account = account_fixture()
|
|
subscription_fixture(account, %{})
|
|
|
|
{:ok, view, _html} = conn |> log_in_account(account) |> live(~p"/accounts/billing")
|
|
|
|
assert has_element?(view, "#billing-plan", "Managed disclosure")
|
|
assert has_element?(view, "#billing-status", "Active")
|
|
assert has_element?(view, "#billing-manage-button")
|
|
refute has_element?(view, "#billing-subscribe-enterprise")
|
|
end
|
|
|
|
test "renders past_due and canceled states", %{conn: conn} do
|
|
past_due = account_fixture()
|
|
subscription_fixture(past_due, %{status: "past_due"})
|
|
|
|
{:ok, view, _html} = conn |> log_in_account(past_due) |> live(~p"/accounts/billing")
|
|
assert has_element?(view, "#billing-status", "Past due")
|
|
|
|
canceled = account_fixture()
|
|
subscription_fixture(canceled, %{status: "canceled"})
|
|
|
|
{:ok, view, _html} = conn |> log_in_account(canceled) |> live(~p"/accounts/billing")
|
|
assert has_element?(view, "#billing-status", "Canceled")
|
|
assert has_element?(view, "#billing-subscribe-enterprise")
|
|
end
|
|
|
|
test "subscribe redirects to Stripe checkout", %{conn: conn} do
|
|
{:ok, view, _html} = conn |> log_in_account(account_fixture()) |> live(~p"/accounts/billing")
|
|
|
|
assert {:error, {:redirect, %{to: checkout_url}}} =
|
|
view |> element("#billing-subscribe-enterprise") |> render_click()
|
|
|
|
assert checkout_url =~ "https://checkout.stripe.com/"
|
|
end
|
|
|
|
test "manage redirects to the Stripe billing portal", %{conn: conn} do
|
|
account = account_fixture()
|
|
subscription_fixture(account, %{})
|
|
|
|
{:ok, view, _html} = conn |> log_in_account(account) |> live(~p"/accounts/billing")
|
|
|
|
assert {:error, {:redirect, %{to: portal_url}}} =
|
|
view |> element("#billing-manage-button") |> render_click()
|
|
|
|
assert portal_url =~ "https://billing.stripe.com/"
|
|
end
|
|
end
|