65 lines
1.5 KiB
Ruby
65 lines
1.5 KiB
Ruby
|
require 'spec_helper'
|
||
|
require 'active_support/ordered_hash'
|
||
|
|
||
|
describe "attribute overrides" do
|
||
|
before do
|
||
|
define_model('User', :admin => :boolean)
|
||
|
define_model('Post', :title => :string,
|
||
|
:secure => :boolean,
|
||
|
:user_id => :integer) do
|
||
|
belongs_to :user
|
||
|
|
||
|
def secure=(value)
|
||
|
return unless user && user.admin?
|
||
|
write_attribute(:secure, value)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
FactoryGirl.define do
|
||
|
factory :user do
|
||
|
factory :admin do
|
||
|
admin true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
factory :post do
|
||
|
user
|
||
|
title "default title"
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
let(:admin) { FactoryGirl.create(:admin) }
|
||
|
|
||
|
let(:post_attributes) do
|
||
|
attributes = ActiveSupport::OrderedHash.new
|
||
|
attributes[:secure] = false
|
||
|
attributes
|
||
|
end
|
||
|
|
||
|
let(:non_admin_post_attributes) do
|
||
|
post_attributes[:user] = FactoryGirl.create(:user)
|
||
|
post_attributes
|
||
|
end
|
||
|
|
||
|
let(:admin_post_attributes) do
|
||
|
post_attributes[:user] = admin
|
||
|
post_attributes
|
||
|
end
|
||
|
|
||
|
context "with an admin posting" do
|
||
|
subject { FactoryGirl.create(:post, admin_post_attributes) }
|
||
|
its(:secure) { should == false }
|
||
|
end
|
||
|
|
||
|
context "with a non-admin posting" do
|
||
|
subject { FactoryGirl.create(:post, non_admin_post_attributes) }
|
||
|
its(:secure) { should be_nil }
|
||
|
end
|
||
|
|
||
|
context "with no user posting" do
|
||
|
subject { FactoryGirl.create(:post, post_attributes) }
|
||
|
its(:secure) { should be_nil }
|
||
|
end
|
||
|
end
|