box_test.rb 5.4 KB
require File.dirname(__FILE__) + '/../test_helper'

class BoxTest < ActiveSupport::TestCase

  def setup
    Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([])
  end

  should 'retrieve environment based on owner' do
    profile = fast_create(Profile)
    box = fast_create(Box, :owner_id => profile.id, :owner_type => 'Profile')
    assert_equal profile.environment, box.environment

    box = fast_create(Box, :owner_id => Environment.default.id, :owner_type => 'Environment')
    assert_equal Environment.default, box.environment
  end

  should 'list allowed blocks for center box' do
    blocks = Box.new.tap { |b| b.position = 1 }.acceptable_blocks

    assert !blocks.include?('block')
    assert !blocks.include?('disabled-enterprise-message-block')
    assert !blocks.include?('featured-products-block')
    assert !blocks.include?('products-block')
    assert !blocks.include?('profile-info-block')
    assert !blocks.include?('profile-list-block')
    assert !blocks.include?('profile-search-block')
    assert !blocks.include?('slideshow-block')
    assert !blocks.include?('location-block')

    assert blocks.include?('article-block')
    assert blocks.include?('blog-archives-block')
    assert blocks.include?('categories-block')
    assert blocks.include?('communities-block')
    assert blocks.include?('enterprises-block')
    assert blocks.include?('fans-block')
    assert blocks.include?('favorite-enterprises-block')
    assert blocks.include?('feed-reader-block')
    assert blocks.include?('highlights-block')
    assert blocks.include?('link-list-block')
    assert blocks.include?('login-block')
    assert blocks.include?('main-block')
    assert blocks.include?('my-network-block')
    assert blocks.include?('profile-image-block')
    assert blocks.include?('raw-html-block')
    assert blocks.include?('recent-documents-block')
    assert blocks.include?('sellers-search-block')
    assert blocks.include?('tags-block')
  end

  should 'list allowed blocks for box at position 2' do
    blocks = Box.new.tap { |b| b.position = 2 }.acceptable_blocks

    assert !blocks.include?('main-block')
    assert !blocks.include?('block')
    assert !blocks.include?('profile-list-block')

    assert blocks.include?('article-block')
    assert blocks.include?('blog-archives-block')
    assert blocks.include?('categories-block')
    assert blocks.include?('communities-block')
    assert blocks.include?('disabled-enterprise-message-block')
    assert blocks.include?('enterprises-block')
    assert blocks.include?('fans-block')
    assert blocks.include?('favorite-enterprises-block')
    assert blocks.include?('featured-products-block')
    assert blocks.include?('feed-reader-block')
    assert blocks.include?('highlights-block')
    assert blocks.include?('link-list-block')
    assert blocks.include?('location-block')
    assert blocks.include?('login-block')
    assert blocks.include?('my-network-block')
    assert blocks.include?('products-block')
    assert blocks.include?('profile-image-block')
    assert blocks.include?('profile-info-block')
    assert blocks.include?('profile-search-block')
    assert blocks.include?('raw-html-block')
    assert blocks.include?('recent-documents-block')
    assert blocks.include?('sellers-search-block')
    assert blocks.include?('slideshow-block')
    assert blocks.include?('tags-block')
  end

  should 'list plugin block as allowed for box at position 1' do
    class SomePlugin < Noosfero::Plugin
      def self.extra_blocks
        { PluginBlock => {:position => 1} }
      end
    end
    class PluginBlock < Block
      def self.to_s; 'plugin-block'; end
    end
    Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([SomePlugin.new])

    blocks = build(Box, :position => 1).acceptable_blocks
    assert blocks.include?('box-test_plugin-block')
  end

  should 'list plugin block as allowed for box at position 2' do
    class SomePlugin < Noosfero::Plugin
      def self.extra_blocks
        { PluginBlock => {:position => 2} }
      end
    end
    class PluginBlock < Block
      def self.to_s; 'plugin-block'; end
    end
    Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([SomePlugin.new])

    blocks = build(Box, :position => 2).acceptable_blocks
    assert blocks.include?('box-test_plugin-block')
  end

  should 'list plugin block as allowed for the right holder' do
    class SomePlugin < Noosfero::Plugin
      def self.extra_blocks
        { PluginBlock => {:position => 1, :type => [Person, Enterprise]} }
      end
    end
    class PluginBlock < Block
      def self.to_s; 'plugin-block'; end
    end
    Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([SomePlugin.new])

    blocks = build(Box, :position => 1, :owner => Person.new).acceptable_blocks
    assert blocks.include?('box-test_plugin-block')

    blocks = build(Box, :position => 1, :owner => Enterprise.new).acceptable_blocks
    assert blocks.include?('box-test_plugin-block')

    blocks = build(Box, :position => 1, :owner => Community.new).acceptable_blocks
    assert !blocks.include?('box-test_plugin-block')
  end

  should 'list only boxes with a postion greater than zero' do
    profile = fast_create(Profile)
    box = fast_create(Box, :owner_id => profile.id, :owner_type => 'Profile', :position => 0)
    box2 = fast_create(Box, :owner_id => profile.id, :owner_type => 'Profile', :position => 1)
    assert_equal [box2], profile.boxes.with_position
  end

end