9cd1167f85
* 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>
123 lines
3.9 KiB
Ruby
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
|