Commit 6cb08f2faa5f0441be031781747e45090d3ca378

Authored by Rodrigo Souto
2 parents 5e853854 bfa26491

Merge commit 'refs/merge-requests/366' of git://gitorious.org/noosfero/noosfero …

…into merge-requests/366

Conflicts:
	INSTALL
	script/install-dependencies/debian-squeeze.sh
@@ -23,7 +23,7 @@ You need to install some packages Noosfero depends on. On Debian GNU/Linux or De @@ -23,7 +23,7 @@ You need to install some packages Noosfero depends on. On Debian GNU/Linux or De
23 # apt-get install ruby rake po4a libgettext-ruby-util libgettext-ruby1.8 \ 23 # apt-get install ruby rake po4a libgettext-ruby-util libgettext-ruby1.8 \
24 libsqlite3-ruby rcov librmagick-ruby libredcloth-ruby libhpricot-ruby \ 24 libsqlite3-ruby rcov librmagick-ruby libredcloth-ruby libhpricot-ruby \
25 libwill-paginate-ruby iso-codes libfeedparser-ruby libdaemons-ruby thin \ 25 libwill-paginate-ruby iso-codes libfeedparser-ruby libdaemons-ruby thin \
26 - tango-icon-theme 26 + tango-icon-theme libnokogiri-ruby
27 27
28 On other systems, they may or may not be available through your regular package management system. Below are the links to their homepages. 28 On other systems, they may or may not be available through your regular package management system. Below are the links to their homepages.
29 29
@@ -41,6 +41,7 @@ On other systems, they may or may not be available through your regular package @@ -41,6 +41,7 @@ On other systems, they may or may not be available through your regular package
41 * Thin: http://code.macournoyer.com/thin 41 * Thin: http://code.macournoyer.com/thin
42 * tango-icon-theme: http://tango.freedesktop.org/Tango_Icon_Library 42 * tango-icon-theme: http://tango.freedesktop.org/Tango_Icon_Library
43 * Hpricot: http://hpricot.com 43 * Hpricot: http://hpricot.com
  44 +* Nokogiri: http://nokogiri.org/
44 45
45 If you manage to install Noosfero successfully on other systems than Debian, 46 If you manage to install Noosfero successfully on other systems than Debian,
46 please feel free to contact the Noosfero development mailing with the 47 please feel free to contact the Noosfero development mailing with the
app/helpers/application_helper.rb
@@ -1382,16 +1382,16 @@ module ApplicationHelper @@ -1382,16 +1382,16 @@ module ApplicationHelper
1382 end 1382 end
1383 1383
1384 def convert_macro(html, source) 1384 def convert_macro(html, source)
1385 - doc = Hpricot(html) 1385 + doc = Nokogiri::HTML(html)
1386 #TODO This way is more efficient but do not support macro inside of 1386 #TODO This way is more efficient but do not support macro inside of
1387 # macro. You must parse them from the inside-out in order to enable 1387 # macro. You must parse them from the inside-out in order to enable
1388 # that. 1388 # that.
1389 - doc.search('.macro').each do |macro| 1389 + doc.css('.macro').each do |macro|
1390 macro_name = macro['data-macro'] 1390 macro_name = macro['data-macro']
1391 result = @plugins.parse_macro(macro_name, macro, source) 1391 result = @plugins.parse_macro(macro_name, macro, source)
1392 - macro.inner_html = result.kind_of?(Proc) ? self.instance_eval(&result) : result 1392 + macro.content = result.kind_of?(Proc) ? self.instance_eval(&result) : result
1393 end 1393 end
1394 - doc.html 1394 + doc.xpath('//body/*').to_s
1395 end 1395 end
1396 1396
1397 def default_folder_for_image_upload(profile) 1397 def default_folder_for_image_upload(profile)
config/initializers/dependencies.rb
@@ -8,3 +8,4 @@ require 'route_if' @@ -8,3 +8,4 @@ require 'route_if'
8 8
9 # third-party libraries 9 # third-party libraries
10 require 'will_paginate' 10 require 'will_paginate'
  11 +require 'nokogiri'
debian/control
@@ -41,6 +41,7 @@ Depends: @@ -41,6 +41,7 @@ Depends:
41 thin, 41 thin,
42 tango-icon-theme, 42 tango-icon-theme,
43 libhpricot-ruby, 43 libhpricot-ruby,
  44 + libnokogiri-ruby,
44 memcached, 45 memcached,
45 debconf, 46 debconf,
46 dbconfig-common, 47 dbconfig-common,
script/install-dependencies/debian-squeeze.sh
@@ -5,7 +5,7 @@ run sudo apt-get -y install $runtime_dependencies @@ -5,7 +5,7 @@ run sudo apt-get -y install $runtime_dependencies
5 sudo apt-get -y install iceweasel || sudo apt-get -y install firefox 5 sudo apt-get -y install iceweasel || sudo apt-get -y install firefox
6 6
7 # needed for development 7 # needed for development
8 -run sudo apt-get -y install libtidy-ruby libhpricot-ruby libmocha-ruby imagemagick po4a xvfb libxml2-dev libxslt-dev postgresql openjdk-6-jre 8 +run sudo apt-get -y install libtidy-ruby libhpricot-ruby libnokogiri-ruby libmocha-ruby imagemagick po4a xvfb libxml2-dev libxslt-dev postgresql openjdk-6-jre
9 gem which bundler >/dev/null 2>&1 || gem_install bundler 9 gem which bundler >/dev/null 2>&1 || gem_install bundler
10 setup_rubygems_path 10 setup_rubygems_path
11 run bundle install 11 run bundle install
test/functional/cms_controller_test.rb
@@ -644,8 +644,13 @@ class CmsControllerTest < ActionController::TestCase @@ -644,8 +644,13 @@ class CmsControllerTest < ActionController::TestCase
644 article = profile.articles.create!(:name => 'test', :published => false) 644 article = profile.articles.create!(:name => 'test', :published => false)
645 645
646 get :edit, :profile => profile.identifier, :id => article.id 646 get :edit, :profile => profile.identifier, :id => article.id
647 - assert_tag :tag => 'input', :attributes => { :type => 'radio', :name => 'article[published]', :id => 'article_published_true' }  
648 - assert_tag :tag => 'input', :attributes => { :type => 'radio', :name => 'article[published]', :id => 'article_published_false', :checked => 'checked' } 647 + assert_select 'input#article_published_true[name=?][type="radio"]', 'article[published]'
  648 + assert_select 'input#article_published_false[name=?][type="radio"]', 'article[published]' do |elements|
  649 + assert elements.length > 0
  650 + elements.each do |element|
  651 + assert element["checked"]
  652 + end
  653 + end
649 end 654 end
650 655
651 should 'be able to add image with alignment' do 656 should 'be able to add image with alignment' do
@@ -844,13 +849,23 @@ class CmsControllerTest < ActionController::TestCase @@ -844,13 +849,23 @@ class CmsControllerTest < ActionController::TestCase
844 should 'display posts per page input with default value on edit blog' do 849 should 'display posts per page input with default value on edit blog' do
845 n = Blog.new.posts_per_page.to_s 850 n = Blog.new.posts_per_page.to_s
846 get :new, :profile => profile.identifier, :type => 'Blog' 851 get :new, :profile => profile.identifier, :type => 'Blog'
847 - assert_tag :tag => 'select', :attributes => { :name => 'article[posts_per_page]' }, :child => { :tag => 'option', :attributes => {:value => n, :selected => 'selected'} } 852 + assert_select 'select[name=?] option[value=?]', 'article[posts_per_page]', n do |elements|
  853 + assert elements.length > 0
  854 + elements.each do |element|
  855 + assert element["selected"]
  856 + end
  857 + end
848 end 858 end
849 859
850 should 'display options for blog visualization with default value on edit blog' do 860 should 'display options for blog visualization with default value on edit blog' do
851 format = Blog.new.visualization_format 861 format = Blog.new.visualization_format
852 get :new, :profile => profile.identifier, :type => 'Blog' 862 get :new, :profile => profile.identifier, :type => 'Blog'
853 - assert_tag :tag => 'select', :attributes => { :name => 'article[visualization_format]' }, :child => { :tag => 'option', :attributes => {:value => 'full', :selected => 'selected'} } 863 + assert_select 'select[name=?] option[value=full]', 'article[visualization_format]' do |elements|
  864 + assert elements.length > 0
  865 + elements.each do |element|
  866 + assert element["selected"]
  867 + end
  868 + end
854 end 869 end
855 870
856 should 'not offer to create special article types' do 871 should 'not offer to create special article types' do
@@ -985,6 +1000,11 @@ class CmsControllerTest < ActionController::TestCase @@ -985,6 +1000,11 @@ class CmsControllerTest < ActionController::TestCase
985 assert_tag :tag => 'a', :content => 'Cancel', :attributes => { :href => /\/myprofile\/#{profile.identifier}/ } 1000 assert_tag :tag => 'a', :content => 'Cancel', :attributes => { :href => /\/myprofile\/#{profile.identifier}/ }
986 end 1001 end
987 1002
  1003 + should 'have only one mandatory field in the blog creation form' do
  1004 + get :new, :profile => profile.identifier, :type => Blog.name
  1005 + assert_select '.required-field .formfieldline', 1
  1006 + end
  1007 +
988 should 'create icon upload file in folder' do 1008 should 'create icon upload file in folder' do
989 f = Gallery.create!(:name => 'test_folder', :profile => profile) 1009 f = Gallery.create!(:name => 'test_folder', :profile => profile)
990 post :new, :profile => profile.identifier, 1010 post :new, :profile => profile.identifier,
@@ -1076,7 +1096,12 @@ class CmsControllerTest < ActionController::TestCase @@ -1076,7 +1096,12 @@ class CmsControllerTest < ActionController::TestCase
1076 profile.articles << Blog.new(:name => 'test blog', :profile => profile) 1096 profile.articles << Blog.new(:name => 'test blog', :profile => profile)
1077 profile.blog.create_external_feed(:address => 'address', :enabled => true) 1097 profile.blog.create_external_feed(:address => 'address', :enabled => true)
1078 get :edit, :profile => profile.identifier, :id => profile.blog.id 1098 get :edit, :profile => profile.identifier, :id => profile.blog.id
1079 - assert_tag :tag => 'input', :attributes => { :name => 'article[external_feed_builder][enabled]', :checked => 'checked' } 1099 + assert_select 'input[type=checkbox][name=?]', 'article[external_feed_builder][enabled]' do |elements|
  1100 + elements.length > 0
  1101 + elements.each do |element|
  1102 + assert element["checked"]
  1103 + end
  1104 + end
1080 end 1105 end
1081 1106
1082 should "display 'Fetch posts from an external feed' unchecked if blog has disabled external feed" do 1107 should "display 'Fetch posts from an external feed' unchecked if blog has disabled external feed" do
@@ -1094,7 +1119,12 @@ class CmsControllerTest &lt; ActionController::TestCase @@ -1094,7 +1119,12 @@ class CmsControllerTest &lt; ActionController::TestCase
1094 1119
1095 should 'only_once option marked by default' do 1120 should 'only_once option marked by default' do
1096 get :new, :profile => profile.identifier, :type => 'Blog' 1121 get :new, :profile => profile.identifier, :type => 'Blog'
1097 - assert_tag :tag => 'input', :attributes => { :name => 'article[external_feed_builder][only_once]', :checked => 'checked', :value => 'true' } 1122 + assert_select 'input[name=?][value="true"]', 'article[external_feed_builder][only_once]' do |elements|
  1123 + assert elements.length > 0
  1124 + elements.each do |element|
  1125 + assert element['checked']
  1126 + end
  1127 + end
1098 end 1128 end
1099 1129
1100 should 'display media listing when it is TinyMceArticle and enabled on environment' do 1130 should 'display media listing when it is TinyMceArticle and enabled on environment' do
@@ -1250,7 +1280,12 @@ class CmsControllerTest &lt; ActionController::TestCase @@ -1250,7 +1280,12 @@ class CmsControllerTest &lt; ActionController::TestCase
1250 should 'display posts per page input with default value on edit forum' do 1280 should 'display posts per page input with default value on edit forum' do
1251 n = Forum.new.posts_per_page.to_s 1281 n = Forum.new.posts_per_page.to_s
1252 get :new, :profile => profile.identifier, :type => 'Forum' 1282 get :new, :profile => profile.identifier, :type => 'Forum'
1253 - assert_tag :tag => 'select', :attributes => { :name => 'article[posts_per_page]' }, :child => { :tag => 'option', :attributes => {:value => n, :selected => 'selected'} } 1283 + assert_select 'select[name=?] option[value=?]', 'article[posts_per_page]', n do |elements|
  1284 + assert elements.length > 0
  1285 + elements.each do |element|
  1286 + assert element['selected']
  1287 + end
  1288 + end
1254 end 1289 end
1255 1290
1256 should 'offer to edit a forum' do 1291 should 'offer to edit a forum' do
@@ -1419,7 +1454,12 @@ class CmsControllerTest &lt; ActionController::TestCase @@ -1419,7 +1454,12 @@ class CmsControllerTest &lt; ActionController::TestCase
1419 should 'display display posts in current language input checked when editing blog' do 1454 should 'display display posts in current language input checked when editing blog' do
1420 profile.articles << Blog.new(:name => 'Blog for test', :profile => profile, :display_posts_in_current_language => true) 1455 profile.articles << Blog.new(:name => 'Blog for test', :profile => profile, :display_posts_in_current_language => true)
1421 get :edit, :profile => profile.identifier, :id => profile.blog.id 1456 get :edit, :profile => profile.identifier, :id => profile.blog.id
1422 - assert_tag :tag => 'input', :attributes => { :type => 'checkbox', :name => 'article[display_posts_in_current_language]', :checked => 'checked' } 1457 + assert_select 'input[type=checkbox][name=?]', 'article[display_posts_in_current_language]' do |elements|
  1458 + assert elements.length > 0
  1459 + elements.each do |element|
  1460 + assert element["checked"]
  1461 + end
  1462 + end
1423 end 1463 end
1424 1464
1425 should 'display display posts in current language input not checked on new blog' do 1465 should 'display display posts in current language input not checked on new blog' do
@@ -1444,7 +1484,12 @@ class CmsControllerTest &lt; ActionController::TestCase @@ -1444,7 +1484,12 @@ class CmsControllerTest &lt; ActionController::TestCase
1444 should 'be checked display posts in current language checkbox' do 1484 should 'be checked display posts in current language checkbox' do
1445 profile.articles << Blog.new(:name => 'Blog for test', :profile => profile, :display_posts_in_current_language => true) 1485 profile.articles << Blog.new(:name => 'Blog for test', :profile => profile, :display_posts_in_current_language => true)
1446 get :edit, :profile => profile.identifier, :id => profile.blog.id 1486 get :edit, :profile => profile.identifier, :id => profile.blog.id
1447 - assert_tag :tag => 'input', :attributes => { :type => 'checkbox', :name => 'article[display_posts_in_current_language]', :checked => 'checked' } 1487 + assert_select 'input[type=checkbox][name=?]', 'article[display_posts_in_current_language]' do |elements|
  1488 + assert elements.length > 0
  1489 + elements.each do |element|
  1490 + assert element["checked"]
  1491 + end
  1492 + end
1448 end 1493 end
1449 1494
1450 should 'be unchecked display posts in current language checkbox' do 1495 should 'be unchecked display posts in current language checkbox' do