100 lines
3.1 KiB
Ruby
100 lines
3.1 KiB
Ruby
|
require File.dirname(__FILE__) + '/../spec_helper'
|
||
|
|
||
|
describe "RoleMembership" do
|
||
|
|
||
|
describe "validations" do
|
||
|
before(:all) do
|
||
|
@roles = []
|
||
|
@roles[0] = Role.new(:name => "role0")
|
||
|
@roles[1] = Role.new(:name => "role1")
|
||
|
@roles[2] = Role.new(:name => "role2")
|
||
|
@roles[3] = Role.new(:name => "role3")
|
||
|
@roles[4] = Role.new(:name => "role4")
|
||
|
@roles[5] = Role.new(:name => "role5")
|
||
|
@roles[6] = Role.new(:name => "role6")
|
||
|
@roles[7] = Role.new(:name => "role7")
|
||
|
@roles[8] = Role.new(:name => "role8")
|
||
|
@roles[9] = Role.new(:name => "role9")
|
||
|
@roles[10] = Role.new(:name => "role10")
|
||
|
@roles[11] = Role.new(:name => "role11")
|
||
|
@roles.each {|role| role.save!}
|
||
|
end
|
||
|
|
||
|
before(:each) do
|
||
|
@membership = RoleMembership.new(:roleable_id => @roles[0].id, :roleable_type => "Role", :role_id => @roles[1].id)
|
||
|
end
|
||
|
|
||
|
it "should be valid" do
|
||
|
@membership.should be_valid
|
||
|
end
|
||
|
|
||
|
# roleable_id
|
||
|
it "should have a roleable_id" do
|
||
|
@membership.roleable_id = nil
|
||
|
@membership.should_not be_valid
|
||
|
end
|
||
|
|
||
|
it "roleable_id should be an integer" do
|
||
|
@membership.roleable_id = "asd"
|
||
|
@membership.should_not be_valid
|
||
|
end
|
||
|
|
||
|
# roleable_type
|
||
|
it "should have a roleable_type" do
|
||
|
@membership.roleable_type = nil
|
||
|
@membership.should_not be_valid
|
||
|
end
|
||
|
|
||
|
it "roleable_type should be a string" do
|
||
|
@membership.roleable_type = 123
|
||
|
@membership.should_not be_valid
|
||
|
end
|
||
|
|
||
|
it "roleable_type should have a class name format" do
|
||
|
@membership.roleable_type = "asd"
|
||
|
@membership.should_not be_valid
|
||
|
@membership.roleable_type = "User"
|
||
|
@membership.should be_valid
|
||
|
@membership.roleable_type = "Some95WierdClassN4m3"
|
||
|
@membership.should be_valid
|
||
|
end
|
||
|
|
||
|
# role_id
|
||
|
it "should have a role_id" do
|
||
|
@membership.role_id = nil
|
||
|
@membership.should_not be_valid
|
||
|
end
|
||
|
|
||
|
it "role_id should be an integer" do
|
||
|
@membership.role_id = "asd"
|
||
|
@membership.should_not be_valid
|
||
|
end
|
||
|
|
||
|
it "should not allow a role to belong to itself" do
|
||
|
@membership.role_id = @roles[0].id
|
||
|
@membership.should_not be_valid
|
||
|
end
|
||
|
|
||
|
# roles cannot belong to each other in a loop
|
||
|
it "should not a allow a role to belong to a role which belongs to it in a loop" do
|
||
|
@roles[0].roles << @roles[1]
|
||
|
@roles[1].roles << @roles[2]
|
||
|
@roles[2].roles << @roles[3]
|
||
|
@roles[2].roles << @roles[4]
|
||
|
@roles[2].roles << @roles[5]
|
||
|
@roles[3].roles << @roles[6]
|
||
|
@roles[1].roles << @roles[7]
|
||
|
@roles[3].roles << @roles[8]
|
||
|
@roles[4].roles << @roles[9]
|
||
|
@roles[4].roles << @roles[10]
|
||
|
@roles[5].roles << @roles[11]
|
||
|
@membership3 = RoleMembership.new(:roleable_id => @roles[11].id, :roleable_type => "Role", :role_id => @roles[0].id)
|
||
|
@membership3.should_not be_valid
|
||
|
@membership3.errors.full_messages.should include("A role cannot belong to a role which belongs to it.")
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@roles.each {|role| role.destroy}
|
||
|
end
|
||
|
end
|
||
|
end
|