Commit a39b1635b2fa508858e6a99f3f4901240a152eb8
1 parent
c250cb47
Exists in
master
and in
29 other branches
ActionItem44: adding basic mail configuration
For now, user can only enable/disable e-mail account. git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1995 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
13 changed files
with
253 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +class MailconfController < MyProfileController | ||
2 | + | ||
3 | + requires_profile_class Person | ||
4 | + | ||
5 | + protect 'edit_profile', :profile | ||
6 | + | ||
7 | + before_filter :check_mail_enabled | ||
8 | + def check_mail_enabled | ||
9 | + unless MailConf.enabled? | ||
10 | + render :text => "Mail is not enabled in noosfero.", :status => 500 | ||
11 | + end | ||
12 | + end | ||
13 | + | ||
14 | + def index | ||
15 | + @user = profile.user | ||
16 | + end | ||
17 | + | ||
18 | + post_only :save | ||
19 | + def save | ||
20 | + profile.user.update_attributes(params[:user]) | ||
21 | + flash[:notice] = _('e-Mail settings saved successfully.') | ||
22 | + redirect_to :action => 'index' | ||
23 | + end | ||
24 | + | ||
25 | +end |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +class MailConf | ||
2 | + class << self | ||
3 | + | ||
4 | + def config_file | ||
5 | + File.join(RAILS_ROOT, 'config', 'mail.yml') | ||
6 | + end | ||
7 | + | ||
8 | + def config | ||
9 | + if File.exists?(config_file) | ||
10 | + YAML.load_file(config_file) | ||
11 | + else | ||
12 | + {} | ||
13 | + end | ||
14 | + end | ||
15 | + | ||
16 | + def enabled? | ||
17 | + config['enabled'] || false | ||
18 | + end | ||
19 | + | ||
20 | + def webmail_url | ||
21 | + config['webmail_url'] | ||
22 | + end | ||
23 | + | ||
24 | + end | ||
25 | +end |
@@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
1 | +<h1><%= _('e-Mail configuration') %></h1> | ||
2 | + | ||
3 | +<% form_tag(:action => 'save') do %> | ||
4 | + | ||
5 | + <div> | ||
6 | + <%= check_box :user, :enable_email %> | ||
7 | + <label for='user_enable_email'><%= _('Enable e-mail %s') % profile.email_addresses.join(', ') %></label> | ||
8 | + <blockquote> | ||
9 | + <%= _('Marking this options gives you an e-mail account with the address above.') %> | ||
10 | + </blockquote> | ||
11 | + </div> | ||
12 | + | ||
13 | + <% button_bar do %> | ||
14 | + <%= submit_button :save, _('Save') %> | ||
15 | + <%= button :back, _('Back to control panel'), :controller => 'profile_editor' %> | ||
16 | + <% end %> | ||
17 | +<% end %> |
app/views/profile_editor/index.rhtml
@@ -8,6 +8,8 @@ | @@ -8,6 +8,8 @@ | ||
8 | 8 | ||
9 | <%= file_manager_button(_('Edit Profile'), 'icons-app/edit-profile.png', :controller => 'profile_editor', :action => 'edit') %> | 9 | <%= file_manager_button(_('Edit Profile'), 'icons-app/edit-profile.png', :controller => 'profile_editor', :action => 'edit') %> |
10 | 10 | ||
11 | + <%= file_manager_button(_('Mail settings'), 'icons-app/mail.png', :controller => 'mailconf') if profile.person? && MailConf.enabled? %> | ||
12 | + | ||
11 | <%= file_manager_button(_('Pending tasks'), 'icons-app/todo.png', :controller => 'tasks', :action => 'index') %> | 13 | <%= file_manager_button(_('Pending tasks'), 'icons-app/todo.png', :controller => 'tasks', :action => 'index') %> |
12 | 14 | ||
13 | <%= file_manager_button(_('Edit Visual Design'), 'icons-app/design-editor.png', :controller => 'profile_design', :action => 'index') %> | 15 | <%= file_manager_button(_('Edit Visual Design'), 'icons-app/design-editor.png', :controller => 'profile_design', :action => 'index') %> |
db/schema.rb
@@ -260,6 +260,7 @@ ActiveRecord::Schema.define(:version => 41) do | @@ -260,6 +260,7 @@ ActiveRecord::Schema.define(:version => 41) do | ||
260 | t.string "terms_accepted", :limit => 1 | 260 | t.string "terms_accepted", :limit => 1 |
261 | t.integer "environment_id" | 261 | t.integer "environment_id" |
262 | t.string "password_type" | 262 | t.string "password_type" |
263 | + t.boolean "enable_email", :default => false | ||
263 | end | 264 | end |
264 | 265 | ||
265 | create_table "validation_infos", :force => true do |t| | 266 | create_table "validation_infos", :force => true do |t| |
public/images/icons-app/README
@@ -41,6 +41,7 @@ stock_todo.png Nuovo | @@ -41,6 +41,7 @@ stock_todo.png Nuovo | ||
41 | friends.png (modified version of users.png) Nuovo | 41 | friends.png (modified version of users.png) Nuovo |
42 | gtk-folder.png Nuovo | 42 | gtk-folder.png Nuovo |
43 | epiphany-bookmarks.png dlg-neu | 43 | epiphany-bookmarks.png dlg-neu |
44 | +mozilla-mail.png dlg-neu | ||
44 | ### END OF ICONS LISTING ### | 45 | ### END OF ICONS LISTING ### |
45 | 46 | ||
46 | Icons rasterization | 47 | Icons rasterization |
4.84 KB
@@ -0,0 +1,105 @@ | @@ -0,0 +1,105 @@ | ||
1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
2 | + | ||
3 | +class MailconfControllerTest < Test::Unit::TestCase | ||
4 | + | ||
5 | + all_fixtures | ||
6 | + | ||
7 | + def setup | ||
8 | + @controller = MailconfController.new | ||
9 | + @request = ActionController::TestRequest.new | ||
10 | + @response = ActionController::TestResponse.new | ||
11 | + | ||
12 | + MailConf.stubs(:enabled?).returns(true) | ||
13 | + end | ||
14 | + | ||
15 | + should 'check if mail is enabled' do | ||
16 | + MailConf.expects(:enabled?).returns(false) | ||
17 | + | ||
18 | + login_as('ze') | ||
19 | + get :index, :profile => 'ze' | ||
20 | + assert_response 500 | ||
21 | + end | ||
22 | + | ||
23 | + should 'not be used by organizations' do | ||
24 | + org = Organization.create!(:name => 'testorg', :identifier => 'testorg') | ||
25 | + get :index, :profile => 'testorg' | ||
26 | + assert_response 403 | ||
27 | + end | ||
28 | + | ||
29 | + should 'not be edited by others' do | ||
30 | + login_as('johndoe') | ||
31 | + get :index, :profile => 'ze' | ||
32 | + assert_response 403 | ||
33 | + end | ||
34 | + | ||
35 | + should 'be edited by owner' do | ||
36 | + login_as('ze') | ||
37 | + get :index, :profile => 'ze' | ||
38 | + assert_response :success | ||
39 | + end | ||
40 | + | ||
41 | + should 'expose user to templates' do | ||
42 | + login_as('ze') | ||
43 | + get :index, :profile => 'ze' | ||
44 | + assert_equal users(:ze), assigns(:user) | ||
45 | + end | ||
46 | + | ||
47 | + should 'present enable/disable for e-mail use' do | ||
48 | + login_as('ze') | ||
49 | + get :index, :profile => 'ze' | ||
50 | + assert_tag( | ||
51 | + :tag => 'form', | ||
52 | + :attributes => { :action => '/myprofile/ze/mailconf/save'}, | ||
53 | + :descendant => { | ||
54 | + :tag => 'input', | ||
55 | + :attributes => { :name => 'user[enable_email]', :type => 'checkbox' } | ||
56 | + } | ||
57 | + ) | ||
58 | + end | ||
59 | + | ||
60 | + should 'display correctly the state true of e-mail enable/disable' do | ||
61 | + login_as('ze') | ||
62 | + users(:ze).update_attributes!(:enable_email => true) | ||
63 | + get :index, :profile => 'ze' | ||
64 | + assert_tag :tag => 'input', :attributes => { :name => 'user[enable_email]', :type => 'checkbox', :value => '1', :checked => 'checked' } | ||
65 | + end | ||
66 | + | ||
67 | + should 'display correctly the state false of e-mail enable/disable' do | ||
68 | + login_as('ze') | ||
69 | + users(:ze).update_attributes!(:enable_email => false) | ||
70 | + get :index, :profile => 'ze' | ||
71 | + assert_no_tag :tag => 'input', :attributes => { :name => 'user[enable_email]', :type => 'checkbox', :value => '1', :checked => 'checked' } | ||
72 | + assert_tag :tag => 'input', :attributes => { :name => 'user[enable_email]', :type => 'hidden', :value => '0' } | ||
73 | + end | ||
74 | + | ||
75 | + should 'save mail enable/disable as true' do | ||
76 | + login_as('ze') | ||
77 | + post :save, :profile => 'ze', :user => { :enable_email => '1' } | ||
78 | + assert Profile['ze'].user.enable_email | ||
79 | + end | ||
80 | + | ||
81 | + should 'save mail enable/disable as false' do | ||
82 | + login_as('ze') | ||
83 | + post :save, :profile => 'ze', :user => { :enable_email => '0' } | ||
84 | + assert !Profile['ze'].user.enable_email | ||
85 | + end | ||
86 | + | ||
87 | + should 'go back on save' do | ||
88 | + login_as('ze') | ||
89 | + post :save, :profile => 'ze' | ||
90 | + assert_redirected_to :action => 'index' | ||
91 | + end | ||
92 | + | ||
93 | + should 'display notice after saving' do | ||
94 | + login_as('ze') | ||
95 | + post :save, :profile => 'ze' | ||
96 | + assert_kind_of String, flash[:notice] | ||
97 | + end | ||
98 | + | ||
99 | + should 'link back to control panel' do | ||
100 | + login_as('ze') | ||
101 | + get :index, :profile => 'ze' | ||
102 | + assert_tag :tag => 'div', :attributes => { :id => 'content'}, :descendant => { :tag => 'a', :attributes => { :href => '/myprofile/ze' } } | ||
103 | + end | ||
104 | + | ||
105 | +end |
test/functional/profile_editor_controller_test.rb
@@ -341,4 +341,23 @@ class ProfileEditorControllerTest < Test::Unit::TestCase | @@ -341,4 +341,23 @@ class ProfileEditorControllerTest < Test::Unit::TestCase | ||
341 | assert_no_tag :tag => 'a', :content => 'Favorite Enterprises' | 341 | assert_no_tag :tag => 'a', :content => 'Favorite Enterprises' |
342 | end | 342 | end |
343 | 343 | ||
344 | + should 'link to mailconf' do | ||
345 | + MailConf.expects(:enabled?).returns(true) | ||
346 | + get :index, :profile => 'ze' | ||
347 | + assert_tag :tag => 'a', :attributes => { :href => '/myprofile/ze/mailconf' } | ||
348 | + end | ||
349 | + | ||
350 | + should 'not link to mailconf for organizations' do | ||
351 | + MailConf.stubs(:enabled?).returns(true) | ||
352 | + org = Organization.create!(:name => 'test org', :identifier => 'testorg', :contact_person => 'my contact') | ||
353 | + get :index, :profile => 'testorg' | ||
354 | + assert_no_tag :tag => 'a', :attributes => { :href => '/myprofile/testorg/mailconf' } | ||
355 | + end | ||
356 | + | ||
357 | + should 'not link to mailconf if mail not enabled' do | ||
358 | + MailConf.expects(:enabled?).returns(false) | ||
359 | + get :index, :profile => 'ze' | ||
360 | + assert_no_tag :tag => 'a', :attributes => { :href => '/myprofile/ze/mailconf' } | ||
361 | + end | ||
362 | + | ||
344 | end | 363 | end |
@@ -0,0 +1,38 @@ | @@ -0,0 +1,38 @@ | ||
1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
2 | + | ||
3 | +class MailConfTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + CONFIG_FILE = '/not/existing.yml' | ||
6 | + | ||
7 | + should 'use config/mail.yml as config' do | ||
8 | + assert_equal RAILS_ROOT + '/config/mail.yml', MailConf.config_file | ||
9 | + end | ||
10 | + | ||
11 | + should 'enable if told to' do | ||
12 | + MailConf.stubs(:config_file).returns(CONFIG_FILE) | ||
13 | + File.expects(:exists?).with(CONFIG_FILE).returns(true) | ||
14 | + YAML.expects(:load_file).with(CONFIG_FILE).returns({ 'enabled' => true}) | ||
15 | + assert_equal true, MailConf.enabled? | ||
16 | + end | ||
17 | + | ||
18 | + should 'disable if told to' do | ||
19 | + MailConf.stubs(:config_file).returns(CONFIG_FILE) | ||
20 | + File.expects(:exists?).with(CONFIG_FILE).returns(true) | ||
21 | + YAML.expects(:load_file).with(CONFIG_FILE).returns({ 'enabled' => false }) | ||
22 | + assert_equal false, MailConf.enabled? | ||
23 | + end | ||
24 | + | ||
25 | + should 'disable if config file not present' do | ||
26 | + MailConf.stubs(:config_file).returns(CONFIG_FILE) | ||
27 | + File.expects(:exists?).with(CONFIG_FILE).returns(false) | ||
28 | + assert_equal false, MailConf.enabled? | ||
29 | + end | ||
30 | + | ||
31 | + should 'provide webmail url preference' do | ||
32 | + MailConf.stubs(:config_file).returns(CONFIG_FILE) | ||
33 | + File.expects(:exists?).with(CONFIG_FILE).returns(true) | ||
34 | + YAML.expects(:load_file).with(CONFIG_FILE).returns({ 'enabled' => false, 'webmail_url' => 'http://some.url/webmail' }) | ||
35 | + assert_equal 'http://some.url/webmail', MailConf.webmail_url | ||
36 | + end | ||
37 | + | ||
38 | +end |
test/unit/user_test.rb
@@ -251,6 +251,16 @@ class UserTest < Test::Unit::TestCase | @@ -251,6 +251,16 @@ class UserTest < Test::Unit::TestCase | ||
251 | assert_equal crypted_password, user.crypted_password | 251 | assert_equal crypted_password, user.crypted_password |
252 | end | 252 | end |
253 | 253 | ||
254 | + def test_should_have_enable_email_setting | ||
255 | + u = User.new | ||
256 | + u.enable_email = true | ||
257 | + assert_equal true, u.enable_email | ||
258 | + end | ||
259 | + | ||
260 | + def test_should_have_enable_email_as_false_by_default | ||
261 | + assert_equal false, User.new.enable_email | ||
262 | + end | ||
263 | + | ||
254 | protected | 264 | protected |
255 | def create_user(options = {}) | 265 | def create_user(options = {}) |
256 | User.create({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)) | 266 | User.create({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)) |