require 'spec_helper' require 'cream/helper/role' require 'cream/configure/rails' describe Cream::Helper::Role do extend_view_with Cream::Helper::Role context 'method auto-generated when Rails initialize based on registered roles' do describe '#guest_area' do it "should execute an Admin guarded block for :admin" do view_engine do |e, view| view.stubs(:has_role?).with([:admin]).returns true res = e.run_template do %{<%= for_admin { 'hello' } %>} end res.should match /hello/ end end it "should not execute an Admin guarded block for user not :admin" do view_engine do |e, view| view.stubs(:has_role?).with([:admin]).returns false res = e.run_template do %{<%= for_admin { 'hello' } %>} end res.should be_empty end end end # desc end # context context 'admin user' do describe '#for_roles' do it "display an :admin only block" do view_engine do |e, view| view.stubs(:has_role?).with([:admin]).returns true res = e.run_template do %{<%= for_roles(:admin) { 'hello' } %>} end res.should match /hello/ end end it "should not display a :guest only block" do view_engine do |e, view| view.stubs(:has_role?).with([:guest]).returns false res = e.run_template do %{<%= for_roles(:guest) { 'hello' } %>} end res.should be_empty end end end # desc describe '#for_role' do it "display an :admin only block" do view_engine do |e, view| view.stubs(:has_role?).with([:admin]).returns true res = e.run_template do %{<%= for_role(:admin) { 'hello' } %>} end res.should match /hello/ end end it "should not display a :guest only block" do view_engine do |e, view| view.stubs(:has_role?).with([:guest]).returns false res = e.run_template do %{<%= for_role(:guest) { 'hello' } %>} end res.should be_empty end end end # desc describe '#not_for_roles' do it "should not display a block not for :admin" do view_engine do |e, view| view.stubs(:has_role?).with([:admin]).returns true res = e.run_template do %{<%= not_for_roles(:admin) { 'hello' } %>} end res.should be_empty end end it "should display a div block not for :guest" do view_engine do |e, view| view.stubs(:has_role?).with([:guest]).returns false res = e.run_template do %{<%= not_for_roles(:guest) { 'hello' } %>} end res.should match /hello/ end end end # desc describe '#not_for_role' do it "should not display a block not for :admin" do view_engine do |e, view| view.stubs(:has_role?).with([:admin]).returns true res = e.run_template do %{<%= not_for_role(:admin) { 'hello' } %>} end res.should be_empty end end it "should display a div block not for :guest" do view_engine do |e, view| view.stubs(:has_role?).with([:guest]).returns false res = e.run_template do %{<%= not_for_role(:guest) { 'hello' } %>} end res.should match /hello/ end end end # desc end describe '#has_role?' do context 'user has role :admin' do it "should make has_role? :admin be true" do user = stub() user.stubs(:has_role?).with([:admin]).returns true view_engine do |e, view| view.stubs(:current_user).returns user res = e.run_template do %{<%= has_role?(:admin) %> } end res.should match /true/ end end it "should make has_role? :guest be false" do user = stub() user.stubs(:has_role?).with([:guest]).returns false view_engine do |e, view| view.stubs(:current_user).returns user res = e.run_template do %{<%= has_role?(:guest) %> } end res.should match /false/ end end end # ctx end # dec describe '#has_roles?' do context 'user has roles :admin and :guest' do it "should make has_roles? :admin, :guest be true" do user = stub() user.stubs(:has_roles?).with([:admin, :guest]).returns true view_engine do |e, view| view.stubs(:current_user).returns user res = e.run_template do %{<%= has_roles?(:admin, :guest) %> } end res.should match /true/ end end it "should make has_role? :unknown, :guest be false" do user = stub() user.stubs(:has_roles?).with([:unknown, :guest]).returns false view_engine do |e, view| view.stubs(:current_user).returns user res = e.run_template do %{<%= has_roles?(:unknown, :guest) %> } end res.should match /false/ end end end # ctx end describe '#owner?' do it "should return false, since the user is NOT the owner of the post, but an other user" do user = stub() other_user = stub() view_engine do |e, view| view.stubs(:current_user).returns user @post.stubs(:owner).returns other_user res = e.run_template_locals :post => @post do %{<%= owner?(post) %> } end res.should match /false/ end end it "should return true, since the user is the owner of the post (default :owner relation)" do user = stub() view_engine do |e, view| view.stubs(:current_user).returns user @post.stubs(:owner).returns user res = e.run_template_locals :post => @post do %{<%= owner?(post) %> } end res.should match /true/ end end it "should return true, since the user is the owner of the post using custom ownership relation :maker" do user = stub() view_engine do |e, view| view.stubs(:current_user).returns user @post.stubs(:maker).returns user res = e.run_template_locals :post => @post do %{<%= owner?(post, :maker) %> } end res.should match /true/ end end end # desc end