Files
fizzy/saas/test/models/account/limited_test.rb
T
Andy Smith 9cd1167f85 Change exceeding and nearing limits to account for the 1000th card (#2345)
* Change exceeding and nearing limits to account for the 1000th card (instead of 1001)

* Add boundary condition tests for card limit checks

Tests now verify behavior at exactly the limit (1000 cards) and at the
nearing threshold (remaining = 100), covering the off-by-one fix.

---------

Co-authored-by: Jorge Manrubia <jorge@37signals.com>
2026-03-03 10:28:38 +01:00

123 lines
3.9 KiB
Ruby

require "test_helper"
class Account::LimitedTest < ActiveSupport::TestCase
test "detect nearing card limit" do
# Paid plans are never limited
accounts(:"37s").update_column(:cards_count, 1_000_000)
assert_not accounts(:"37s").nearing_plan_cards_limit?
# Free plan not near limit
accounts(:initech).update_column(:cards_count, 899)
assert_not accounts(:initech).nearing_plan_cards_limit?
# Free plan at exactly the threshold (remaining = 100)
accounts(:initech).update_column(:cards_count, 900)
assert accounts(:initech).nearing_plan_cards_limit?
# Free plan over the threshold
accounts(:initech).update_column(:cards_count, 901)
assert accounts(:initech).nearing_plan_cards_limit?
end
test "detect exceeding card limit" do
# Paid plans are never limited
accounts(:"37s").update_column(:cards_count, 1_000_000)
assert_not accounts(:"37s").exceeding_card_limit?
# Free plan under limit
accounts(:initech).update_column(:cards_count, 999)
assert_not accounts(:initech).exceeding_card_limit?
# Free plan at exactly the limit
accounts(:initech).update_column(:cards_count, 1000)
assert accounts(:initech).exceeding_card_limit?
# Free plan over limit
accounts(:initech).update_column(:cards_count, 1001)
assert accounts(:initech).exceeding_card_limit?
end
test "override limits" do
account = accounts(:initech)
account.update_column(:cards_count, 1001)
assert account.exceeding_card_limit?
assert_equal 1001, account.billed_cards_count
account.override_limits card_count: 500
assert_not account.exceeding_card_limit?
assert_equal 500, account.billed_cards_count
assert_equal 1001, account.cards_count # original unchanged
account.reset_overridden_limits
assert account.exceeding_card_limit?
assert_equal 1001, account.billed_cards_count
end
test "comped accounts are never limited" do
account = accounts(:initech)
account.update_column(:cards_count, 1_000_000)
assert account.exceeding_card_limit?
assert account.nearing_plan_cards_limit?
account.comp
assert_not account.exceeding_card_limit?
assert_not account.nearing_plan_cards_limit?
end
test "uncomping an account restores limits" do
account = accounts(:initech)
account.update_column(:cards_count, 1_000_000)
account.comp
assert_not account.exceeding_card_limit?
account.uncomp
assert account.exceeding_card_limit?
end
test "detect nearing storage limit" do
# Paid plans have large storage limits
accounts(:"37s").stubs(:bytes_used).returns(4.gigabytes)
assert_not accounts(:"37s").nearing_plan_storage_limit?
# Free plan not near limit
accounts(:initech).stubs(:bytes_used).returns(400.megabytes)
assert_not accounts(:initech).nearing_plan_storage_limit?
# Free plan near limit
accounts(:initech).stubs(:bytes_used).returns(600.megabytes)
assert accounts(:initech).nearing_plan_storage_limit?
end
test "detect exceeding storage limit" do
# Free plan under limit
accounts(:initech).stubs(:bytes_used).returns(900.megabytes)
assert_not accounts(:initech).exceeding_storage_limit?
# Free plan over limit
accounts(:initech).stubs(:bytes_used).returns(1.1.gigabytes)
assert accounts(:initech).exceeding_storage_limit?
end
test "override bytes_used limits" do
account = accounts(:initech)
account.stubs(:bytes_used).returns(1.1.gigabytes)
assert account.exceeding_storage_limit?
assert_equal 1.1.gigabytes, account.billed_bytes_used
account.override_limits bytes_used: 500.megabytes
assert_not account.exceeding_storage_limit?
assert_equal 500.megabytes, account.billed_bytes_used
assert_equal 1.1.gigabytes, account.bytes_used # original unchanged
account.reset_overridden_limits
assert account.exceeding_storage_limit?
assert_equal 1.1.gigabytes, account.billed_bytes_used
end
end