Files
fizzy/test/models/column_limits_test.rb
T
Donal McBreen 97bcdf1853 Enforce column limits via concern
SQLite columns lengths are purely informational, so we'll enforce the
limits via a concern that checks the lengths from the schema.
2025-11-25 15:32:34 +00:00

63 lines
2.5 KiB
Ruby

require "test_helper"
class ColumnLimitsTest < ActiveSupport::TestCase
test "account name rejects strings over 255 characters" do
account = Account.new(name: "a" * 256)
assert_not account.valid?
assert_includes account.errors[:name], "is too long (maximum is 255 characters)"
end
test "account name accepts strings up to 255 characters" do
account = Account.new(name: "a" * 255)
assert account.valid?
assert_not_includes account.errors[:name], "is too long (maximum is 255 characters)"
end
test "account name accepts 255 emoji characters" do
account = Account.new(name: "🎉" * 255)
assert account.valid?
assert_not_includes account.errors[:name], "is too long (maximum is 255 characters)"
end
test "account name rejects 256 emoji characters" do
account = Account.new(name: "🎉" * 256)
assert_not account.valid?
assert_includes account.errors[:name], "is too long (maximum is 255 characters)"
end
# Test text column limits (65535 bytes for TEXT)
test "step content rejects text over 65535 bytes" do
step = Step.new(content: "a" * 65536, card: cards(:logo))
assert_not step.valid?
assert_includes step.errors[:content], "is too long (maximum is 65535 bytes)"
end
test "step content accepts text up to 65535 bytes" do
step = Step.new(content: "a" * 65535, card: cards(:logo))
assert step.valid?
assert_not_includes step.errors[:content], "is too long (maximum is 65535 bytes)"
end
test "step content counts bytes not characters for text columns" do
# 20000 emoji = 20000 chars but 80000 bytes (over 65535 limit)
step = Step.new(content: "🎉" * 20000, card: cards(:logo))
assert_not step.valid?
assert_includes step.errors[:content], "is too long (maximum is 65535 bytes)"
end
# Test ActionText::RichText (inherits from ActionText::Record, not ApplicationRecord)
test "ActionText::RichText name rejects strings over 255 characters" do
rich_text = ActionText::RichText.new(name: "a" * 256, record: cards(:logo))
assert_not rich_text.valid?
assert_includes rich_text.errors[:name], "is too long (maximum is 255 characters)"
end
# Test ActiveStorage::Blob (inherits from ActiveStorage::Record, not ApplicationRecord)
test "ActiveStorage::Blob filename rejects strings over 255 characters" do
Current.account = accounts(:"37s")
blob = ActiveStorage::Blob.new(filename: "a" * 256)
assert_not blob.valid?
assert_includes blob.errors[:filename], "is too long (maximum is 255 characters)"
end
end