97bcdf1853
SQLite columns lengths are purely informational, so we'll enforce the limits via a concern that checks the lengths from the schema.
63 lines
2.5 KiB
Ruby
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
|