belongs_to :old_relation, :foreign_key => [:relation_id, :version], :inverse_of => :old_members
# A bit messy, referring to the current tables, should do for the data browser for now
belongs_to :member, :polymorphic => true
+
+ validates :member_role, :allow_blank => true, :length => { :maximum => 255 }, :characters => true
end
require "test_helper"
class RelationMemberTest < ActiveSupport::TestCase
+ def test_role_with_invalid_characters
+ invalid = ["\x7f<hr/>", "test@example.com\x0e-", "s/\x1ff", "aa/\ufffe",
+ "aa\x0b-,", "aa?\x08", "/;\uffff.,?", "\x0c#ping",
+ "foo\x1fbar", "foo\x7fbar", "foo\ufffebar", "foo\uffffbar"]
+ relation = create(:relation)
+ node = create(:node)
+ invalid.each do |r|
+ member = build(:relation_member, :relation => relation, :member => node, :member_role => r)
+ assert_not member.valid?, "'#{r}' should not be valid"
+ assert_predicate member.errors[:member_role], :any?
+ end
+ end
+
+ def test_role_too_long
+ relation = create(:relation)
+ node = create(:node)
+ member = build(:relation_member, :relation => relation, :member => node, :member_role => "r" * 256)
+ assert_not member.valid?, "Role should be too long"
+ assert_predicate member.errors[:member_role], :any?
+ end
end