Commit a39b1635b2fa508858e6a99f3f4901240a152eb8

Authored by AntonioTerceiro
1 parent c250cb47

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
app/controllers/my_profile/mailconf_controller.rb 0 → 100644
... ... @@ -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
... ...
app/models/mail_conf.rb 0 → 100644
... ... @@ -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
... ...
app/views/mailconf/index.rhtml 0 → 100644
... ... @@ -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 8  
9 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 13 <%= file_manager_button(_('Pending tasks'), 'icons-app/todo.png', :controller => 'tasks', :action => 'index') %>
12 14  
13 15 <%= file_manager_button(_('Edit Visual Design'), 'icons-app/design-editor.png', :controller => 'profile_design', :action => 'index') %>
... ...
db/migrate/040_add_enable_email_to_user.rb 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +class AddEnableEmailToUser < ActiveRecord::Migration
  2 + def self.up
  3 + add_column :users, :enable_email, :boolean, :default => false
  4 + end
  5 +
  6 + def self.down
  7 + remove_column :users, :enable_email
  8 + end
  9 +end
... ...
db/schema.rb
... ... @@ -260,6 +260,7 @@ ActiveRecord::Schema.define(:version =&gt; 41) do
260 260 t.string "terms_accepted", :limit => 1
261 261 t.integer "environment_id"
262 262 t.string "password_type"
  263 + t.boolean "enable_email", :default => false
263 264 end
264 265  
265 266 create_table "validation_infos", :force => true do |t|
... ...
public/images/icons-app/README
... ... @@ -41,6 +41,7 @@ stock_todo.png Nuovo
41 41 friends.png (modified version of users.png) Nuovo
42 42 gtk-folder.png Nuovo
43 43 epiphany-bookmarks.png dlg-neu
  44 +mozilla-mail.png dlg-neu
44 45 ### END OF ICONS LISTING ###
45 46  
46 47 Icons rasterization
... ...
public/images/icons-app/mail.png 0 → 120000
... ... @@ -0,0 +1 @@
  1 +mozilla-mail.png
0 2 \ No newline at end of file
... ...
public/images/icons-app/mozilla-mail.png 0 → 100644

4.84 KB

test/functional/mailconf_controller_test.rb 0 → 100644
... ... @@ -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 &lt; Test::Unit::TestCase
341 341 assert_no_tag :tag => 'a', :content => 'Favorite Enterprises'
342 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 363 end
... ...
test/unit/mail_conf_test.rb 0 → 100644
... ... @@ -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 &lt; Test::Unit::TestCase
251 251 assert_equal crypted_password, user.crypted_password
252 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 264 protected
255 265 def create_user(options = {})
256 266 User.create({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options))
... ...