Commit fa22035035adf0979d85b2b8cff42d7b24cdd012

Authored by Weblate
2 parents 2dadfc26 b9800000

Merge remote-tracking branch 'origin/master'

Showing 29 changed files with 231 additions and 150 deletions   Show diff stats
@@ -41,8 +41,9 @@ group :cucumber do @@ -41,8 +41,9 @@ group :cucumber do
41 gem 'selenium-webdriver', '~> 2.39.0' 41 gem 'selenium-webdriver', '~> 2.39.0'
42 end 42 end
43 43
44 -# include plugin gemfiles  
45 -Dir.glob(File.join('config', 'plugins', '*')).each do |plugin|  
46 - plugin_gemfile = File.join(plugin, 'Gemfile')  
47 - eval File.read(plugin_gemfile) if File.exists?(plugin_gemfile) 44 +# include gemfiles from enabled plugins
  45 +# plugins in baseplugins/ are not included on purpose. They should not have any
  46 +# dependencies.
  47 +Dir.glob('config/plugins/*/Gemfile').each do |gemfile|
  48 + eval File.read(gemfile)
48 end 49 end
app/controllers/public/account_controller.rb
@@ -193,7 +193,7 @@ class AccountController < ApplicationController @@ -193,7 +193,7 @@ class AccountController < ApplicationController
193 else 193 else
194 @change_password.errors[:base] << _('Could not find any user with %s equal to "%s".') % [fields_label, params[:value]] 194 @change_password.errors[:base] << _('Could not find any user with %s equal to "%s".') % [fields_label, params[:value]]
195 end 195 end
196 - rescue ActiveRecord::RecordInvald 196 + rescue ActiveRecord::RecordInvalid
197 @change_password.errors[:base] << _('Could not perform password recovery for the user.') 197 @change_password.errors[:base] << _('Could not perform password recovery for the user.')
198 end 198 end
199 end 199 end
app/models/task.rb
@@ -285,8 +285,9 @@ class Task &lt; ActiveRecord::Base @@ -285,8 +285,9 @@ class Task &lt; ActiveRecord::Base
285 # If 285 # If
286 def send_notification(action) 286 def send_notification(action)
287 if sends_email? 287 if sends_email?
288 - if self.requestor  
289 - TaskMailer.generic_message("task_#{action}", self) 288 + if self.requestor && !self.requestor.notification_emails.empty?
  289 + message = TaskMailer.generic_message("task_#{action}", self)
  290 + message.deliver if message
290 end 291 end
291 end 292 end
292 end 293 end
app/views/task_mailer/generic_message.text.erb 0 → 100644
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +<%= _('Dear %s,') % @requestor %>
  2 +
  3 +<%= word_wrap(@message) %>
  4 +
  5 +<%= _('Greetings,') %>
  6 +
  7 +--
  8 +<%= _('%s team.') % @environment %>
  9 +<%= @url %>
app/views/task_mailer/task_activated.text.erb
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -task_cancelled.text.erb  
2 \ No newline at end of file 0 \ No newline at end of file
app/views/task_mailer/task_cancelled.text.erb
@@ -1,9 +0,0 @@ @@ -1,9 +0,0 @@
1 -<%= _('Dear %s,') % @requestor %>  
2 -  
3 -<%= word_wrap(@message) %>  
4 -  
5 -<%= _('Greetings,') %>  
6 -  
7 ---  
8 -<%= _('%s team.') % @environment %>  
9 -<%= @url %>  
app/views/task_mailer/task_created.text.erb
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -task_cancelled.text.erb  
2 \ No newline at end of file 0 \ No newline at end of file
app/views/task_mailer/task_finished.text.erb
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -task_cancelled.text.erb  
2 \ No newline at end of file 0 \ No newline at end of file
debian/control
@@ -51,6 +51,7 @@ Depends: @@ -51,6 +51,7 @@ Depends:
51 ruby-hpricot, 51 ruby-hpricot,
52 ruby-nokogiri, 52 ruby-nokogiri,
53 ruby-acts-as-taggable-on, 53 ruby-acts-as-taggable-on,
  54 + ruby-progressbar,
54 ruby-prototype-rails, 55 ruby-prototype-rails,
55 ruby-rails-autolink, 56 ruby-rails-autolink,
56 memcached, 57 memcached,
debian/noosfero.links
@@ -15,4 +15,4 @@ var/lib/noosfero-data/public/thumbnails usr/share/noosfero/public/th @@ -15,4 +15,4 @@ var/lib/noosfero-data/public/thumbnails usr/share/noosfero/public/th
15 usr/share/noosfero/public/designs/themes/noosfero usr/share/noosfero/public/designs/themes/default 15 usr/share/noosfero/public/designs/themes/noosfero usr/share/noosfero/public/designs/themes/default
16 usr/share/noosfero/public/designs/icons/tango usr/share/noosfero/public/designs/icons/default 16 usr/share/noosfero/public/designs/icons/tango usr/share/noosfero/public/designs/icons/default
17 usr/share/noosfero/script/noosfero-plugins usr/sbin/noosfero-plugins 17 usr/share/noosfero/script/noosfero-plugins usr/sbin/noosfero-plugins
18 -usr/share/noosfero/Gemfile.lock /dev/null 18 +/dev/null usr/share/noosfero/Gemfile.lock
lib/tasks/ci.rake
@@ -10,6 +10,15 @@ namespace :ci do @@ -10,6 +10,15 @@ namespace :ci do
10 File.exist?(f) 10 File.exist?(f)
11 end 11 end
12 12
  13 + changed_plugin_files = changed_files.select do |f|
  14 + f.split(File::SEPARATOR).first == 'plugins'
  15 + end
  16 + changed_plugins = changed_plugin_files.map do |f|
  17 + f.split(File::SEPARATOR)[1]
  18 + end.uniq
  19 +
  20 + changed_files -= changed_plugin_files
  21 +
13 # explicitly changed tests 22 # explicitly changed tests
14 tests = changed_files.select { |f| f =~ /test\/.*_test\.rb$/ } 23 tests = changed_files.select { |f| f =~ /test\/.*_test\.rb$/ }
15 features = changed_files.select { |f| f =~ /\.feature$/ } 24 features = changed_files.select { |f| f =~ /\.feature$/ }
@@ -27,6 +36,13 @@ namespace :ci do @@ -27,6 +36,13 @@ namespace :ci do
27 sh 'testrb', '-Itest', *tests unless tests.empty? 36 sh 'testrb', '-Itest', *tests unless tests.empty?
28 sh 'cucumber', *features unless features.empty? 37 sh 'cucumber', *features unless features.empty?
29 sh 'cucumber', '-p', 'selenium', *features unless features.empty? 38 sh 'cucumber', '-p', 'selenium', *features unless features.empty?
  39 +
  40 + changed_plugins.each do |plugin|
  41 + task = "test:noosfero_plugins:#{plugin}"
  42 + puts "Running #{task}"
  43 + Rake::Task[task].execute
  44 + end
  45 +
30 end 46 end
31 47
32 end 48 end
lib/tasks/plugins_tests.rake
@@ -104,7 +104,7 @@ def run_test(name, files) @@ -104,7 +104,7 @@ def run_test(name, files)
104 end 104 end
105 105
106 def run_testrb(files) 106 def run_testrb(files)
107 - sh 'testrb', '-Itest', *files 107 + sh 'testrb', '-I.:test', *files
108 end 108 end
109 109
110 def run_cucumber(profile, files) 110 def run_cucumber(profile, files)
plugins/comment_group/views/comment_group_plugin_profile/view_comments.rjs
@@ -8,5 +8,5 @@ page.replace_html &quot;comment-count-#{@group_id}&quot;, @comments_count @@ -8,5 +8,5 @@ page.replace_html &quot;comment-count-#{@group_id}&quot;, @comments_count
8 if @no_more_pages 8 if @no_more_pages
9 page.replace_html "comments_list_group_#{@group_id}_more", "" 9 page.replace_html "comments_list_group_#{@group_id}_more", ""
10 else 10 else
11 - page.replace_html "comments_list_group_#{@group_id}_more", link_to_remote(_('More'), :url => { :profile => profile.identifier, :controller => 'comment_group_plugin_profile', :action => 'view_comments', :group_id => @group_id, :article_id => @article_id, :group_comment_page => @group_comment_page + 1}, :loaded => visual_effect(:highlight, "comments_list_group_#{@group_id}"), :method => :post, :complete => "loadCompleted(#{@group_id})") 11 + page.replace_html "comments_list_group_#{@group_id}_more", link_to_remote(_('More'), :url => { :profile => profile.identifier, :controller => 'comment_group_plugin_profile', :action => 'view_comments', :group_id => @group_id, :article_id => @article_id, :group_comment_page => @group_comment_page + 1}, :method => :get)
12 end 12 end
plugins/community_block/test/functional/commmunity_block_plugin_profile_controller_test.rb 0 → 100644
@@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +
  3 +# Re-raise errors caught by the controller.
  4 +class ProfileController
  5 + append_view_path File.join(File.dirname(__FILE__) + '/../../views')
  6 + def rescue_action(e)
  7 + raise e
  8 + end
  9 +end
  10 +
  11 +class ProfileControllerTest < ActionController::TestCase
  12 +
  13 + def setup
  14 + @user = create_user('testinguser').person
  15 + login_as(@user.identifier)
  16 +
  17 + @community = fast_create(Community, :environment_id => Environment.default)
  18 + @community.add_member @user
  19 + @community.add_admin @user
  20 +
  21 + @environment = @community.environment
  22 + @environment.enabled_plugins = ['CommunityBlock']
  23 + @environment.save!
  24 +
  25 + CommunityBlock.delete_all
  26 + @box1 = create(Box, :owner => @community)
  27 + @community.boxes = [@box1]
  28 +
  29 + @block = CommunityBlock.new
  30 + @block.box = @box1
  31 + @block.save!
  32 +
  33 + @community.blocks<<@block
  34 + @community.save!
  35 + end
  36 +
  37 + should 'display community-block' do
  38 + get :index, :profile => @community.identifier
  39 + assert_tag :div, :attributes => {:class => 'community-block-logo'}
  40 + assert_tag :div, :attributes => {:class => 'community-block-info'}
  41 + assert_tag :div, :attributes => {:class => 'community-block-title'}
  42 + assert_tag :div, :attributes => {:class => 'community-block-description'}
  43 + end
  44 +
  45 + should 'display *leave* button when the user is logged in and is a member of the community' do
  46 + get :index, :profile => @community.identifier
  47 + assert_tag :span, :attributes => {:class => 'community-block-button icon-remove'}
  48 + end
  49 +
  50 + should 'display *send email to administrators* button when the user is logged in and is a member of the community' do
  51 + get :index, :profile => @community.identifier
  52 + assert_match /\{&quot;Send an e-mail&quot;:\{&quot;href&quot;:&quot;\/contact\/#{@community.identifier}\/new&quot;\}\}/, @response.body
  53 + end
  54 +
  55 + should 'display *report* button when the user is logged in and is a member of the community' do
  56 + get :index, :profile => @community.identifier
  57 + assert_match /\{&quot;Report abuse&quot;:\{&quot;href&quot;:&quot;\/profile\/#{@community.identifier}\/report_abuse&quot;\}\}/, @response.body
  58 + end
  59 +
  60 + should 'display *join* button when the user is logged in and is not a member of the community' do
  61 + @community.remove_member @user
  62 + get :index, :profile => @community.identifier
  63 + assert_tag :span, :attributes => {:class => 'community-block-button icon-add'}
  64 + end
  65 +
  66 + should 'display *control panel* link option when the user is logged in and is community admin' do
  67 + get :index, :profile => @community.identifier
  68 + assert_match /\{&quot;Control panel&quot;:\{&quot;href&quot;:&quot;\/myprofile\/#{@community.identifier}&quot;\}\}/, @response.body
  69 + end
  70 +
  71 + should 'display *join* button when the user is not logged in' do
  72 + logout
  73 + get :index, :profile => @community.identifier
  74 + assert_tag :span, :attributes => {:class => 'community-block-button icon-add'}
  75 + end
  76 +
  77 + should 'not display *arrow* button when the user is not logged in' do
  78 + logout
  79 + get :index, :profile => @community.identifier
  80 + assert_no_tag :span, :attributes => {:class => 'community-block-button icon-arrow'}
  81 + end
  82 +
  83 +end
plugins/community_block/test/functional/commmunity_block_plugin_profile_design_controller_test.rb
@@ -1,87 +0,0 @@ @@ -1,87 +0,0 @@
1 -require File.dirname(__FILE__) + '/../test_helper'  
2 -  
3 -# Re-raise errors caught by the controller.  
4 -class ProfileController  
5 - append_view_path File.join(File.dirname(__FILE__) + '/../../views')  
6 - def rescue_action(e)  
7 - raise e  
8 - end  
9 -end  
10 -  
11 -class ProfileControllerTest < ActionController::TestCase  
12 -  
13 - def setup  
14 - @controller = ProfileController.new  
15 - @request = ActionController::TestRequest.new  
16 - @response = ActionController::TestResponse.new  
17 -  
18 - @user = create_user('testinguser').person  
19 - login_as(@user.identifier)  
20 -  
21 - @community = fast_create(Community, :environment_id => Environment.default)  
22 - @community.add_member @user  
23 - @community.add_admin @user  
24 -  
25 - @environment = @community.environment  
26 - @environment.enabled_plugins = ['CommunityBlock']  
27 - @environment.save!  
28 -  
29 - CommunityBlock.delete_all  
30 - @box1 = create(Box, :owner => @community)  
31 - @community.boxes = [@box1]  
32 -  
33 - @block = CommunityBlock.new  
34 - @block.box = @box1  
35 - @block.save!  
36 -  
37 - @community.blocks<<@block  
38 - @community.save!  
39 - end  
40 -  
41 - should 'display community-block' do  
42 - get :index, :profile => @community.identifier  
43 - assert_tag :div, :attributes => {:class => 'community-block-logo'}  
44 - assert_tag :div, :attributes => {:class => 'community-block-info'}  
45 - assert_tag :div, :attributes => {:class => 'community-block-title'}  
46 - assert_tag :div, :attributes => {:class => 'community-block-description'}  
47 - end  
48 -  
49 - should 'display *leave* button when the user is logged in and is a member of the community' do  
50 - get :index, :profile => @community.identifier  
51 - assert_tag :span, :attributes => {:class => 'community-block-button icon-remove'}  
52 - end  
53 -  
54 - should 'display *send email to administrators* button when the user is logged in and is a member of the community' do  
55 - get :index, :profile => @community.identifier  
56 - assert_match /\{&quot;Send an e-mail&quot;:\{&quot;href&quot;:&quot;\/contact\/#{@community.identifier}\/new&quot;\}\}/, @response.body  
57 - end  
58 -  
59 - should 'display *report* button when the user is logged in and is a member of the community' do  
60 - get :index, :profile => @community.identifier  
61 - assert_match /\{&quot;Report abuse&quot;:\{&quot;href&quot;:&quot;\/profile\/#{@community.identifier}\/report_abuse&quot;\}\}/, @response.body  
62 - end  
63 -  
64 - should 'display *join* button when the user is logged in and is not a member of the community' do  
65 - @community.remove_member @user  
66 - get :index, :profile => @community.identifier  
67 - assert_tag :span, :attributes => {:class => 'community-block-button icon-add'}  
68 - end  
69 -  
70 - should 'display *control panel* link option when the user is logged in and is community admin' do  
71 - get :index, :profile => @community.identifier  
72 - assert_match /\{&quot;Control panel&quot;:\{&quot;href&quot;:&quot;\/myprofile\/#{@community.identifier}&quot;\}\}/, @response.body  
73 - end  
74 -  
75 - should 'display *join* button when the user is not logged in' do  
76 - logout  
77 - get :index, :profile => @community.identifier  
78 - assert_tag :span, :attributes => {:class => 'community-block-button icon-add'}  
79 - end  
80 -  
81 - should 'not display *arrow* button when the user is not logged in' do  
82 - logout  
83 - get :index, :profile => @community.identifier  
84 - assert_no_tag :span, :attributes => {:class => 'community-block-button icon-arrow'}  
85 - end  
86 -  
87 -end  
plugins/community_block/views/community_block.html.erb
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 <%= link_to( 23 <%= link_to(
24 content_tag('span','',:class => 'community-block-button icon-arrow'), 24 content_tag('span','',:class => 'community-block-button icon-arrow'),
25 '#', 25 '#',
26 - :onclick => "toggleSubmenu(this,'',#{j links.to_json}); return false;", 26 + :onclick => "toggleSubmenu(this,'',#{CGI::escapeHTML(links.to_json)}); return false;",
27 :class => 'simplemenu-trigger') %> 27 :class => 'simplemenu-trigger') %>
28 28
29 <% end %> 29 <% end %>
@@ -32,11 +32,11 @@ @@ -32,11 +32,11 @@
32 <% if profile.members.include?(user) || profile.already_request_membership?(user) %> 32 <% if profile.members.include?(user) || profile.already_request_membership?(user) %>
33 <%= link_to( 33 <%= link_to(
34 content_tag('span', '', :class => 'community-block-button icon-remove'), 34 content_tag('span', '', :class => 'community-block-button icon-remove'),
35 - profile.leave_url) %> 35 + profile.leave_url, :class => 'join-community') %>
36 <% else %> 36 <% else %>
37 <%= link_to( 37 <%= link_to(
38 content_tag('span', '', :class => 'community-block-button icon-add'), 38 content_tag('span', '', :class => 'community-block-button icon-add'),
39 - profile.join_url) %> 39 + profile.join_url, :class => 'join-community') %>
40 <% end %> 40 <% end %>
41 <% else %> 41 <% else %>
42 <%= link_to( 42 <%= link_to(
plugins/community_track/test/functional/community_track_plugin_content_viewer_controller_test.rb
@@ -101,9 +101,6 @@ class ContentViewerControllerTest &lt; ActionController::TestCase @@ -101,9 +101,6 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
101 should 'render tracks in track list block' do 101 should 'render tracks in track list block' do
102 @block = CommunityTrackPlugin::TrackListBlock.create!(:box => @profile.boxes.last) 102 @block = CommunityTrackPlugin::TrackListBlock.create!(:box => @profile.boxes.last)
103 get :view_page, @step.url 103 get :view_page, @step.url
104 - file = File.open('result.html', 'w+')  
105 - file.write(@response.body)  
106 - file.close  
107 assert_tag :tag => 'div', :attributes => { :class => "item category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'steps' }, :descendant => { :tag => 'span', :attributes => { :class => "step #{@block.status_class(@step)}" } } } 104 assert_tag :tag => 'div', :attributes => { :class => "item category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'steps' }, :descendant => { :tag => 'span', :attributes => { :class => "step #{@block.status_class(@step)}" } } }
108 end 105 end
109 106
plugins/community_track/test/unit/community_track_plugin_test.rb
@@ -6,10 +6,13 @@ class CommunityTrackPluginTest &lt; ActiveSupport::TestCase @@ -6,10 +6,13 @@ class CommunityTrackPluginTest &lt; ActiveSupport::TestCase
6 @plugin = CommunityTrackPlugin.new 6 @plugin = CommunityTrackPlugin.new
7 @profile = fast_create(Community) 7 @profile = fast_create(Community)
8 @params = {} 8 @params = {}
9 - @plugin.stubs(:context).returns(self) 9 + @context = mock
  10 + @context.stubs(:profile).returns(@profile)
  11 + @context.stubs(:params).returns(@params)
  12 + @plugin.stubs(:context).returns(@context)
10 end 13 end
11 14
12 - attr_reader :profile, :params 15 + attr_reader :profile, :params, :context
13 16
14 should 'has name' do 17 should 'has name' do
15 assert CommunityTrackPlugin.plugin_name 18 assert CommunityTrackPlugin.plugin_name
@@ -28,37 +31,37 @@ class CommunityTrackPluginTest &lt; ActiveSupport::TestCase @@ -28,37 +31,37 @@ class CommunityTrackPluginTest &lt; ActiveSupport::TestCase
28 end 31 end
29 32
30 should 'do not return Track as a content type if profile is not a community' do 33 should 'do not return Track as a content type if profile is not a community' do
31 - @profile = Organization.new 34 + context.stubs(:profile).returns(Organization.new)
32 assert_not_includes @plugin.content_types, CommunityTrackPlugin::Track 35 assert_not_includes @plugin.content_types, CommunityTrackPlugin::Track
33 end 36 end
34 37
35 should 'do not return Track as a content type if there is a parent' do 38 should 'do not return Track as a content type if there is a parent' do
36 - parent = fast_create(Blog, :profile_id => @profile.id)  
37 - @params[:parent_id] = parent.id 39 + parent = fast_create(Blog, :profile_id => profile.id)
  40 + params[:parent_id] = parent.id
38 assert_not_includes @plugin.content_types, CommunityTrackPlugin::Track 41 assert_not_includes @plugin.content_types, CommunityTrackPlugin::Track
39 end 42 end
40 43
41 should 'return Step as a content type if parent is a Track' do 44 should 'return Step as a content type if parent is a Track' do
42 - parent = fast_create(CommunityTrackPlugin::Track, :profile_id => @profile.id)  
43 - @params[:parent_id] = parent.id 45 + parent = fast_create(CommunityTrackPlugin::Track, :profile_id => profile.id)
  46 + params[:parent_id] = parent.id
44 assert_includes @plugin.content_types, CommunityTrackPlugin::Step 47 assert_includes @plugin.content_types, CommunityTrackPlugin::Step
45 end 48 end
46 49
47 should 'do not return Step as a content type if parent is not a Track' do 50 should 'do not return Step as a content type if parent is not a Track' do
48 - parent = fast_create(Blog, :profile_id => @profile.id)  
49 - @params[:parent_id] = parent.id 51 + parent = fast_create(Blog, :profile_id => profile.id)
  52 + params[:parent_id] = parent.id
50 assert_not_includes @plugin.content_types, CommunityTrackPlugin::Step 53 assert_not_includes @plugin.content_types, CommunityTrackPlugin::Step
51 end 54 end
52 55
53 should 'return Track and Step as a content type if context has no params' do 56 should 'return Track and Step as a content type if context has no params' do
54 - parent = fast_create(Blog, :profile_id => @profile.id)  
55 - expects(:respond_to?).with(:params).returns(false) 57 + parent = fast_create(Blog, :profile_id => profile.id)
  58 + context.expects(:respond_to?).with(:params).returns(false)
56 assert_equivalent [CommunityTrackPlugin::Step, CommunityTrackPlugin::Track], @plugin.content_types 59 assert_equivalent [CommunityTrackPlugin::Step, CommunityTrackPlugin::Track], @plugin.content_types
57 end 60 end
58 61
59 should 'return Track and Step as a content type if params is nil' do 62 should 'return Track and Step as a content type if params is nil' do
60 - parent = fast_create(Blog, :profile_id => @profile.id)  
61 - @params = nil 63 + parent = fast_create(Blog, :profile_id => profile.id)
  64 + context.stubs(:params).returns(nil)
62 assert_equivalent [CommunityTrackPlugin::Step, CommunityTrackPlugin::Track], @plugin.content_types 65 assert_equivalent [CommunityTrackPlugin::Step, CommunityTrackPlugin::Track], @plugin.content_types
63 end 66 end
64 67
plugins/custom_forms/test/functional/custom_forms_plugin_myprofile_controller_test.rb
@@ -226,7 +226,7 @@ class CustomFormsPluginMyprofileControllerTest &lt; ActionController::TestCase @@ -226,7 +226,7 @@ class CustomFormsPluginMyprofileControllerTest &lt; ActionController::TestCase
226 end 226 end
227 227
228 should 'list pending submissions for a form' do 228 should 'list pending submissions for a form' do
229 - person = fast_create(Person) 229 + person = create_user('john').person
230 form = CustomFormsPlugin::Form.create!(:profile => profile, :name => 'Free Software', :for_admission => true) 230 form = CustomFormsPlugin::Form.create!(:profile => profile, :name => 'Free Software', :for_admission => true)
231 task = CustomFormsPlugin::AdmissionSurvey.create!(:form_id => form.id, :target => person, :requestor => profile) 231 task = CustomFormsPlugin::AdmissionSurvey.create!(:form_id => form.id, :target => person, :requestor => profile)
232 232
plugins/custom_forms/test/unit/custom_forms_plugin/admission_survey_test.rb
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + &#39;/../../../../../test/test_helper&#39; @@ -3,7 +3,7 @@ require File.dirname(__FILE__) + &#39;/../../../../../test/test_helper&#39;
3 class CustomFormsPlugin::AdmissionSurveyTest < ActiveSupport::TestCase 3 class CustomFormsPlugin::AdmissionSurveyTest < ActiveSupport::TestCase
4 should 'add member to community on perform' do 4 should 'add member to community on perform' do
5 profile = fast_create(Community) 5 profile = fast_create(Community)
6 - person = fast_create(Person) 6 + person = create_user('john').person
7 form = CustomFormsPlugin::Form.create!(:name => 'Simple Form', :profile => profile) 7 form = CustomFormsPlugin::Form.create!(:name => 'Simple Form', :profile => profile)
8 task = CustomFormsPlugin::AdmissionSurvey.create!(:form_id => form.id, :target => person, :requestor => profile) 8 task = CustomFormsPlugin::AdmissionSurvey.create!(:form_id => form.id, :target => person, :requestor => profile)
9 9
plugins/custom_forms/test/unit/custom_forms_plugin/form_test.rb
@@ -244,7 +244,7 @@ class CustomFormsPlugin::FormTest &lt; ActiveSupport::TestCase @@ -244,7 +244,7 @@ class CustomFormsPlugin::FormTest &lt; ActiveSupport::TestCase
244 244
245 should 'cancel survey tasks after removing a form' do 245 should 'cancel survey tasks after removing a form' do
246 profile = fast_create(Profile) 246 profile = fast_create(Profile)
247 - person = fast_create(Person) 247 + person = create_user('john').person
248 248
249 form1 = CustomFormsPlugin::Form.create!(:name => 'Free Software', :profile => profile) 249 form1 = CustomFormsPlugin::Form.create!(:name => 'Free Software', :profile => profile)
250 form2 = CustomFormsPlugin::Form.create!(:name => 'Operation System', :profile => profile) 250 form2 = CustomFormsPlugin::Form.create!(:name => 'Operation System', :profile => profile)
plugins/custom_forms/test/unit/custom_forms_plugin/membership_survey_test.rb
@@ -13,7 +13,7 @@ class CustomFormsPlugin::MembershipSurveyTest &lt; ActiveSupport::TestCase @@ -13,7 +13,7 @@ class CustomFormsPlugin::MembershipSurveyTest &lt; ActiveSupport::TestCase
13 13
14 should 'create submission with answers on perform' do 14 should 'create submission with answers on perform' do
15 profile = fast_create(Profile) 15 profile = fast_create(Profile)
16 - person = fast_create(Person) 16 + person = create_user('john').person
17 form = CustomFormsPlugin::Form.create!(:name => 'Simple Form', :profile => profile) 17 form = CustomFormsPlugin::Form.create!(:name => 'Simple Form', :profile => profile)
18 field = CustomFormsPlugin::Field.create!(:name => 'Name', :form => form) 18 field = CustomFormsPlugin::Field.create!(:name => 'Name', :form => form)
19 task = CustomFormsPlugin::MembershipSurvey.create!(:form_id => form.id, :submission => {field.id.to_s => 'Jack'}, :target => person, :requestor => profile) 19 task = CustomFormsPlugin::MembershipSurvey.create!(:form_id => form.id, :submission => {field.id.to_s => 'Jack'}, :target => person, :requestor => profile)
@@ -31,7 +31,7 @@ class CustomFormsPlugin::MembershipSurveyTest &lt; ActiveSupport::TestCase @@ -31,7 +31,7 @@ class CustomFormsPlugin::MembershipSurveyTest &lt; ActiveSupport::TestCase
31 31
32 should 'have a scope that retrieves all tasks requested by profile' do 32 should 'have a scope that retrieves all tasks requested by profile' do
33 profile = fast_create(Profile) 33 profile = fast_create(Profile)
34 - person = fast_create(Person) 34 + person = create_user('john').person
35 form = CustomFormsPlugin::Form.create!(:name => 'Simple Form', :profile => profile) 35 form = CustomFormsPlugin::Form.create!(:name => 'Simple Form', :profile => profile)
36 task1 = CustomFormsPlugin::MembershipSurvey.create!(:form_id => form.id, :target => person, :requestor => profile) 36 task1 = CustomFormsPlugin::MembershipSurvey.create!(:form_id => form.id, :target => person, :requestor => profile)
37 task2 = CustomFormsPlugin::MembershipSurvey.create!(:form_id => form.id, :target => person, :requestor => fast_create(Profile)) 37 task2 = CustomFormsPlugin::MembershipSurvey.create!(:form_id => form.id, :target => person, :requestor => fast_create(Profile))
plugins/custom_forms/test/unit/ext/role_assingment_test.rb
@@ -5,7 +5,7 @@ class RoleAssignmentsTest &lt; ActiveSupport::TestCase @@ -5,7 +5,7 @@ class RoleAssignmentsTest &lt; ActiveSupport::TestCase
5 environment = Environment.default 5 environment = Environment.default
6 environment.enable_plugin(CustomFormsPlugin) 6 environment.enable_plugin(CustomFormsPlugin)
7 organization = fast_create(Organization) 7 organization = fast_create(Organization)
8 - person = fast_create(Person) 8 + person = create_user('john').person
9 f1 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 1', :on_membership => true) 9 f1 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 1', :on_membership => true)
10 f2 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 2', :on_membership => true) 10 f2 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 2', :on_membership => true)
11 f3 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 3', :on_membership => false) 11 f3 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 3', :on_membership => false)
@@ -19,7 +19,7 @@ class RoleAssignmentsTest &lt; ActiveSupport::TestCase @@ -19,7 +19,7 @@ class RoleAssignmentsTest &lt; ActiveSupport::TestCase
19 environment = Environment.default 19 environment = Environment.default
20 environment.enable_plugin(CustomFormsPlugin) 20 environment.enable_plugin(CustomFormsPlugin)
21 organization = fast_create(Organization) 21 organization = fast_create(Organization)
22 - person = fast_create(Person) 22 + person = create_user('john').person
23 form = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form', :on_membership => true, :access => 'associated') 23 form = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form', :on_membership => true, :access => 'associated')
24 24
25 assert_difference 'CustomFormsPlugin::MembershipSurvey.count', 1 do 25 assert_difference 'CustomFormsPlugin::MembershipSurvey.count', 1 do
@@ -31,7 +31,7 @@ class RoleAssignmentsTest &lt; ActiveSupport::TestCase @@ -31,7 +31,7 @@ class RoleAssignmentsTest &lt; ActiveSupport::TestCase
31 environment = Environment.default 31 environment = Environment.default
32 environment.enable_plugin(CustomFormsPlugin) 32 environment.enable_plugin(CustomFormsPlugin)
33 organization = fast_create(Organization) 33 organization = fast_create(Organization)
34 - person = fast_create(Person) 34 + person = create_user('john').person
35 form1 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 1', :on_membership => true) 35 form1 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 1', :on_membership => true)
36 organization.add_member(person) 36 organization.add_member(person)
37 37
@@ -59,7 +59,7 @@ class RoleAssignmentsTest &lt; ActiveSupport::TestCase @@ -59,7 +59,7 @@ class RoleAssignmentsTest &lt; ActiveSupport::TestCase
59 environment = Environment.default 59 environment = Environment.default
60 environment.enable_plugin(CustomFormsPlugin) 60 environment.enable_plugin(CustomFormsPlugin)
61 organization = fast_create(Organization) 61 organization = fast_create(Organization)
62 - person = fast_create(Person) 62 + person = create_user('john').person
63 f1 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 1', :for_admission => true) 63 f1 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 1', :for_admission => true)
64 f2 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 2', :for_admission => true) 64 f2 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 2', :for_admission => true)
65 f3 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 3', :for_admission => false) 65 f3 = CustomFormsPlugin::Form.create!(:profile => organization, :name => 'Form 3', :for_admission => false)
plugins/remote_user/lib/remote_user_plugin.rb
@@ -13,17 +13,27 @@ class RemoteUserPlugin &lt; Noosfero::Plugin @@ -13,17 +13,27 @@ class RemoteUserPlugin &lt; Noosfero::Plugin
13 13
14 begin 14 begin
15 remote_user = request.headers["HTTP_REMOTE_USER"] 15 remote_user = request.headers["HTTP_REMOTE_USER"]
  16 + user_data = request.env['HTTP_REMOTE_USER_DATA']
16 17
17 - if remote_user.nil? 18 + if remote_user.blank?
18 if logged_in? 19 if logged_in?
19 self.current_user.forget_me 20 self.current_user.forget_me
20 reset_session 21 reset_session
21 end 22 end
22 else 23 else
  24 + if user_data.blank?
  25 + remote_user_email = remote_user + '@remote.user'
  26 + remote_user_name = remote_user
  27 + else
  28 + user_data = JSON.parse(user_data)
  29 + remote_user_email = user_data['email']
  30 + remote_user_name = user_data['name']
  31 + end
  32 +
23 if !logged_in? 33 if !logged_in?
24 self.current_user = User.find_by_login(remote_user) 34 self.current_user = User.find_by_login(remote_user)
25 unless self.current_user 35 unless self.current_user
26 - self.current_user = User.create!(:login => remote_user, :email => (remote_user + '@remote.user'), :password => ('pw4'+remote_user), :password_confirmation => ('pw4'+remote_user)) 36 + self.current_user = User.create!(:login => remote_user, :email => remote_user_email, :name => remote_user_name, :password => ('pw4'+remote_user), :password_confirmation => ('pw4'+remote_user))
27 self.current_user.activate 37 self.current_user.activate
28 end 38 end
29 self.current_user.save! 39 self.current_user.save!
@@ -34,7 +44,7 @@ class RemoteUserPlugin &lt; Noosfero::Plugin @@ -34,7 +44,7 @@ class RemoteUserPlugin &lt; Noosfero::Plugin
34 44
35 self.current_user = User.find_by_login(remote_user) 45 self.current_user = User.find_by_login(remote_user)
36 unless self.current_user 46 unless self.current_user
37 - self.current_user = User.create!(:login => remote_user, :email => (remote_user + '@remote.user'), :password => ('pw4'+remote_user), :password_confirmation => ('pw4'+remote_user)) 47 + self.current_user = User.create!(:login => remote_user, :email => remote_user_email, :name => remote_user_name, :password => ('pw4'+remote_user), :password_confirmation => ('pw4'+remote_user))
38 self.current_user.activate 48 self.current_user.activate
39 end 49 end
40 self.current_user.save! 50 self.current_user.save!
plugins/remote_user/test/functional/remote_user_plugin_test.rb
@@ -42,26 +42,64 @@ class AccountControllerTest &lt; ActionController::TestCase @@ -42,26 +42,64 @@ class AccountControllerTest &lt; ActionController::TestCase
42 assert_equal user2.id, session[:user] 42 assert_equal user2.id, session[:user]
43 end 43 end
44 44
45 - should 'create a new user if the remote user does not exist' do 45 + should 'create a new user with remote_user_data if the remote user does not exist' do
46 User.destroy_all 46 User.destroy_all
47 47
48 assert_equal 0, User.count 48 assert_equal 0, User.count
49 49
50 @request.env["HTTP_REMOTE_USER"] = "testuser" 50 @request.env["HTTP_REMOTE_USER"] = "testuser"
  51 + @request.env["CONTENT_TYPE"] = "application/json"
  52 + @request.env["HTTP_REMOTE_USER_DATA"] = '{"email":"testuser@domain.com", "name":"Test User"}'
51 get :index 53 get :index
52 54
53 assert_equal 1, User.count 55 assert_equal 1, User.count
54 assert_equal "testuser", User.last.login 56 assert_equal "testuser", User.last.login
55 assert_equal true, User.last.activated? 57 assert_equal true, User.last.activated?
56 assert_equal User.last.id, session[:user] 58 assert_equal User.last.id, session[:user]
  59 + assert_equal "Test User", User.last.name
  60 + assert_equal "testuser@domain.com", User.last.email
57 end 61 end
58 62
59 - should 'create a new user even if there is a logged user but the remote user is different' do 63 + should 'create a new user with remote_user_data even if there is a logged user but the remote user is different' do
60 user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test') 64 user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test')
61 user.activate 65 user.activate
62 66
63 login_as user.login 67 login_as user.login
64 68
  69 + @request.env["HTTP_REMOTE_USER"] = 'another_user'
  70 + @request.env["CONTENT_TYPE"] = "application/json"
  71 + @request.env["HTTP_REMOTE_USER_DATA"] = '{"email":"another_user@domain.com", "name":"Another User"}'
  72 + get :index
  73 +
  74 + assert_equal 2, User.count
  75 + assert_equal "another_user", User.last.login
  76 + assert_equal true, User.last.activated?
  77 + assert_equal User.last.id, session[:user]
  78 + assert_equal "Another User", User.last.name
  79 + assert_equal "another_user@domain.com", User.last.email
  80 + end
  81 +
  82 + should 'create a new user without remote_user_data if the remote user does not exist' do
  83 + User.destroy_all
  84 +
  85 + assert_equal 0, User.count
  86 +
  87 + @request.env["HTTP_REMOTE_USER"] = "testuser"
  88 + get :index
  89 +
  90 + assert_equal 1, User.count
  91 + assert_equal "testuser", User.last.login
  92 + assert_equal true, User.last.activated?
  93 + assert_equal User.last.id, session[:user]
  94 + assert_equal "testuser", User.last.name
  95 + assert_equal "testuser@remote.user", User.last.email
  96 + end
  97 +
  98 + should 'create a new user without remote_user_data even if there is a logged user but the remote user is different' do
  99 + user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test')
  100 + user.activate
  101 +
  102 + login_as user.login
65 103
66 @request.env["HTTP_REMOTE_USER"] = 'another_user' 104 @request.env["HTTP_REMOTE_USER"] = 'another_user'
67 get :index 105 get :index
@@ -70,5 +108,23 @@ class AccountControllerTest &lt; ActionController::TestCase @@ -70,5 +108,23 @@ class AccountControllerTest &lt; ActionController::TestCase
70 assert_equal "another_user", User.last.login 108 assert_equal "another_user", User.last.login
71 assert_equal true, User.last.activated? 109 assert_equal true, User.last.activated?
72 assert_equal User.last.id, session[:user] 110 assert_equal User.last.id, session[:user]
  111 + assert_equal "another_user", User.last.name
  112 + assert_equal "another_user@remote.user", User.last.email
  113 + end
  114 +
  115 + should 'logout if there is a current logged user but not a remote user' do
  116 + user1 = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test')
  117 + user1.activate
  118 +
  119 + login_as user1.login
  120 +
  121 + get :index
  122 +
  123 + assert session[:user].blank?
  124 +
  125 + @request.env["HTTP_REMOTE_USER"] = ""
  126 + get :index
  127 +
  128 + assert session[:user].blank?
73 end 129 end
74 end 130 end
plugins/solr/install.rb
@@ -8,7 +8,6 @@ Dir[tasks_dir].each do |file| @@ -8,7 +8,6 @@ Dir[tasks_dir].each do |file|
8 load file 8 load file
9 end 9 end
10 10
11 -begin  
12 - Rake::Task['solr:download'].invoke  
13 -rescue Exception => exception  
14 -end 11 +puts 'To download solr:'
  12 +puts '$ cd plugins/solr'
  13 +puts '$ rake solr:download'
plugins/spaminator/test/unit/spaminator_plugin/spaminator_test.rb
@@ -50,6 +50,7 @@ class SpaminatorPlugin::SpaminatorTest &lt; ActiveSupport::TestCase @@ -50,6 +50,7 @@ class SpaminatorPlugin::SpaminatorTest &lt; ActiveSupport::TestCase
50 end 50 end
51 51
52 should 'process only people from the environment and that are not abusers' do 52 should 'process only people from the environment and that are not abusers' do
  53 + Person.delete_all
53 p1 = fast_create(Person) 54 p1 = fast_create(Person)
54 p2 = fast_create(Person) 55 p2 = fast_create(Person)
55 p3 = fast_create(Person, :environment_id => fast_create(Environment)) 56 p3 = fast_create(Person, :environment_id => fast_create(Environment))
script/noosfero-plugins
@@ -98,9 +98,12 @@ _enable(){ @@ -98,9 +98,12 @@ _enable(){
98 dependencies_ok=true 98 dependencies_ok=true
99 dependencies_file="$source/dependencies.rb" 99 dependencies_file="$source/dependencies.rb"
100 if [ -e $source/Gemfile ]; then 100 if [ -e $source/Gemfile ]; then
101 - if ! (cd $source && bundle --local); then 101 + gemfile=$(mktemp --tmpdir=.)
  102 + cat Gemfile $source/Gemfile > $gemfile
  103 + if ! RUBYOPT='' BUNDLE_GEMFILE="$gemfile" bundle --local --quiet; then
102 dependencies_ok=false 104 dependencies_ok=false
103 fi 105 fi
  106 + rm -f $gemfile $gemfile.lock
104 fi 107 fi
105 if ! run $dependencies_file; then 108 if ! run $dependencies_file; then
106 dependencies_ok=false 109 dependencies_ok=false
test/unit/task_mailer_test.rb
@@ -18,7 +18,7 @@ class TaskMailerTest &lt; ActiveSupport::TestCase @@ -18,7 +18,7 @@ class TaskMailerTest &lt; ActiveSupport::TestCase
18 task.expects(:target_notification_description).returns('the task') 18 task.expects(:target_notification_description).returns('the task')
19 19
20 requestor = mock() 20 requestor = mock()
21 - requestor.expects(:notification_emails).returns(['requestor@example.com']) 21 + requestor.expects(:notification_emails).returns(['requestor@example.com']).at_least_once
22 requestor.expects(:name).returns('my name') 22 requestor.expects(:name).returns('my name')
23 23
24 environment = mock() 24 environment = mock()
@@ -41,7 +41,7 @@ class TaskMailerTest &lt; ActiveSupport::TestCase @@ -41,7 +41,7 @@ class TaskMailerTest &lt; ActiveSupport::TestCase
41 task.expects(:target_notification_description).returns('the task') 41 task.expects(:target_notification_description).returns('the task')
42 42
43 requestor = mock() 43 requestor = mock()
44 - requestor.expects(:notification_emails).returns(['requestor@example.com']) 44 + requestor.expects(:notification_emails).returns(['requestor@example.com']).at_least_once
45 requestor.expects(:name).returns('my name') 45 requestor.expects(:name).returns('my name')
46 46
47 environment = mock() 47 environment = mock()
@@ -65,7 +65,7 @@ class TaskMailerTest &lt; ActiveSupport::TestCase @@ -65,7 +65,7 @@ class TaskMailerTest &lt; ActiveSupport::TestCase
65 task.expects(:target_notification_description).returns('the task') 65 task.expects(:target_notification_description).returns('the task')
66 66
67 requestor = mock() 67 requestor = mock()
68 - requestor.expects(:notification_emails).returns(['requestor@example.com']) 68 + requestor.expects(:notification_emails).returns(['requestor@example.com']).at_least_once
69 requestor.expects(:name).returns('my name') 69 requestor.expects(:name).returns('my name')
70 70
71 environment = mock() 71 environment = mock()