box_test.rb 5.44 KB
require_relative "../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