diff --git a/app/controllers/admin/environment_design_controller.rb b/app/controllers/admin/environment_design_controller.rb index 2bd2c6d..7dac755 100644 --- a/app/controllers/admin/environment_design_controller.rb +++ b/app/controllers/admin/environment_design_controller.rb @@ -3,7 +3,7 @@ class EnvironmentDesignController < BoxOrganizerController protect 'edit_environment_design', :environment def available_blocks - @available_blocks ||= [ LoginBlock, EnvironmentStatisticsBlock, RecentDocumentsBlock, EnterprisesBlock, CommunitiesBlock, PeopleBlock, SellersSearchBlock, LinkListBlock, FeedReaderBlock, SlideshowBlock ] + @available_blocks ||= [ ArticleBlock, LoginBlock, EnvironmentStatisticsBlock, RecentDocumentsBlock, EnterprisesBlock, CommunitiesBlock, PeopleBlock, SellersSearchBlock, LinkListBlock, FeedReaderBlock, SlideshowBlock ] end end diff --git a/app/models/article_block.rb b/app/models/article_block.rb index 45ecb3c..3be73a7 100644 --- a/app/models/article_block.rb +++ b/app/models/article_block.rb @@ -40,4 +40,9 @@ class ArticleBlock < Block @article = obj end + def available_articles + return [] if self.box.nil? or self.box.owner.nil? + self.box.owner.kind_of?(Environment) ? self.box.owner.portal_community.articles : self.box.owner.articles + end + end diff --git a/app/views/box_organizer/_article_block.rhtml b/app/views/box_organizer/_article_block.rhtml index d388aa3..cc26300 100644 --- a/app/views/box_organizer/_article_block.rhtml +++ b/app/views/box_organizer/_article_block.rhtml @@ -1,2 +1,9 @@ -<% articles = @block.box.owner.articles.select {|article| !article.folder? } %> -<%= select('block', 'article_id', articles.map {|item| [ item.path, item.id]}) %> + +<% if @block.box.owner.kind_of?(Environment) and @block.box.owner.portal_community.nil? %> +

+ <%= _("You don't have an community defined as the portal community. Define it before use this block properly.") %> +

+<% else %> + <% articles = @block.available_articles.select {|article| !article.folder? } %> + <%= select('block', 'article_id', articles.map {|item| [ item.path, item.id]}) %> +<% end %> diff --git a/test/functional/environment_design_controller_test.rb b/test/functional/environment_design_controller_test.rb index 3050732..a70d40c 100644 --- a/test/functional/environment_design_controller_test.rb +++ b/test/functional/environment_design_controller_test.rb @@ -5,6 +5,9 @@ require 'environment_design_controller' class EnvironmentDesignController; def rescue_action(e) raise e end; end class EnvironmentDesignControllerTest < Test::Unit::TestCase + + ALL_BLOCKS = [ArticleBlock, LoginBlock, EnvironmentStatisticsBlock, RecentDocumentsBlock, EnterprisesBlock, CommunitiesBlock, PeopleBlock, SellersSearchBlock, LinkListBlock, FeedReaderBlock, SlideshowBlock ] + def setup @controller = EnvironmentDesignController.new @request = ActionController::TestRequest.new @@ -23,12 +26,14 @@ class EnvironmentDesignControllerTest < Test::Unit::TestCase assert(@controller.available_blocks.all? {|item| item.new.is_a? Block}) end - should 'LinkListBlock is available' do - assert_includes @controller.available_blocks, LinkListBlock + ALL_BLOCKS.map do |block| + define_method "test_should_#{block.to_s}_is_available" do + assert_includes @controller.available_blocks,block + end end - should 'SlideshowBlock be available' do - assert_includes @controller.available_blocks, SlideshowBlock + should 'all available block in test' do + assert_equal ALL_BLOCKS, @controller.available_blocks end should 'be able to edit LinkListBlock' do @@ -51,6 +56,125 @@ class EnvironmentDesignControllerTest < Test::Unit::TestCase assert_equal [{'name' => 'link 1', 'address' => '/address_1'}], l.links end + should 'be able to edit ArticleBlock with portal community' do + login_as(create_admin_user(Environment.default)) + l = ArticleBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << l + community = mock() + Environment.any_instance.stubs(:portal_community).returns(community) + article = mock() + community.stubs(:articles).returns([article]) + article.expects(:folder?).returns(false) + article.expects(:path).returns('some_path') + article.expects(:id).returns(1) + get :edit, :id => l.id + assert_tag :tag => 'select', :attributes => { :id => 'block_article_id' } + end + + should 'be able to edit ArticleBlock without portal community' do + login_as(create_admin_user(Environment.default)) + l = ArticleBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << l + community = mock() + Environment.any_instance.expects(:portal_community).returns(nil) + get :edit, :id => l.id + assert_tag :tag => 'p', :attributes => { :id => 'no_portal_community' } + end + + should 'be able to edit EnvironmentStatisticsBlock' do + login_as(create_admin_user(Environment.default)) + b = EnvironmentStatisticsBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << b + get :edit, :id => b.id + assert_tag :tag => 'input', :attributes => { :id => 'block_title' } + end + + should 'be able to edit EnterprisesBlock' do + login_as(create_admin_user(Environment.default)) + b = EnterprisesBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << b + get :edit, :id => b.id + assert_tag :tag => 'input', :attributes => { :id => 'block_limit' } + end + + should 'be able to edit PeopleBlock' do + login_as(create_admin_user(Environment.default)) + b = PeopleBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << b + get :edit, :id => b.id + assert_tag :tag => 'input', :attributes => { :id => 'block_limit' } + end + + should 'be able to edit SlideshowBlock' do + login_as(create_admin_user(Environment.default)) + b = SlideshowBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << b + get :edit, :id => b.id + assert_tag :tag => 'select', :attributes => { :id => 'block_gallery_id' } + end + + should 'be able to edit LoginBlock' do + login_as(create_admin_user(Environment.default)) + b = LoginBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << b + get :edit, :id => b.id + assert_tag :tag => 'input', :attributes => { :id => 'block_title' } + end + + should 'be able to edit RecentDocumentsBlock' do + login_as(create_admin_user(Environment.default)) + b = RecentDocumentsBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << b + get :edit, :id => b.id + assert_tag :tag => 'input', :attributes => { :id => 'block_limit' } + end + + should 'be able to edit CommunitiesBlock' do + login_as(create_admin_user(Environment.default)) + b = CommunitiesBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << b + get :edit, :id => b.id + assert_tag :tag => 'input', :attributes => { :id => 'block_limit' } + end + + should 'be able to edit SellersSearchBlock' do + login_as(create_admin_user(Environment.default)) + b = SellersSearchBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << b + get :edit, :id => b.id + assert_tag :tag => 'input', :attributes => { :id => 'block_title' } + end + + should 'be able to edit FeedReaderBlock' do + login_as(create_admin_user(Environment.default)) + b = FeedReaderBlock.create! + e = Environment.default + e.boxes.create! + e.boxes.first.blocks << b + get :edit, :id => b.id + assert_tag :tag => 'input', :attributes => { :id => 'block_address' } + end + should 'create back link to environment control panel' do Environment.default.boxes.create!.blocks << CommunitiesBlock.new Environment.default.boxes.create!.blocks << EnterprisesBlock.new @@ -61,4 +185,11 @@ class EnvironmentDesignControllerTest < Test::Unit::TestCase assert_tag :tag => 'a', :attributes => {:href => '/admin'}, :child => {:tag => 'span', :content => "Back to control panel"} end + should 'render add a new block functionality' do + login_as(create_admin_user(Environment.default)) + get :add_block + + assert_response :success + assert_template 'add_block' + end end diff --git a/test/unit/article_block_test.rb b/test/unit/article_block_test.rb index e494b1f..dae504f 100644 --- a/test/unit/article_block_test.rb +++ b/test/unit/article_block_test.rb @@ -52,4 +52,33 @@ class ArticleBlockTest < Test::Unit::TestCase assert_nil block.article_id end + should "take available articles with a person as the box owner" do + person = create_user('testuser').person + person.articles.delete_all + assert_equal [], person.articles + a = person.articles.create!(:name => 'test') + block = ArticleBlock.create(:article => a) + person.boxes.first.blocks << block + block.save! + + block.reload + assert_equal [a],block.available_articles + end + + should "take available articles with an environment as the box owner" do + env = Environment.create!(:name => 'test env') + env.articles.destroy_all + assert_equal [], env.articles + community = fast_create(Community) + a = community.articles.create!(:name => 'test') + env.portal_community=community + env.save + block = ArticleBlock.create(:article => a) + env.boxes.first.blocks << block + block.save! + + block.reload + assert_equal [a],block.available_articles + end + end -- libgit2 0.21.2